Was sind die möglichen Gründe, warum Hyper-V eine VHD nicht komprimieren kann?

8

Ich hoste mehrere virtuelle Maschinen auf einem Host, auf dem Hyper-V Server 2008 R2 ausgeführt wird. Die Festplatten wurden ursprünglich vor etwa 16 Monaten auf einem anderen Server (2008, nicht R2) bereitgestellt und vor einem Jahr auf diesen Server migriert. Die meisten Gäste verwenden Windows 7.

Kürzlich habe ich die VHD-Größe mit dem vom Gast gemeldeten genutzten Speicherplatz verglichen und festgestellt, dass mehrere Computer VHD-Dateien hatten, die 50-100% größer waren als tatsächlich benötigt. Deshalb habe ich beschlossen, die VHD-Dateien zu komprimieren, um Speicherplatz auf dem Host freizugeben. Ich folgte den Anweisungen, die ich im Internet gefunden hatte, ungefähr wie folgt:

  1. Führen Sie CHKDSK auf dem Gastcomputer aus
  2. Führen Sie eine Defragmentierung auf dem Gastcomputer aus (integrierte Windows-Defragmentierung).
  3. Schalte den Gast aus
  4. Öffnen Sie das Tool "Edit Disk ..." in Hyper-V Manager
  5. Wählen Sie die gewünschte VHD aus und komprimieren Sie sie

Als ich das zum ersten Mal versuchte, funktionierte es einwandfrei und reduzierte die Größe meiner VHD um etwa 50%. Aber für die Festplatten aller anderen Gäste erhalte ich folgende Fehlermeldung:

The server encountered an error trying to edit the virtual disk.

'The system failed to compact 'C:\example.vhd'. Error Code: The requested
operation could not be completed due to a file system limitation

Bei keinem Gast ist die NTFS-Komprimierung aktiviert. Es gibt keine Schnappschüsse dieser Datenträger. Was könnte diesen Fehler sonst noch verursachen?

Bearbeiten : Bonuspunkte für alle, die eine Lösung beschreiben, um dynamische VHD-Größen automatisch in Schach zu halten.

Nic
quelle
1
Haben Sie Schattenkopien auf Gastebene?
Tony Roth
Ah ja. Das war das Problem. Aber nicht, warum das als Antwort posten?
Nic
Ich war mir der Antwort nicht ganz sicher.
Tony Roth
Die einzige Möglichkeit, dynamische Datenträger vor dem Durcheinander zu bewahren, besteht darin, keine dynamischen Datenträger zuzulassen.
Tony Roth

Antworten:

7

Entfernen Sie die Schattenkopien vom Gast. Das wird es schaffen!

vssadmin delete shadows /all
Tony Roth
quelle
1
Wenn sich der obige Befehl über nicht löschbare Schatten beschwert, versuchen Sie es diskshadowund verwenden Sie delete shadows alles.
Der Hochstapler
3

Im Interesse der Konsolidierung der Internetsuche: Dieser Link wurde schließlich gefunden und hat funktioniert, als HyperV compact dies nicht tat: https://fiddley.wordpress.com/2014/01/27/dynamically-expanding-vhd-not-compacting- in-hyper-v /

Führen Sie in der administrativen Eingabeaufforderung aus DISKPART

An der DISKPART-Eingabeaufforderung

select vdisk File=”I:\path\to\your.vhd”
attach vdisk readonly
compact vdisk
detach vdisk
Stan
quelle
0

Abgesehen von dem Vorschlag, die Schattenkopien zu löschen, sollten Sie SDeleteden leeren Bereich vor dem Komprimieren auf Null setzen, da manchmal viel mehr nicht genutzter Speicherplatz komprimiert werden kann. Zum Nullstellen des leeren Bereichs in C: sollten Sie dies beispielsweise in der virtuellen Maschine ausführen :

sdelete -z c:

In meinem Fall hatte ich eine virtuelle Festplattendatei mit einer Gesamtgröße von 80 GB. Die erste Komprimierung reduzierte sie nur auf 78 GB. Durch Löschen der Schattenkopien und erneutes Komprimieren wurde sie auf 72 GB reduziert, aber nach dem Ausführen sdeleteder nächsten Komprimierung wurde die Dateigröße reduziert bis 56 GB.

Alberto Martinez
quelle