Jak zera wypełnić wolne miejsce na dysku wirtualnym w systemie Windows, aby uzyskać lepszą kompresję?


46

Jak zera wypełnić wolne miejsce na dysku wirtualnym w systemie Windows, aby uzyskać lepszą kompresję?

Chciałbym do tego proste narzędzie typu open source (lub przynajmniej bezpłatne). Prawdopodobnie powinien napisać pełny tak duży plik, jak to możliwe, 0a następnie go usunąć. Tylko jeden przebieg (nie ze względów bezpieczeństwa, ale ze względu na kompresję, wykonujemy kopię zapasową maszyn wirtualnych).

Powinien być uruchamiany z okien systemu Windows, a nie z dysku.

W systemie Linux robię to tak (jako użytkownik):

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

Edycja 1: Zdecydowałem się użyć sdelete z zaakceptowanej odpowiedzi. Rzuciłem okiem na pomoc sdelete:

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

To jest stara wersja. Użyłem przełącznika -c od 2. wywołania i było to dość szybkie (składnia jest poprawna tylko dla starszych wersji wcześniejszych niż 1.6):

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

Mam wrażenie, że robi to, co chcę. Narzędzie sdelete jest łatwe w użyciu i łatwe do zdobycia.

Edycja 2: Jak wskazał scottbb w swojej odpowiedzi poniżej, we wrześniu 2011 r. Nastąpiła zmiana narzędzia (wersja 1.6). Opcje -c i -z zmieniły znaczenie. Prawidłowe użycie od wersji 1.6 to

c:\>sdelete -z c:

Edycja 3: Istnieje wersja 2.0 sdelete i sdelete64. Podczas zerowania wydają się być błędne. Wygląda na to, że utknął na 100% przez bardzo długi czas. Niektóre osoby zgłosiły 10 - 40 razy dłużej. Starsza wersja 1.61 nie ma tego problemu. Zobacz https://social.technet.microsoft.com/Forums/en-US/2ffb2539-34ba-4378-aa8a-941d243f117e/sdelete-hangs-at-100?forum=miscutils

Edycja 4: Teraz jest kwestia dynamicznie przydzielanego miejsca na dysku wirtualnym . Jeśli masz dysk 100 GB, który nie jest pełny i używa tylko 30 GB na hoście, wypełnienie zerem nie powinno radykalnie zwiększyć rozmiaru dysku, ponieważ jest to sprzeczne z celem dynamicznej alokacji . Istnieje odpowiedź na Oracle VM VirtualBox https://superuser.com/q/907196/44402 - ale na innych stosach, takich jak VMWare, Xen, XenServer itp., Należy odpowiedzieć osobno.


2
sdeletejest właściwym narzędziem do pracy, ale zmiana narzędzia z września 2011 r. (wersja 1.6) powoduje, że powyższe odpowiedzi są nieprawidłowe. -cI -zopcje zmieniły znaczenie. Prawidłowe użycie to terazsdelete -z c:\
scottbb

Upewnij się także, że używasz obrazów w stylu COW (Copy on Write), jeśli masz wiele komputerów opartych na tej samej instalacji podstawowej.
Matt

Odpowiedzi:


46

W systemie Windows użyj narzędzia sysinternals sdelete, aby wyzerować całą pustą przestrzeń. Polecenie, które chcesz wyglądać tak sdelete -z c:.

Użycie: sdelete [-p przechodzi] [-s] [-q] ...  
sdelete [-p przechodzi] [-z | -c] [litera dysku] ...  
-a Usuń atrybut tylko do odczytu.  
-c Wyczyść wolne miejsce.  
-p przebiegi Określa liczbę przebiegów zastępujących (domyślnie 1).  
-q Nie drukuj błędów (cicho).  
-s lub -r Rekurencyjne podkatalogi.  
-z Zero wolnego miejsca (dobre do optymalizacji dysku wirtualnego).

W przypadku Linuksa sugeruję użycie zerofree .


Przybyłem tutaj, aby skompresować moje dyski VHD. Udostępnianie niektórych powiązanych linków z TechNet .. technet.microsoft.com/en-us/library/cc708394%28v=ws.10%29.aspx technet.microsoft.com/en-us/library/cc708317(v=ws.10 ) .aspx
Faiz

Zastanawiam się, czy wypełnienie zera miałoby jakikolwiek pozytywny wpływ na standardowy zaszyfrowany dysk Linux LUKS dm-crypt . zanim poddam całą maszynę uruchamianiu z bootstick Clonezilli i fizyczną kopią zapasową całego dysku. - Czy wyzerowana sekcja w szyfrowaniu doprowadzi do wyzerowanej sekcji na dysku zewnętrznym? Czy będzie nadal zapisywać (nieprzydzielony) hałas ze względów bezpieczeństwa? Czy powinienem zerować zamontowany na surowo (nie patrząc na zaszyfrowaną zawartość) napęd szyfrujący? (I czy to dobry pomysł, tj. Czy tabela alokacji jest godna zaufania w kontekście dysku zaszyfrowanego?)
Frank Nocke,

