Frage Wie wird der freie Speicherplatz einer virtuellen Festplatte unter Windows auf Null gesetzt, um eine bessere Komprimierung zu erreichen?


Wie wird der freie Speicherplatz einer virtuellen Festplatte unter Windows auf Null gesetzt, um eine bessere Komprimierung zu erreichen?

Ich hätte gerne ein einfaches Open-Source-Tool (oder zumindest kostenlos) dafür. Es sollte wahrscheinlich eine so große Datei wie möglich schreiben 0und lösche es anschließend. Nur ein Durchgang (dies ist nicht aus Sicherheitsgründen, aber für die Komprimierung sichern wir virtuelle Maschinen).

Sollte innerhalb von Windows und nicht von einer Festplatte laufen.

Unter Linux mache ich das so (als Benutzer):

cd
mkdir wipe
sudo sfill -f -l -l -z ./wipe/

Bearbeiten 1: Ich entschied mich zu verwenden sdelete von der angenommenen Antwort. Ich habe mir die Hilfe des Händlers angesehen:

C:\WINDOWS\system32>sdelete /?

SDelete - Secure Delete v1.51
Copyright (C) 1999-2005 Mark Russinovich
Sysinternals - www.sysinternals.com

usage: sdelete [-p passes] [-s] [-q] <file or directory>
       sdelete [-p passes] [-z|-c] [drive letter]
   -c         Zero free space (good for virtual disk optimization)
   -p passes  Specifies number of overwrite passes (default is 1)
   -q         Don't print errors (Quiet)
   -s         Recurse subdirectories
   -z         Clean free space

Dies ist eine alte Version. Ich habe den Schalter -c seit dem zweiten Aufruf benutzt und das war ziemlich schnell (Syntax ist nur für ältere Versionen vor V1.6 gültig):

c:\>sdelete -c c: (OUTDATED!)

Ich habe den Eindruck, das macht was ich will. Das Tool ist einfach zu bedienen und leicht zu bekommen.

Bearbeiten 2: Wie scottbb in seiner Antwort unten bemerkte, gab es eine Änderung des Tools im September 2011 (Version 1.6). Die Optionen -c und -z haben ihre Bedeutung geändert. Die korrekte Verwendung ab 1.6 ist

c:\>sdelete -z c:

Bearbeiten 3: Es gibt eine 2.0-Version von Sdelete und Sdelete64. Sie scheinen beim Nullsetzen fehlerhaft zu sein. Es scheint für extrem lange Zeiten bei 100% hängen zu bleiben. Einige Leute haben 10 - 40 Mal länger berichtet. Die ältere Version 1.61 hat dieses Problem nicht. Sehen https://social.technet.microsoft.com/Forums/en-US/2ffb2539-34ba-4378-aa8a-941d243f117e/sdelete-hangs-at-100?forum=miscutils

Edit 4: Jetzt gibt es das Problem von dynamisch zugewiesener virtueller Speicherplatz. Wenn Sie einen 100-GB-Datenträger haben, der nicht voll ist und nur 30 GB auf dem Host verwendet, wird keine Füllung benötigt sollte die Größe der Disc nicht dramatisch erhöhen, da dies dem Zweck der dynamischen Zuordnung widerspricht. Es gibt eine Antwort für Oracle VM VirtualBox  https://superuser.com/q/907196/44402 - aber auf anderen Stacks wie VMWare, Xen, XenServer, etc. muss dies separat beantwortet werden.


40
2017-07-28 23:39


Ursprung


sdelete ist das richtige Werkzeug für den Job, aber eine Änderung im September 2011 zum Tool (Version 1.6) macht die obigen Antworten falsch. Das -c und -z Optionen haben ihre Bedeutung geändert. Die korrekte Verwendung ist jetzt sdelete -z c:\ - scottbb
Stellen Sie außerdem sicher, dass Sie COW-Bilder (Copy on Write) verwenden, wenn Sie viele Maschinen haben, die auf der gleichen Basisinstallation basieren. - Matt


Antworten:


Unter Windows verwenden Sie das Tool sysinternals sdelete um den ganzen leeren Raum auf Null zu setzen. Der gewünschte Befehl würde so aussehen sdelete -z c:.

