Como zerar o espaço livre de um disco virtual no Windows para melhorar a compactação?

46

Como zerar o espaço livre de um disco virtual no Windows para melhorar a compactação?

Eu gostaria de uma ferramenta simples de código aberto (ou pelo menos gratuita) para isso. Provavelmente, ele deve gravar um arquivo o maior possível 0e apagá-lo posteriormente. Apenas uma passagem (não por motivos de segurança, mas por compactação, estamos fazendo backup de máquinas virtuais).

Deve ser executado de dentro das janelas e não de um disco.

No Linux, faço assim (como usuário):

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

Edit 1: Decidi usar sdelete a partir da resposta aceita. Dei uma olhada na ajuda do 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

Esta é uma versão antiga. Eu usei a opção -c da 2ª invocação e isso foi bastante rápido (sintaxe válida apenas para versões anteriores à V1.6):

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

Tenho a impressão de que isso faz o que eu quero. A ferramenta sdelete é fácil de usar e fácil de obter.

Edit 2: Como scottbb apontou em sua resposta abaixo, houve uma alteração de setembro de 2011 na ferramenta (versão 1.6) As opções -c e -z mudaram de significado. O uso correto a partir de 1.6 é

c:\>sdelete -z c:

Edit 3: Existe uma versão 2.0 do sdelete e sdelete64. Eles parecem estar com erros ao zerar. Parece estar preso a 100% por períodos extremamente longos. Algumas pessoas relataram 10 a 40 vezes mais. A versão anterior 1.61 não possui esse problema. Consulte https://social.technet.microsoft.com/Forums/en-US/2ffb2539-34ba-4378-aa8a-941d243f117e/sdelete-hangs-at-100?forum=miscutils

Edição 4: Agora há a questão do espaço em disco virtual alocado dinamicamente . Se você possui um disco de 100 GB que não está cheio e usa apenas 30 GB no host, o preenchimento zero não deve aumentar drasticamente o tamanho do disco, pois isso contradiz o objetivo da alocação dinâmica . Existe uma resposta para Oracle VM VirtualBox https://superuser.com/q/907196/44402 - mas em outras pilhas como VMWare, Xen, XenServer, etc., isso precisa ser respondido separadamente.

mit
fonte
2
sdeleteé a ferramenta certa para o trabalho, mas uma alteração de setembro de 2011 na ferramenta (versão 1.6) torna as respostas acima incorretas. As opções -ce -zmudaram de significado. O uso correto agora ésdelete -z c:\
scottbb
Além disso, certifique-se de usar imagens no estilo COW (Copiar na gravação) se você tiver muitas máquinas baseadas na mesma instalação básica.
Matt

Respostas:

46

Nas janelas, use a ferramenta sysinternals sdelete para zerar todo o espaço vazio. O comando que você deseja ficaria assim sdelete -z c:.

Uso: sdelete [-p passa] [-s] [-q] ...  
sdelete [-p passa] [-z | -c] [letra da unidade] ...  
-a Remover atributo Somente leitura.  
-c Limpe o espaço livre.  
-p passes Especifica o número de passes de substituição (o padrão é 1).  
-q Não imprime erros (silencioso).  
-s ou -r Recursa subdiretórios.  
-z Espaço livre zero (bom para otimização do disco virtual).

Para Linux, sugiro que você use o zerofree .

Zoredache
fonte
Vim aqui para compactar meus VHDs. Compartilhando alguns links relacionados do 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
Gostaria de saber se o preenchimento zero teria algum impacto positivo em uma unidade criptografada padrão do Linux LUKS dm-crypt . antes de submeter a máquina inteira a inicializar a partir de um clonezilla bootstick e backup físico de toda a unidade. - A seção zerada na criptografia levará à seção zerada no disco externo? Ou ainda gravará ruído (não alocado) por motivos de segurança? Ou devo zerar a unidade de criptografia montada em bruto (sem olhar para o conteúdo criptografado)? (E isso é uma boa idéia ou seja, é a confiança tabela de alocação no contexto de uma unidade crypted?)
Frank Nocke
Eu ficaria chocado se fizesse algo diferente de criptografar os valores nulos e gravar o "ruído" criptografado no disco.
Dan Pritts
15

