68 votes

Comment remplir à zéro l'espace libre d'un disque virtuel sous Windows pour une meilleure compression ?

Comment remplir à zéro l'espace libre d'un disque virtuel sous Windows pour une meilleure compression ?

J'aimerais disposer d'un outil open source simple (ou au moins gratuit) pour cela. Il devrait probablement écrire un fichier aussi gros que possible rempli de 0 et l'effacer ensuite. Une seule passe (ce n'est pas pour des raisons de sécurité mais pour la compression, nous sauvegardons des machines virtuelles).

Il doit être exécuté depuis l'intérieur de Windows et non depuis un disque.

Sous Linux, je procède comme suit (en tant qu'utilisateur) :

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

Edit 1 : J'ai décidé d'utiliser sdelete de la réponse acceptée. J'ai regardé l'aide de 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

Il s'agit d'une ancienne version. J'ai utilisé le commutateur -c dès la 2ème invocation et cela a été assez rapide (syntaxe uniquement valable pour les anciennes versions avant V1.6) :

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

J'ai l'impression que cela fait ce que je veux. L'outil sdelete est facile à utiliser et à obtenir.

Edit 2 : Comme scottbb l'a indiqué dans sa réponse ci-dessous, l'outil a été modifié en septembre 2011 (version 1.6). Les options -c et -z ont changé de signification. L'utilisation correcte à partir de la version 1.6 est

c:\>sdelete -z c:

Edit 3 : Il existe une version 2.0 de sdelete et sdelete64. Elles semblent présenter des bogues lors de la mise à zéro. Ils semblent rester bloqués à 100% pendant des périodes extrêmement longues. Certaines personnes ont rapporté des durées de 10 à 40 fois plus longues. L'ancienne version 1.61 n'a pas ce problème. Voir https://social.technet.microsoft.com/Forums/en-US/2ffb2539-34ba-4378-aa8a-941d243f117e/sdelete-hangs-at-100?forum=miscutils

Edit 4 : Maintenant, il y a la question de espace disque virtuel alloué dynamiquement . Si vous avez un disque de 100 Go qui n'est pas plein et qui n'utilise que 30 Go sur l'hôte, le remplissage est nul. ne doit pas augmenter considérablement la taille du disque, car cela contredit l'objectif de l'allocation dynamique. . Il y a une réponse pour Oracle VM VirtualBox https://superuser.com/q/907196/44402 - mais sur d'autres piles comme VMWare, Xen, XenServer, etc., il faut répondre à cette question séparément.

61voto

jammus Points 1796

Sous Windows, utilisez l'outil sysinternals sdelete pour remettre à zéro tout l'espace vide. La commande que vous voulez ressemblerait à ceci sdelete -z c: .

Usage: sdelete \[-p passes\] \[-s\] \[-q\]  ...  
sdelete \[-p passes\] \[-z|-c\] \[drive letter\] ...  
-a         Remove Read-Only attribute.  
-c         Clean free space.  
-p passes  Specifies number of overwrite passes (default is 1).  
-q         Don't print errors (Quiet).  
-s or -r   Recurse subdirectories.  
-z         Zero free space (good for virtual disk optimization).

Pour Linux, je vous suggère d'utiliser zerofree .

26voto

David Balažic Points 378

Windows dispose déjà d'un outil de ligne de commande intégré qui fait cela : CIPHER. Voir son option /W.

Donc la commande complète serait : chiffrer /w:c : (remplacer c : avec la lettre réelle du lecteur)

(il écrit des zéros dans l'espace inutilisé, puis 0xff, donc vous devez le surveiller et l'arrêter avec ctrl-c quand il commence à écrire 0xff - ce n'est pas idéal, mais c'est gratuit et déjà disponible dans Windows depuis XP au moins)

10voto

James L. Points 231

fsutil n'est pas open source, mais il est livré avec Windows et ne coûte donc rien de plus. Je l'ai utilisé pour remettre à zéro l'espace libre sur un disque vide WD 250 GB 7200 RPM ( F: ). Voici ce que j'ai exécuté depuis la ligne de commande :

fsutil volume diskfree f:

Qui a montré ce rapport :

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

J'ai utilisé Total # of avail free bytes dans les commandes suivantes :

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

Il a fallu environ 4 heures pour écrire 250 Go de zéros.

6voto

Rob Howard Points 636

SDelete ne met pas à zéro l'espace pour le compactage d'un disque virtuel. SDelete commence par remettre à zéro l'espace libre, mais le remplit ensuite de 0xff puis d'octets aléatoires Voir Comment préparer un fichier de disque dur virtuel de Virtual Server 2005 pour l'envoyer aux services d'assistance produits de Microsoft ? Pour savoir comment configurer un VHD pour le compactage.

Precompact.exe peut être difficile à trouver pour certaines raisons. J'ai trouvé une copie séparée téléchargeable aquí . Cependant, si vous avez un PC virtuel Windows, vous pouvez également l'obtenir à partir de %programfiles(x86)%. \Windows PC virtuel \Integration Composants \Precompact.iso

6voto

Michael Bazos Points 159

Moi aussi, je cherchais un moyen d'utiliser le Cipher pour n'écrire que 0x00, puis de quitter lorsque l'on commence à écrire 0xFF dans l'espace libre. Cela permettra de compresser le maximum d'espace libre. J'ai trouvé le job PowerShell de base suivant

remplacez d:\ par le lecteur requis

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

Salutations Simon

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X