Verwendung: sdelete [-p geht] [-s] [-q] ...
sdelete [-p geht] [-z | -c] [Laufwerksbuchstabe] ...
-a Schreibgeschütztes Attribut entfernen.
-c Freiraum löschen.
-p passs Gibt die Anzahl der Überschreibvorgänge an (Standardwert ist 1).
-q Drucken Sie keine Fehler (leise).
-s oder -r Recurse-Unterverzeichnisse.
-z Null freier Speicherplatz (gut für die Optimierung der virtuellen Festplatte).

Für Linux schlage ich vor, dass Sie verwenden zerofree.


40
2017-07-28 23:43



Kam hierher, um meine VHDs zu komprimieren. Einige verwandte Links von TechNet teilen technet.microsoft.com/en-us/library/cc708394%28v=ws.10%29.aspx  technet.microsoft.com/en-us/library/cc708317(v=ws.10).aspx - Faiz
Ich frage mich, ob sich das Zero-Filling positiv auf ein mit Linux-Standard verschlüsseltes Laufwerk auswirken würde LUKS dm-Krypta. Vor Ich unterbreche die gesamte Maschine von einem Clonezilla-Bootstick und physischer Sicherung des gesamten Laufwerks. - Wird der zeroed Abschnitt innerhalb der Verschlüsselung zu einem zeroed Abschnitt auf der externen Festplatte führen? Oder wird es aus Sicherheitsgründen immer noch (nicht zugewiesenes) Rauschen schreiben? Oder sollte ich das raw-mounted (nicht mit verschlüsselten Inhalten) crypt Laufwerk zero? (Und ist das eine gute Idee, dh ist die Zuordnungstabelle im Kontext eines verschlüsselten Laufwerks vertrauenswürdig?) - Frank Nocke
Ich wäre schockiert, wenn es etwas anderes tun würde, als die Nullen zu verschlüsseln und das verschlüsselte "Rauschen" auf die Festplatte zu schreiben. - Dan Pritts


Windows verfügt bereits über ein integriertes Befehlszeilentool, das dies ausführt: CIPHER. Siehe seine Option / W.

Also wäre der komplette Befehl: Chiffre / w: c:  (ersetzen c: mit tatsächlichem Laufwerksbuchstaben)

(es schreibt Nullen in den unbenutzten Platz, dann 0xff, also musst du es anschauen und mit ctrl-c stoppen, wenn es anfängt 0xff zu schreiben - nicht ideal, aber es ist kostenlos und schon in Windows seit XP verfügbar)


14
2017-10-08 13:17



interessanter Ansatz. Brechen Sie die Ausführung kurz bevor sie alle Nullen rückgängig macht. +1 für eine kreative Lösung mit bereits vorhandenen Tools! - PsychoData
Ich frage mich, ob es möglich ist, zu erkennen, wann es fertig ist, Nullen zu schreiben und dann abzubrechen ... - Frederick Nord
Wenn Sie eine SSD-Festplatte verwenden, überprüfen Sie, ob TRIM aktiviert ist. Dann werden alle unbenutzten Blöcke schnell mit dem 0xFF-Muster von der Festplatten-Firmware gelöscht. Dies ist sehr nützlich für virtuelle Festplattenimages, die von virtuellen Servern erstellt werden. Diese Bilder werden als Lücken gefüllt und befreien Dateisystemblöcke auf dem Hosting-Dateisystem. - Znik
Dies funktionierte sehr gut und viel schneller als SDelete -z (das zu 100% feststeckte, ohne weitere Rückmeldungen zu geben). - psychowood


SDelete wird den Speicherplatz für die Komprimierung einer virtuellen Festplatte nicht auf Null setzen. SDelete beginnt damit, den freien Speicherplatz auf Null zu setzen, füllt ihn dann aber mit 0xff und dann mit zufälligen Bytes So bereiten Sie eine Virtual Server 2005-Datei für virtuelle Festplatten vor, die an Microsoft Product Support Services gesendet werden soll So richten Sie eine VHD für die Komprimierung ein

Precompact.exe kann aus irgendeinem Grund schwierig zu finden sein. Ich habe eine separate herunterladbare Kopie gefunden Hier. Wenn Sie jedoch einen Windows Virtual PC haben, können Sie ihn auch von% programfiles (x86)% \ Windows Virtual PC \ Integration Components \ Precompact.iso beziehen


6
2017-07-29 03:01



