Come azzerare lo spazio libero di un disco virtuale su Windows per una migliore compressione?


46

Come azzerare lo spazio libero di un disco virtuale su Windows per una migliore compressione?

Vorrei un semplice strumento open source (o almeno gratuito) per questo. Dovrebbe probabilmente scrivere un file il più grande possibile 0e cancellarlo in seguito. Solo un passaggio (non per motivi di sicurezza ma per compressione, stiamo eseguendo il backup di macchine virtuali).

Dovrebbe funzionare da Windows e non da un disco.

Su Linux lo faccio in questo modo (come utente):

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

Modifica 1: ho deciso di utilizzare sdelete dalla risposta accettata. Ho dato un'occhiata all'aiuto di 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

Questa è una vecchia versione. Ho usato l'opzione -c dalla seconda invocazione e questo è stato abbastanza veloce (sintassi valida solo per le versioni precedenti prima della V1.6):

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

Ho l'impressione che questo faccia quello che voglio. Lo strumento sdelete è facile da usare e facile da ottenere.

Modifica 2: Come scottbb ha sottolineato nella sua risposta di seguito, c'è stata una modifica dello strumento di settembre 2011 (versione 1.6) Le opzioni -c e -z hanno cambiato significato. L'uso corretto dall'1.6 in poi è

c:\>sdelete -z c:

Modifica 3: esiste una versione 2.0 di sdelete e sdelete64. Sembrano buggy durante l'azzeramento. Sembrerà bloccato al 100% per tempi estremamente lunghi. Alcune persone hanno riportato 10 - 40 volte più a lungo. La versione precedente 1.61 non presenta questo problema. Vedi https://social.technet.microsoft.com/Forums/en-US/2ffb2539-34ba-4378-aa8a-941d243f117e/sdelete-hangs-at-100?forum=miscutils

Modifica 4: Ora c'è il problema dello spazio su disco virtuale allocato dinamicamente . Se si dispone di un disco da 100 GB che non è pieno e utilizza solo 30 GB sull'host, il riempimento zero non dovrebbe aumentare notevolmente le dimensioni del disco perché ciò contraddice lo scopo dell'allocazione dinamica . C'è una risposta per Oracle VM VirtualBox https://superuser.com/q/907196/44402 - ma su altri stack come VMWare, Xen, XenServer, ecc., È necessario rispondere separatamente.


2
sdeleteè lo strumento giusto per il lavoro, ma una modifica di settembre 2011 allo strumento (versione 1.6) rende errate le risposte precedenti. Le opzioni -ce -zhanno cambiato significato. L'utilizzo corretto ora èsdelete -z c:\
scottbb il

Assicurati anche di usare immagini in stile COW (Copia su Scrittura) se hai molte macchine basate sulla stessa installazione di base.
Matt,

Risposte:


46

Su Windows utilizzare lo strumento sysinternals sdelete per azzerare tutto lo spazio vuoto. Il comando desiderato sarebbe simile a questo sdelete -z c:.