O Windows já possui uma ferramenta de linha de comando interna que faz isso: CIPHER. Veja sua opção / W.

Portanto, o comando completo seria: cipher / w: c: (substitua c: pela letra da unidade real)

(ele grava zeros no espaço não utilizado e, em seguida, 0xff, então você deve assisti-lo e pará-lo com ctrl-c quando começar a escrever 0xff - não é o ideal, mas é gratuito e já está disponível no Windows desde o XP, pelo menos)

David Balažic
fonte
3
abordagem interessante. Interrompa a execução imediatamente antes de começar a desfazer todos os zeros. +1 para uma solução criativa usando ferramentas que já estão lá!
precisa
Eu me pergunto se é possível detectar quando terminar zeros escrita e, em seguida, torná-la abortar ...
Frederick Nord
Se você usar o disco rígido SSD, verifique se o TRIM está ativado. Todos os blocos não utilizados serão rapidamente eliminados com o padrão 0xFF pelo firmware do disco rígido. Isso é muito útil em imagens de disco virtual criadas por servidores virtuais. Essas imagens serão preenchidas como lacunas e liberarão blocos do sistema de arquivos no sistema de hospedagem.
Znik 24/05
Isso funcionou muito bem e muito mais rápido que o SDelete -z (que ficou parado em 100% sem dar nenhum outro feedback).
22417
6

O SDelete não zerará o espaço para compactação de um disco virtual. O SDelete inicia zerando o espaço livre, mas o preenche com 0xff e bytes aleatórios. Consulte Como preparar um arquivo de disco rígido virtual do Virtual Server 2005 para enviar ao Microsoft Product Support Services Para saber como configurar um VHD para compactação

O Precompact.exe pode ser difícil de encontrar por algum motivo. Encontrei uma cópia separada para download aqui . No entanto, se você possui o Windows Virtual PC, também pode obtê-lo em% programfiles (x86)% \ Windows Virtual PC \ Componentes de integração \ Precompact.iso

Jim B
fonte
2
sdelete com a opção -c é um preenchimento zero. Talvez você esteja pensando no utilitário de cifra interno do Windows, que não possui uma opção de somente zero?
29510 Jeremy M
"O SDelete implementa o padrão de limpeza e higienização do Departamento de Defesa DOD 5220.22-M" (dos documentos) que, especificamente, não simplesmente zera um cluster. sdelete -c zera o espaço livre (após preenchê-lo), no entanto, o método usado pelo sdelete não é o mesmo que pré-compacto e, em muitos casos, resultará em uma unidade maior que o pré-compacto, que foi projetado para zerar unidades virtuais
Jim B
É interessante saber de outra ferramenta. Obrigado
mit
2
O SDelete pode deixar o disco com 0s, mas o pré-compacto funciona muito mais rápido e foi criado para esse tipo de situação.
Chris S
2
@romkyns Não importa mais, já que todas as versões modernas do Windows e Hyper-V suportam trim(a partir do Win7 e Hyper-V 2012), não há necessidade de zerar antes da compactação. O utilitário PreCompact zera apenas partes do disco com arquivos excluídos; a parte que nunca havia sido usada foi deixada intocada. Usar algo como sdeleteencheria o disco dinâmico para um tamanho estático, que poderia ser compactado novamente para apenas o tamanho realmente usado.
Chris S
6

fsutilnão é de código aberto, mas é fornecido com o Windows e, portanto, não custa nada extra. Usei para zerar o espaço livre em uma unidade WD 250 GB 7200 RPM vazia ( F:). Aqui está o que eu executei na linha de comando:

fsutil volume diskfree f:

O que mostrou este relatório:

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

Eu usei Total # of avail free bytesnos seguintes comandos:

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

Demorou cerca de 4 horas para escrever 250 GB de zeros.

James L.
fonte
3