sdelete mit der Option -c ist eine Nullfüllung. Vielleicht denken Sie an das integrierte Windows-Verschlüsselungsdienstprogramm, das keine Nulloption enthält? - Jeremy M
"SDelete implementiert den Standard DOD 5220.22-M des Verteidigungsministeriums (aus den Dokumenten), der speziell nicht einfach einen Cluster ausschließt. sdelete -c löscht den freien Speicherplatz (nach dem Ausfüllen), jedoch ist die von sdelete verwendete Methode nicht die gleiche wie die vorkompatibel und führt in vielen Fällen zu einem größeren Laufwerk als das vorkompatible Laufwerk, mit dem virtuelle Laufwerke auf Null gesetzt werden - Jim B
Es ist interessant, von einem anderen Werkzeug zu wissen. Vielen Dank - mit
SDelete kann die Festplatte mit 0s belassen, aber die Vorkomprimierung funktioniert viel schneller und war für diese Art von Situation gedacht. - Chris S
@romkyns Es spielt keine Rolle mehr, wie alle modernen Versionen von Windows und Hyper-V unterstützen trim (ab Win7 und Hyper-V 2012) muss vor dem Komprimieren keine Null gesetzt werden. Das PreCompact-Dienstprogramm löschte nur Teile der Festplatte mit gelöschten Dateien, der Teil, der noch nie verwendet wurde, wurde nicht verändert. Mit etwas wie sdelete würde die dynamische Festplatte auf statische Größe füllen, die dann wieder auf die tatsächlich verwendete Größe komprimiert werden könnte. - Chris S


fsutil ist nicht Open Source, wird aber mit Windows geliefert und kostet daher nichts extra. Ich benutzte es, um den freien Speicherplatz auf einem leeren WD 250 GB 7200 RPM-Laufwerk (F:). Hier ist, was ich von der Kommandozeile aus ausgeführt habe:

fsutil volume diskfree f:

Welches zeigte diesen Bericht:

Total # of free bytes        : 249899469856
Total # of bytes             : 249997291520
Total # of avail free bytes  : 249899469856

ich benutzte Total # of avail free bytes in den folgenden Befehlen:

fsutil file createnew F:\clear 249899469856
fsutil file setvaliddata F:\clear 249899469856
fsutil file setzerodata offset=0 length=249899469856 F:\clear
del f:\clear

Es dauerte ungefähr 4 Stunden, um 250 GB Nullen zu schreiben.


5
2017-12-16 21:08



Dies ist eine großartige Methode zu verwenden, danke. - Luke Bakken


Ich hatte auch nach einer Möglichkeit gesucht, mit Cipher nur 0x00 zu schreiben und dann zu beenden, wenn ich anfing, 0xFF in den freien Platz zu schreiben. Dadurch kann der maximale freie Speicherplatz komprimiert werden. Ich habe den folgenden grundlegenden PowerShell-Job entwickelt

Ersetzen Sie d: \ durch das erforderliche Laufwerk

Function CipherFreeSpace
{
    $cipherjob = @()
    $Job = start-job -ScriptBlock {cipher /w:d:\ }
    while ($cipherjob -notcontains "Writing 0xFF")
    {
        Write-host "." -nonewline 
        Start-Sleep 2
        $cipherjob += $job | Receive-Job 
    }
    $Job | Stop-Job | Remove-Job -Force
}
CipherFreeSpace

Grüße Simon


2
2017-11-07 02:15





Wenn Sie VMware verwenden, ist es viel besser, die in VMware integrierten Tools zu verwenden, um ungenutzten Speicherplatz auf dem virtuellen Laufwerk zurückzugewinnen.

Ich habe dies verwendet, um die Größe der virtuellen Festplatte von 28 Gigabyte auf 13 Gigabyte zu reduzieren. Ihre Laufleistung kann variieren.

Als ich es versuchte sdelete -z c:eigentlich erhöht die Größe der virtuellen Laufwerke auf 30 Gigabyte, das war seine maximale Größe.

Siehe die VMware-Website und Kompakte eine virtuelle Festplatte, das ist unter Using VMware Workstation > Configuring and Managing Devices > Configuring and Maintaining Virtual Hard Disks.

Aktualisieren

Manchmal sind die GUI-Tools nicht so zuverlässig wie die Befehlszeilenwerkzeuge. Ich bin auf Probleme gestoßen, bei denen die GUI-Tools fehlschlagen, aber die Befehlszeilen-Tools funktionieren einwandfrei. Hier sind die Optionen für VMware Desktop 10:

