web-dev-qa-db-fra.com

Comment remplir zéro un espace libre de disque virtuel sur Windows pour une meilleure compression?

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

Je voudrais un outil open source simple (ou au moins gratuit) pour cela. Il devrait probablement écrire un fichier aussi gros que possible plein de 0et l'effacez ensuite. Un seul passage (ce n'est pas pour des raisons de sécurité mais pour la compression, nous sauvegardons des machines virtuelles).

Doit s'exécuter depuis l'intérieur des fenêtres et non depuis un disque.

Sous Linux, je le fais comme ça (en tant qu'utilisateur):

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

Édition 1: J'ai décidé d'utiliser sdelete de la réponse acceptée. J'ai jeté un œil à 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

Ceci est une ancienne version. J'ai utilisé le commutateur -c à partir de la 2e invocation et c'était 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 facile à obtenir.

Edit 2: Comme scottbb l'a souligné dans sa réponse ci-dessous, il y a eu un changement de septembre 2011 à l'outil (version 1.6) Les options -c et -z ont changé de sens. L'utilisation correcte à partir de 1.6 est

c:\>sdelete -z c:

Edit 3: Il existe une version 2.0 de sdelete et sdelete64. Ils semblent être bogués lors de la remise à zéro. Il semblera être bloqué à 100% pendant des temps extrêmement longs. Certaines personnes ont signalé 10 à 40 fois plus longtemps. 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

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

46
mit

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

 Utilisation: sdelete [-p passes] [-s] [-q] ... 
 Sdelete [-p passes] [-z | -c] [lettre du lecteur] ... 
 - un attribut Supprimer en lecture seule. 
 - c Nettoyez l'espace libre. 
 - p passes Spécifie le nombre de passes de remplacement (la valeur par défaut est 1). 
 - q N'imprime pas les erreurs (silencieux). 
 - s ou -r Sous-répertoires Recurse. 
 - z Espace libre nul (bon pour l'optimisation de disque virtuel). 

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

47
Zoredache

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

Ainsi, la commande complète serait: cipher/w: c: (remplacez c: par la lettre de lecteur réelle)

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

19
David Balažic

fsutil n'est pas open source, mais est livré avec Windows et ne coûte donc rien de plus. Je l'ai utilisé pour mettre à zéro l'espace libre sur un disque WD 250 Go 7200 tr/min vide (F:). Voici ce que j'ai exécuté à partir de 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.

8
James L.

SDelete ne remettra pas à zéro l'espace pour le compactage d'un disque virtuel. SDelete commence par mettre à zéro l'espace libre, puis le remplit avec 0xff puis des octets aléatoires Voir Comment préparer un fichier de disque dur virtuel Virtual Server 2005 à envoyer aux services de support technique Microsoft Pour savoir comment configurer un disque dur virtuel pour le compactage

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

6
Jim B

Moi aussi, je cherchais un moyen d'utiliser Cipher pour écrire uniquement 0x00, puis quitter en commençant à écrire 0xFF dans l'espace libre. Cela permettra à l'espace libre maximal d'être compressé. J'ai trouvé le travail 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

Cordialement Simon

4
Simon Stevenson

Si vous utilisez VMware, une bien meilleure façon consiste à utiliser les outils intégrés à VMware pour récupérer tout espace inutilisé sur le lecteur virtuel.

J'ai utilisé cela pour réduire la taille du disque virtuel de 28 gigaoctets à 13 gigaoctets. Votre kilométrage peut varier.

Quand j'ai essayé d'utiliser sdelete -z c:, il a en fait augmenté la taille des disques virtuels à 30 gigaoctets, ce qui était sa taille maximale.

Consultez le site Web de VMware et Compact a Virtual Hard Disk , qui se trouve sous Using VMware Workstation > Configuring and Managing Devices > Configuring and Maintaining Virtual Hard Disks.

Mise à jour

Parfois, les outils de l'interface graphique ne sont pas aussi fiables que les outils de ligne de commande. J'ai rencontré des problèmes où les outils de l'interface graphique échouent, mais les outils de ligne de commande fonctionnent très bien. Voici les options pour 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.

Voici un exemple de réduction d'un disque. Cette ligne de commande a fonctionné, malgré l'échec de la même commande de l'interface graphique:

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.

Le message d'erreur commençant par VizDiskLib est nouveau pour VMware Desktop 10 et peut être ignoré en toute sécurité.

1
Contango

Google-up Eraser 5.8.8 32 bits Fonctionne bien même sur Windows = XP SP3 !