Eu também estava procurando uma maneira de usar o Cipher para escrever apenas 0x00 e sair ao começar a escrever 0xFF no espaço livre. Isso permitirá que o espaço livre máximo seja compactado. Eu criei o seguinte trabalho básico do PowerShell

substitua d: \ pela unidade necessária

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

Atenciosamente Simon

Simon Stevenson
fonte
1

Se você estiver usando o VMware, uma maneira muito melhor é usar as ferramentas incorporadas ao VMware para recuperar qualquer espaço não utilizado na unidade virtual.

Eu usei isso para reduzir o tamanho do disco virtual de 28 gigabytes para 13 gigabytes. Sua milhagem pode variar.

Quando tentei usar sdelete -z c:, ele na verdade aumentou o tamanho das unidades virtuais para 30 gigabytes, que era o tamanho máximo.

Consulte o site da VMware e Compactar um disco rígido virtual , que está abaixo Using VMware Workstation > Configuring and Managing Devices > Configuring and Maintaining Virtual Hard Disks.

Atualizar

Às vezes, as ferramentas da GUI não são tão confiáveis ​​quanto as ferramentas da linha de comando. Eu encontrei problemas em que as ferramentas da GUI falham, mas as ferramentas da linha de comando funcionam muito bem. Aqui estão as opções para 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.

Aqui está um exemplo de redução de um disco. Esta linha de comando funcionou, apesar do mesmo comando da GUI falhar:

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.

A mensagem de erro iniciada com VizDiskLibé nova no VMware Desktop 10 e pode ser ignorada com segurança.

Contango
fonte
1
O próprio sdelete não se destina a reduzir o tamanho do vmdk. É usado para transformar todo o espaço livre disponível em zeros na preparação para a operação de redução. Se você não fizer isso, os arquivos excluídos e outros dados órfãos ainda estarão presentes no disco. As ferramentas VMWare nem sempre poderão recuperar o espaço em disco ainda ocupado por esses arquivos. Transformar esses "arquivos excluídos" em zeros torna o espaço em disco totalmente recuperável quando você executa a ferramenta de redução. O motivo pelo qual você viu um aumento no tamanho do arquivo no disco virtual é porque o sdelete preenche todo o espaço disponível que possui com zeros.
Leon Lucardie
Obrigado por esclarecer isso. Parece que as ferramentas podem se beneficiar de uma melhor nomeação e / ou uma descrição de uma linha do que a ferramenta faz quando você a executa.
Contango 9/17
-1

Mit,

Descobri que o script PowerShell de Simon fazia exatamente o que você precisava, sem os problemas de versão do sdelete. (muda fazendo coisas diferentes em versões diferentes)

Ele tinha um problema: a cifra continuava funcionando, mas eu consertei isso.

Modifiquei ainda mais o script para limpar a pasta temp:

Você precisará substituir F: \ pela letra da unidade nos dois lugares.

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
fonte
-4

Por que ferramentas de terceiros, quando o Windows já inclui tudo o que você precisa, gratuitamente e o mais rápido possível:

1) format X: /fs:XXXX /p:#, onde Xestá a letra da unidade; XXXXé o sistema de arquivos Yeither e #é o número de passes;

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

Aliás, você também não precisa de mais do que uma única passagem - uma reivindicação, caso contrário, é uma informação desatualizada de estratégias obsoletas de red / write de disco, pessoas empurrando produtos, paranóia ou bs transmitidas como "consultoria especializada".

Edit: nvm, perdeu a parte do espaço livre ...

user180961
fonte
1
Em muitos casos, existem ferramentas de terceiros disponíveis que realizam trabalhos bons ou melhores, são mais fáceis de instalar ou mais confiáveis. Mas isso é totalmente OT, a questão não era sobre quem o escreve. Além disso, a Microsoft adquiriu a Sysinternals (que escreveu o SSDelete) porque eles eram anos melhores do que o material embutido. Basta comparar o ProcessExplorer ao produto MS "TaskManager" -1 para iniciar uma guerra de fogo
Alojz Janez
Você perdeu o requisito "código aberto" da pergunta, não é?
Alojz Janez