C:\Program Files (x86)\VMware\VMware Workstation>vmware-vdiskmanager -h
Diskname or some other argument is missing.
VMware Virtual Disk Manager - build 1895310.
Usage: vmware-vdiskmanager.exe OPTIONS <disk-name> | <mount-point>
Offline disk manipulation utility
  Operations, only one may be specified at a time:
     -c                   : create disk.  Additional creation options must
                            be specified.  Only local virtual disks can be
                            created.
     -d                   : defragment the specified virtual disk. Only
                            local virtual disks may be defragmented.
     -k                   : shrink the specified virtual disk. Only local
                            virtual disks may be shrunk.
     -n <source-disk>     : rename the specified virtual disk; need to
                            specify destination disk-name. Only local virtual
                            disks may be renamed.
     -p                   : prepare the mounted virtual disk specified by
                            the mount point for shrinking.
     -r <source-disk>     : convert the specified disk; need to specify
                            destination disk-type.  For local destination disks
                            the disk type must be specified.
     -x <new-capacity>    : expand the disk to the specified capacity. Only
                            local virtual disks may be expanded.
     -R                   : check a sparse virtual disk for consistency and attempt
                            to repair any errors.
     -e                   : check for disk chain consistency.
     -D                   : make disk deletable.  This should only be used on disks
                            that have been copied from another product.

Hier ist ein Beispiel für das Schrumpfen einer Festplatte. Diese Befehlszeile funktionierte trotz des gleichen Befehls von der GUI aus:

C:\Program Files (x86)\VMware\VMware Workstation>vmware-vdiskmanager.exe -k
 "H:\VMware\WindowsXP.vmdk"
  VixDiskLib: Invalid configuration file parameter.  Failed to read configuration file.
  Shrink: 100% done.

Die Fehlermeldung beginnt mit VizDiskLib ist neu in VMware Desktop 10 und kann problemlos ignoriert werden.


1
2017-07-29 19:37



sdelete selbst soll die vmdk-Größe nicht verkleinern. Es wird verwendet, um den gesamten verfügbaren freien Platz in Nullen als Vorbereitung für die Schrumpfoperation zu verwandeln. Wenn Sie dies nicht tun, sind gelöschte Dateien und andere verwaiste Daten weiterhin auf dem Datenträger vorhanden. VMWare-Tools können nicht immer den von diesen Dateien belegten Speicherplatz zurückfordern. Wenn Sie diese "gelöschten Dateien" in Nullen umwandeln, wird der Speicherplatz vollständig freigegeben, wenn Sie das Werkzeug zum Verkleinern ausführen. Der Grund für die Erhöhung der Dateigröße auf dem virtuellen Laufwerk ist, dass sdelete den gesamten verfügbaren Speicherplatz mit Nullen füllt. - Leon Lucardie
Danke, dass du das erklärt hast. Ich denke, die Tools könnten von einer besseren Benennung und / oder einer einzeiligen Beschreibung dessen profitieren, was das Tool bei der Ausführung tut. - Contango


Google-up  Eraser 5.8.8 32-Bit Funktioniert sogar schön auf Windows XP SP3!


0
2018-01-11 15:44





Mit,

Ich habe festgestellt, dass das Powershell-Skript von Simon genau das getan hat, was Sie brauchen, ohne die Probleme mit der Versionskontrolle von sdelete. (Schalter machen verschiedene Dinge in verschiedenen Versionen)

Es hatte ein Problem, diese Chiffre lief weiter, aber das habe ich behoben.

Ich änderte das Skript weiter, um den temporären Ordner zu bereinigen:

Sie müssen an beiden Stellen F: \ durch Ihren Laufwerksbuchstaben ersetzen.

Function CipherFreeSpace
{
    $cipherjob = @()
    $Job = start-job -ScriptBlock {cipher /w:F:\ }
    while ($cipherjob -notcontains "Writing 0xFF")
    {
        Write-host "." -nonewline 
        Start-Sleep 2
        $cipherjob += $job | Receive-Job 
    }
    Stop-Process -processname cipher
    Start-Sleep -s 3
    Remove-Item -recurse F:\EFSTMPWP
    $Job | Stop-Job | Remove-Job -Force
}
CipherFreeSpace

-1
2017-08-31 17:17