Byłbym zszokowany, gdyby zrobił coś innego niż szyfrowanie wartości zerowych i zapisanie zaszyfrowanego „szumu” na dysku.
Dan Pritts,

15

System Windows ma już wbudowane narzędzie wiersza polecenia, które wykonuje to: CIPHER. Zobacz jego opcję / W.

Zatem kompletne polecenie brzmiałoby : cipher / w: c: (zamień c: na rzeczywistą literę dysku)

(zapisuje zera w nieużywanym miejscu, a następnie 0xff, więc musisz go obejrzeć i zatrzymać za pomocą ctrl-c, gdy zaczyna pisać 0xff - nie jest idealny, ale jest darmowy i już dostępny w systemie Windows od co najmniej XP)


3
ciekawe podejście. Przerwij wykonywanie tuż przed rozpoczęciem cofania wszystkich zer. +1 za kreatywne rozwiązanie przy użyciu narzędzi, które już tam są!
PsychoData,

Zastanawiam się, czy można wykryć, kiedy skończą się zapisywanie zer, a następnie sprawić, by przerwano ...
Frederick Nord

Jeśli używasz dysku twardego SSD, sprawdź, czy masz włączone TRIM. Następnie cały nieużywany blok zostanie szybko usunięty za pomocą wzoru 0xFF przez oprogramowanie dysku twardego. Jest to bardzo przydatne w przypadku obrazów dysków wirtualnych wykonanych przez serwery wirtualne. Obrazy zostaną wypełnione jako luki i zwolnią bloki systemu plików na systemie plików hosta.
Znik

Działa to bardzo dobrze i znacznie szybciej niż SDelete -z (który utknął na poziomie 100% bez żadnych innych informacji zwrotnych).
psychowood

6

SDelete nie wyzeruje miejsca na kompaktowanie dysku wirtualnego. SDelete zaczyna od wyzerowania wolnego miejsca, ale następnie wypełnia go 0xff, a następnie losowymi bajtami. Zobacz, jak przygotować plik wirtualnego dysku twardego Virtual Server 2005, aby wysłać go do Microsoft Support Services Aby dowiedzieć się, jak ustawić VHD do zagęszczania

Z jakiegoś powodu może być trudno znaleźć plik Precompact.exe. Znalazłem oddzielna kopię pobrania tutaj . Jeśli jednak masz wirtualny komputer z systemem Windows, możesz go również pobrać z% programfiles (x86)% \ Windows Virtual PC \ Integration Components \ Precompact.iso


2
sdelete z opcją -c wypełnia zero. Być może myślisz o wbudowanym narzędziu szyfrującym Windows, które nie ma opcji zerowej?
Jeremy M

„SDelete implementuje standard czyszczenia i dezynfekcji Departamentu Obrony DOD 5220.22-M” (z dokumentacji), który konkretnie nie ogranicza się do klastra. sdelete -c powoduje zerowanie wolnego miejsca (po jego wypełnieniu), jednak metoda, której używa sdelete, nie jest tym samym co prekompakt, a w wielu przypadkach spowoduje większy dysk niż prekompakt, który został zaprojektowany, aby zerować dyski wirtualne
Jim B

Warto wiedzieć o innym narzędziu. Dziękuję
mit

2
SDelete może pozostawić dysk z zerami, ale prekompakt działa znacznie szybciej i był przeznaczony do tego rodzaju sytuacji.
Chris S

2
@romkyns To już nie ma znaczenia, ponieważ wszystkie nowoczesne wersje obsługi Windows i Hyper-V trim(od Win7 i Hyper-V 2012), nie ma potrzeby zerowania przed kompaktowaniem. Narzędzie PreCompact wyzerowało tylko części dysku z usuniętymi plikami, część, która nigdy nie była używana, pozostała nietknięta. Użycie czegoś takiego sdeletewypełniłoby dysk dynamiczny do statycznego rozmiaru, który można by następnie spakować z powrotem do faktycznie używanego rozmiaru.
Chris S

6

fsutilnie jest open source, ale jest dostarczany z systemem Windows i dlatego nie kosztuje nic dodatkowego. Użyłem go do wyzerowania wolnego miejsca na pustym dysku WD 250 GB 7200 RPM ( F:). Oto, co uruchomiłem z wiersza poleceń:

fsutil volume diskfree f:

Który pokazał ten raport:

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

Użyłem Total # of avail free bytesnastępujących poleceń:

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