Utilizzo: sdelete [-ppass] [-s] [-q] ...  
sdelete [-p passa] [-z | -c] [lettera di unità] ...  
-a Rimuovere l'attributo di sola lettura.  
-c Pulisci lo spazio libero.  
-p passaggi Specifica il numero di passaggi di sovrascrittura (il valore predefinito è 1).  
-q Non stampare errori (Silenzioso).  
-s o -r Recdirectory secondarie.  
-z Zero spazio libero (buono per l'ottimizzazione del disco virtuale).

Per Linux ti suggerisco di usare zerofree .


Sono venuto qui per compattare i miei dischi rigidi virtuali. Condivisione di alcuni collegamenti correlati da 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,

Mi chiedo se il riempimento zero avrebbe un impatto positivo su un'unità crittografata LUKS dm-crypt standard Linux . prima di sottoporre l'intero computer all'avvio da un clonezilla bootstick e dal backup fisico dell'intera unità. - La sezione azzerata all'interno della crittografia porterà alla sezione azzerata sul disco esterno? O scriverà comunque rumore (non allocato) per motivi di sicurezza? O dovrei azzerare l'unità crypt montata non montata (non guardando i contenuti crittografati)? (Ed è una buona idea, ovvero la tabella di allocazione è degna di fiducia nel contesto di un'unità crittografata?)
Frank Nocke,

Sarei scioccato se facesse qualcosa di diverso da crittografare i null e scrivere il "rumore" crittografato sul disco.
Dan Pritts, l'

15

Windows ha già uno strumento da riga di comando integrato che fa questo: CIPHER. Vedi la sua opzione / W.

Quindi il comando completo sarebbe: cipher / w: c: (sostituisce c: con la lettera di unità effettiva)

(scrive zero nello spazio inutilizzato, quindi 0xff, quindi devi guardarlo e fermarlo con ctrl-c quando inizia a scrivere 0xff - non l'ideale, ma è gratuito e già disponibile in Windows almeno da XP)


3
approccio interessante. Interrompere l'esecuzione appena prima che inizi a annullare tutti gli zeri. +1 per una soluzione creativa utilizzando strumenti che sono già lì!
PsychoData,

Mi chiedo se sia possibile rilevare quando ha finito di scrivere zeri e poi farlo interrompere ...
Frederick Nord

Se si utilizza il disco rigido SSD, verificare che TRIM sia abilitato. Quindi tutti i blocchi inutilizzati verranno rapidamente cancellati con il modello 0xFF dal firmware del disco rigido. Questo è molto utilizzabile su immagini di dischi virtuali create da server virtuali. Le immagini verranno riempite come vuoti e libereranno i blocchi del file system sull'hosting del file system.
Znik,

Funzionava molto bene e molto più velocemente di SDelete -z (che era bloccato al 100% senza fornire alcun altro feedback).
psychowood,

6

SDelete non azzera lo spazio per la compattazione di un disco virtuale. SDelete inizia con l'azzeramento dello spazio libero, ma poi lo riempie con 0xff e quindi byte casuali Vedi come preparare un file del disco rigido virtuale Virtual Server 2005 da inviare ai servizi di supporto tecnico Microsoft Per come impostare un disco rigido virtuale per la compattazione

Precompact.exe può essere difficile da trovare per qualche motivo. Ho trovato una copia scaricabile separata qui . Tuttavia, se si dispone di un PC virtuale Windows, è possibile ottenerlo anche da% programfiles (x86)% \ Windows Virtual PC \ Integration Components \ Precompact.iso


2
sdelete con l'opzione -c è un riempimento zero. Forse stai pensando all'utilità di crittografia integrata di Windows che non ha un'opzione zero-only?
Jeremy M,

"SDelete implementa il Dipartimento della Difesa che cancella e disinfetta lo standard DOD 5220.22-M" (dai documenti) che non specifica semplicemente un cluster. sdelete -c azzera lo spazio libero (dopo averlo riempito), tuttavia il metodo utilizzato da sdelete non è lo stesso di precompact e in molti casi si tradurrà in un'unità più grande di precompact, progettata per azzerare le unità virtuali
Jim B

Questo è interessante sapere di un altro strumento. Grazie
mit

2
SDelete può lasciare il disco con 0s, ma precompact funziona molto più velocemente ed è stato pensato per questo tipo di situazione.
Chris S,

2
@romkyns Non importa più poiché tutte le versioni moderne di Windows e Hyper-V supportano trim(a partire da Win7 e Hyper-V 2012), non è necessario azzerare prima della compattazione. L'utilità PreCompact ha azzerato solo parti del disco con file eliminati, la parte che non era mai stata utilizzata non è stata toccata. L'uso di qualcosa del genere sdeleteriempirebbe il disco dinamico di dimensioni statiche, che potrebbero quindi essere ridimensionate fino alle dimensioni effettivamente utilizzate.
Chris S,

6

fsutilnon è open source, ma viene fornito con Windows e quindi non costa nulla in più. L'ho usato per azzerare lo spazio libero su un'unità WD 250 GB 7200 RPM vuota ( F:). Ecco cosa ho eseguito dalla riga di comando:

fsutil volume diskfree f:

Che ha mostrato questo rapporto:

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

Ho usato Total # of avail free bytesi seguenti comandi:

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

Ci sono volute circa 4 ore per scrivere 250 GB di zeri.


3

Anch'io avevo cercato un modo per usare Cipher per scrivere solo 0x00 e poi uscire quando ho iniziato a scrivere 0xFF nello spazio libero. Ciò consentirà di comprimere lo spazio libero massimo. Ho elaborato il seguente lavoro di base su PowerShell

sostituire d: \ con l'unità richiesta

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

Saluti Simone


1

Se si utilizza VMware, un modo molto migliore consiste nell'utilizzare gli strumenti integrati in VMware per recuperare spazio non utilizzato sull'unità virtuale.

Ho usato questo per ridurre la dimensione del disco virtuale da 28 gigabyte a 13 gigabyte. Il tuo chilometraggio può variare.

Quando ho provato a utilizzare sdelete -z c:, in realtà ha aumentato la dimensione delle unità virtuali a 30 gigabyte, che era la sua dimensione massima.

Vedi il sito Web VMware e compatta un disco rigido virtuale , che si trova sotto Using VMware Workstation > Configuring and Managing Devices > Configuring and Maintaining Virtual Hard Disks.

Aggiornare

A volte, gli strumenti della GUI non sono così affidabili come quelli della riga di comando. Ho riscontrato problemi in cui gli strumenti della GUI non funzionano, ma gli strumenti della riga di comando funzionano bene. Ecco le opzioni per 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.

Ecco un esempio di riduzione di un disco. Questa riga di comando ha funzionato, nonostante lo stesso comando della GUI non riuscita:

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.

Il messaggio di errore che inizia con VizDiskLibè una novità di VMware Desktop 10 e può essere tranquillamente ignorato.


1
sdelete stesso non ha lo scopo di ridurre le dimensioni di vmdk. Viene utilizzato per trasformare tutto lo spazio libero disponibile in zero in preparazione per l'operazione di restringimento. In caso contrario, i file eliminati e altri dati orfani saranno comunque presenti sul disco. Gli strumenti VMWare non saranno sempre in grado di recuperare lo spazio su disco ancora occupato da quei file. La trasformazione di questi "file eliminati" in zero rende lo spazio su disco completamente recuperabile quando si esegue lo strumento di riduzione. Il motivo per cui hai visto un aumento delle dimensioni del file sul disco virtuale è perché sdelete riempie tutto lo spazio disponibile che ha a zero.
Leon Lucardie,

Grazie per aver chiarito questo. Pensa che gli strumenti potrebbero trarre vantaggio da una migliore denominazione e / o da una descrizione di una riga di ciò che fa lo strumento quando lo esegui.
Contango,


-1

mit,

Ho scoperto che lo script PowerShell di Simon ha fatto esattamente ciò di cui hai bisogno, senza i problemi di versione di sdelete. (cambia facendo cose diverse in versioni diverse)

Aveva un problema, quella cifra continuava a funzionare, ma l'ho risolto.

Ho ulteriormente modificato lo script per pulire la cartella temporanea:

Dovrai sostituire F: \ con la lettera di unità in entrambi i punti.

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

Perché strumenti di terze parti, quando Windows include già tutto ciò di cui hai bisogno, per "gratuito" e il più veloce possibile:

1) format X: /fs:XXXX /p:#, dove Xè la lettera; XXXXè il file system, Yeither ed #è il numero di passaggi;

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

A proposito, non hai bisogno di più di un singolo passaggio - un reclamo altrimenti è informazioni obsolete per strategie di scrittura / scrittura del disco obsolete, persone che spingono prodotti, guidano la paranoia o bs trasmesse come "consulenza di esperti".

Modifica: nvm, mancata la parte dello spazio libero ...


1
In molti casi sono disponibili strumenti di terze parti che svolgono lavori buoni o migliori, sono più facili da installare o più affidabili. Ma questo è totalmente OT, la domanda non riguardava chi la scrive. A parte questo Microsoft ha acquisito Sysinternals (che ha scritto SSDelete) perché erano anni luce migliori degli oggetti incorporati. Basta confrontare ProcessExplorer con il prodotto MS "TaskManager" -1 per l'avvio di una fiamma
Alojz Janez

Hai perso il requisito "open source" nella domanda, vero?
Alojz Janez,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.