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

46

Comment remplir à zéro l'espace libre d'un disque virtuel sous 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 0et l'effacer par la suite. Un seul passage (ce n'est pas pour des raisons de sécurité mais pour la compression, nous sauvegardons des machines virtuelles).

Devrait fonctionner à l'intérieur de Windows et non à partir d'un disque.

Sur Linux, je le fais comme ceci (en tant qu'utilisateur):

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

Edit 1: J'ai décidé d'utiliser sdelete à partir 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 2ème invocation, ce qui était assez rapide (syntaxe valide uniquement pour les versions antérieures à la 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 l'a souligné scottbb dans sa réponse ci-dessous, l'outil (version 1.6) a été modifié en septembre 2011. Les options -c et -z ont changé de signification. 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 rapporté 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

Edit 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 utilise seulement 30 Go sur l'hôte, le remplissage par zéro ne devrait pas augmenter considérablement la taille du disque, car cela contredit l'objectif de l'allocation dynamique . Il existe une réponse pour Oracle VM VirtualBox https://superuser.com/q/907196/44402 - mais sur d'autres piles telles que VMWare, Xen, XenServer, etc., il faut y répondre séparément.

mit
la source
2
sdeleteest le bon outil pour le travail, mais une modification apportée à l'outil en septembre 2011 (version 1.6) rend les réponses ci-dessus incorrectes. Les options -cet -zont changé de signification. L'utilisation correcte est maintenantsdelete -z c:\
scottbb
Assurez-vous également que vous utilisez des images de style COW (Copy on Write) si vous avez beaucoup de machines basées sur la même installation de base.
Matt

Réponses:

46

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

Utilisation: sdelete [-p passe] [-s] [-q] ...  
sdelete [-p passe] [-z | -c] [lettre de lecteur] ...  
-a Supprimer l'attribut Lecture seule.  
-c Nettoyer l'espace libre.  
-p passes Spécifie le nombre de passes de remplacement (la valeur par défaut est 1).  
-q Ne pas imprimer les erreurs (silencieux).  
-s ou -r sous-répertoires Recurse.  
-z Zéro espace libre (bon pour l'optimisation de disque virtuel).

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

Zoredache
la source
Je suis venu ici pour compacter mes disques durs virtuels. Partage de liens connexes depuis 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
Je me demande si le zéro-remplissage aurait un impact positif sur un lecteur chiffré au standard Linux LUKS dm-crypt . avant de soumettre toute la machine à l’amorçage à partir d’une clé de démarrage clonezilla et à la sauvegarde physique de l’ensemble du lecteur. - La section mise à zéro dans le chiffrement conduira-t-elle à la section mise à zéro sur le disque externe? Ou va-t-il toujours écrire du bruit (non alloué) pour des raisons de sécurité? Ou devrais-je mettre à zéro le lecteur crypté monté à l'état brut (sans regarder le contenu crypté)? (Et est - ce une bonne idée est -à- dire la confiance de table d'allocation dans le cadre d'un processus crypted?)
Frank Nocke
Je serais choqué s'il faisait autre chose que de chiffrer les valeurs NULL et d'écrire le "bruit" chiffré sur le disque.
Dan Pritts
15

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, il faut donc le regarder 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 sous Windows depuis au moins XP)

David Balažic
la source
3
approche intéressante. Interrompre l'exécution juste avant qu'elle ne commence à annuler tous les zéros. +1 pour une solution créative utilisant des outils déjà présents!
PsychoData
Je me demande s'il est possible de détecter quand il a fini d'écrire des zéros et de le faire avorter ...
Frederick Nord
Si vous utilisez un disque dur SSD, vérifiez que TRIM est activé. Ensuite, tous les blocs inutilisés seront rapidement effacés avec le motif 0xFF par le micrologiciel du disque dur. Ceci est très utilisable sur les images de disque virtuel créées par des serveurs virtuels. Ces images seront remplies comme des lacunes et libéreront des blocs de système de fichiers sur le système de fichiers d'hébergement.
Znik
Cela fonctionnait très bien et beaucoup plus rapidement que SDelete -z (bloqué à 100% sans donner d’autre feedback).
psychowood
6

SDelete ne mettra pas à zéro l'espace disponible pour le compactage d'un disque virtuel. SDelete commence par réduire à 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 de 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)% \ PC virtuel Windows \ Integration Components \ Precompact.iso

Jim B
la source
2
sdelete avec l'option -c est un remplissage zéro. Vous songez peut-être à l'utilitaire de chiffrement intégré à Windows, qui ne propose pas l'option zéro seul?
Jeremy M
"SDelete implémente la norme DOD 5220.22-M DOD 5220.22-M du Département de la Défense" (d'après la documentation), qui ne spécifie pas simplement la suppression d'un cluster. sdelete -c supprime l'espace libre (après l'avoir rempli), mais la méthode utilisée par sdelete n'est pas identique à Precompact et aboutit dans de nombreux cas à un lecteur plus grand que Precompact, conçu pour mettre à zéro les lecteurs virtuels.
Jim B
C'est intéressant de connaître un autre outil. Merci
mit
2
SDelete peut quitter le disque avec des 0, mais le précompact fonctionne beaucoup plus rapidement et était destiné à ce genre de situation.
Chris S
2
@romkyns Cela n'a plus d'importance puisque toutes les versions modernes de Windows et de support Hyper-V trim(à partir de Win7 et Hyper-V 2012), il n'est pas nécessaire de zéro avant le compactage. L'utilitaire PreCompact n'a effacé que les parties du disque contenant des fichiers supprimés, la partie qui n'a jamais été utilisée n'a pas été modifiée. Utiliser quelque chose comme sdeleteremplirait le disque dynamique à une taille statique, qui pourrait ensuite être compactée à la taille réellement utilisée.
Chris S
6

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

James L.
la source
3

Moi aussi, je cherchais un moyen d’utiliser Cipher pour n’écrire que 0x00, puis quitter lorsque je commence à écrire 0xFF sur l’espace libre. Cela permettra à l'espace libre maximal d'être compressé. Je viens avec le travail de base PowerShell 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

Simon Stevenson
la source
1

Si vous utilisez VMware, un meilleur moyen 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.

Lorsque j'ai essayé de l'utiliser sdelete -z c:, la taille des lecteurs virtuels a été portée à 30 gigaoctets, soit la taille maximale.

Consultez le site Web de VMware et compressez un disque dur virtuel , 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 parfaitement. 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é la même commande de l’interface graphique en échec:

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 VizDiskLibest nouveau pour VMware Desktop 10 et peut être ignoré en toute sécurité.

Contango
la source
1
sdelete n’est pas censé réduire la taille de vmdk. Il est utilisé pour transformer tout l'espace libre disponible en zéros lors de la préparation pour l'opération de réduction. Si vous ne le faites pas, les fichiers supprimés et d’autres données orphelines seront toujours présents sur le disque. Les outils VMWare ne pourront pas toujours récupérer l'espace disque toujours occupé par ces fichiers. La conversion de ces "fichiers supprimés" en zéros rend l'espace disque pleinement récupérable lorsque vous exécutez l'outil de réduction. La raison pour laquelle vous avez constaté une augmentation de la taille du fichier sur le disque virtuel est due au fait que sdelete remplit tout l'espace disponible dont il dispose avec des zéros.
Leon Lucardie
Merci d'avoir clarifié cela. Je pense que les outils pourraient bénéficier d’une meilleure dénomination et / ou d’une description en une ligne de ce que fait l’outil lorsqu’il est exécuté.
Contango
-1

Mit,

J'ai trouvé que le script powershell de Simon répondait exactement à vos besoins, sans les problèmes de version de sdelete. (commutateurs faisant différentes choses dans différentes versions)

Il y avait un problème, ce chiffre continuait à fonctionner, mais j'ai résolu ce problème.

J'ai ensuite modifié le script pour nettoyer le dossier temporaire:

Vous devrez remplacer F: \ par votre lettre de lecteur aux deux endroits.

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
Preston Shirmeyer
la source
-4

Pourquoi des outils tiers, alors que Windows inclut déjà tout ce dont vous avez besoin, pour "gratuit" et aussi vite que possible:

1) format X: /fs:XXXX /p:#, où Xest la lettre de lecteur; XXXXest le système de fichiers, oui et #le nombre de passes;

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

En fait, vous n'avez pas besoin de plus d'une passe, non plus - une réclamation est une information obsolète pour les stratégies de disque rouge / écriture obsolètes, les personnes qui poussent des produits, qui sont motivés par la paranoïa ou les bs qui sont transmis comme des "conseils d'experts".

Edit: nvm, manque la partie espace libre ...

utilisateur180961
la source
1
Dans de nombreux cas, des outils tiers disponibles permettent d'effectuer de bons ou de meilleurs travaux, sont plus faciles à installer ou plus fiables. Mais c’est tout à fait OT, la question n’est pas de savoir qui l’écrit. En dehors de cela, Microsoft a acquis Sysinternals (qui a écrit SSDelete) parce qu’ils étaient plus légers que les logiciels intégrés. Il suffit de comparer ProcessExplorer au produit MS "TaskManager" -1 pour démarrer une guerre des flammes
Alojz Janez
Vous avez manqué l'exigence "open source" dans la question, n'est-ce pas?
Alojz Janez