Zapisanie 250 GB zer zajęło około 4 godzin.


3

Ja również szukałem sposobu, w jaki Cipher mógłby zapisać tylko 0x00, a następnie wyjść, gdy zacznę zapisywać 0xFF w wolnym miejscu. Umożliwi to skompresowanie maksymalnej ilości wolnego miejsca. Wymyśliłem następujące podstawowe zadanie PowerShell

zamień d: \ na wymagany dysk

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

Pozdrawiam Simon


1

Jeśli korzystasz z VMware, znacznie lepszym sposobem jest użycie narzędzi wbudowanych w VMware, aby odzyskać wszelkie nieużywane miejsce na dysku wirtualnym.

Użyłem tego, aby zmniejszyć rozmiar dysku wirtualnego z 28 gigabajtów do 13 gigabajtów. Twój przebieg może się różnić.

Kiedy próbowałem użyć sdelete -z c:, faktycznie zwiększyło rozmiar dysków wirtualnych do 30 gigabajtów, co było jego maksymalnym rozmiarem.

Zobacz stronę VMware i Kompakt wirtualny dysk twardy , który znajduje się poniżej Using VMware Workstation > Configuring and Managing Devices > Configuring and Maintaining Virtual Hard Disks.

Aktualizacja

Czasami narzędzia GUI nie są tak niezawodne, jak narzędzia wiersza poleceń. Natknąłem się na problemy, w których narzędzia GUI zawodzą, ale narzędzia wiersza poleceń działają dobrze. Oto opcje 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.

Oto przykład zmniejszania dysku. Ten wiersz poleceń działał pomimo niepowodzenia tego samego polecenia z GUI:

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.

Komunikat o błędzie rozpoczynający się od VizDiskLibjest nowy w VMware Desktop 10 i można go bezpiecznie zignorować.


1
Sam program sdelete nie ma na celu zmniejszenia rozmiaru vmdk. Służy do zamiany całego dostępnego wolnego miejsca na zera w przygotowaniu do operacji zmniejszania. Jeśli tego nie zrobisz, usunięte pliki i inne osierocone dane będą nadal znajdować się na dysku. Narzędzia VMWare nie zawsze będą w stanie odzyskać przestrzeń dyskową zajmowaną przez te pliki. Przekształcenie tych „usuniętych plików” w zera sprawia, że ​​miejsce na dysku można w pełni odzyskać po uruchomieniu narzędzia zmniejszającego. Powodem, dla którego zaobserwowano wzrost rozmiaru pliku na dysku wirtualnym, jest to, że sdelete wypełnia całe dostępne miejsce zerami.
Leon Lucardie

Dzięki za wyjaśnienie tego. Stwierdza, że ​​narzędzia mogą skorzystać z lepszego nazewnictwa i / lub opisu wiersza tego, co robi narzędzie po uruchomieniu.
Contango,


-1

Mit

Odkryłem, że skrypt Powershell Simona zrobił dokładnie to, czego potrzebujesz, bez problemów z wersją sdelete. (przełączniki robią różne rzeczy w różnych wersjach)

Miał jeden problem, że szyfr działał, ale to naprawiłem.

Następnie zmodyfikowałem skrypt, aby wyczyścić folder tymczasowy:

Konieczne będzie zastąpienie F: \ literą dysku w obu miejscach.

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

-4

Dlaczego narzędzia innych firm, skoro system Windows zawiera już wszystko, czego kiedykolwiek będziesz potrzebować, „za darmo” i tak szybko, jak to możliwe:

1) format X: /fs:XXXX /p:#, gdzie Xjest litera dysku; XXXXto system plików, Yeither i #liczba przejść;

2) cleanpolecenie diskpart : http://technet.microsoft.com/library/cc766465.aspx , http://support.microsoft.com/kb/300415 ;

Przy okazji nie potrzebujesz więcej niż jednego przebiegu - twierdzenie inaczej jest przestarzałą informacją o przestarzałych strategiach zapisu / czerwonego dysku, ludzi pchających produkty, napędzanych paranoią lub bs przekazywanych jako „porady ekspertów”.

Edycja: nvm, brakowało części wolnego miejsca ...


1
W wielu przypadkach dostępne są narzędzia innych firm, które wykonują dobre lub lepsze zadania, są łatwiejsze do zainstalowania lub bardziej niezawodne. Ale to jest całkowicie OT, pytanie nie dotyczyło tego, kto to pisze. Poza tym Microsoft nabył Sysinternals (który napisał SSDelete), ponieważ były o wiele lat lepsze niż wbudowane. Wystarczy porównać ProcessExplorer z produktem MS „TaskManager” -1 za uruchomienie flamewara
Alojz Janez

Przegapiłeś wymóg „open source” w pytaniu, prawda?
Alojz Janez,
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.