Eu tenho um disco, digamos / dev / sda.
Aqui está o fdisk -l:
Disk /dev/sda: 64.0 GB, 64023257088 bytes
255 heads, 63 sectors/track, 7783 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x0000e4b5
Device Boot Start End Blocks Id System
/dev/sda1 * 1 27 209920 83 Linux
Partition 1 does not end on cylinder boundary.
/dev/sda2 27 525 4000768 5 Extended
Partition 2 does not end on cylinder boundary.
/dev/sda5 27 353 2621440 83 Linux
/dev/sda6 353 405 416768 83 Linux
/dev/sda7 405 490 675840 83 Linux
/dev/sda8 490 525 282624 83 Linux
Preciso fazer uma imagem para armazenar em nosso servidor de arquivos para usar outros dispositivos que estamos fabricando, então quero apenas o espaço usado (apenas cerca de 4 GB). Quero manter o mbr etc ..., pois este dispositivo deve estar pronto para inicialização assim que a cópia terminar.
Alguma ideia? Eu estava usando anteriormente dd if=/dev/sda of=[//fileserver/file]
, mas naquela época, minha cópia principal estava em um flash ide de 4GB.
linux
hard-drive
dd
Jonathan Henson
fonte
fonte
dd conv=sparse
.Respostas:
Naquele dia, tive um problema semelhante com as distribuições Linux embutidas - livre-se de todo o lixo antes de comprimir a imagem.
dd if=/dev/zero of=asdf.txt
. Espere até que morra. Exclua asdf.txt.Você acabou de escrever zeros em todo o espaço livre no dispositivo.
Agora pegue uma imagem de disco e execute-a no gzip. Voila, imagem esparsa.
Provavelmente não dimensiona muito bem e pode causar problemas se você realmente precisar gravar no disco, mas ei.
Você pode levar um instantâneo rsync do disco para outro volume, zerar e, em seguida, levar a imagem do disco.
Nota: Pode ser perigoso para SSD, o usuário deve considerar esta operação antes de confirmar.
fonte
dd if=sda2.gz | gunzip > /dev/sda2
edd if=/dev/sda2 | gzip > sda2.gz
of
caminho para cada partição.Supondo que você deseja salvar
/dev/sdXN
para/tgtfs/image.raw
e você é root:mkdir /srcfs && mount /dev/sdXN /srcfs
Use zerofill ou apenas:
dd if=/dev/zero of=/srcfs/tmpzero.txt
para preencher blocos não utilizados com zero (aguarde o preenchimento completo do sistema de arquivosrm /srcfs/tmpzero.txt
)Pegue a imagem com dd e use conv = sparse para digitar zeros rapidamente:
dd conv=sparse if=/dev/sdxn of=/tgtfs/image.raw
Se você deseja usar a compactação, não precisa perfurar os zeros com dd, pois os blocos zero são altamente compressíveis:
PS: Observe que essa não é uma boa ideia em uma mídia de armazenamento baseada em memória flash (ou seja, seu sistema de arquivos de origem é SSD)
fonte
dd conv=sparse
.btrfs snapshot
ebtrfs send
ferramentas) é uma solução melhor IMHO.gz
no seuPATH
(como eu não fiz, em GParted Live), você pode usargzip -c
em seu lugar.Use dd, com a opção de contagem.
No seu caso, você estava usando o fdisk, então eu adotarei essa abordagem. Seu "sudo fdisk -l" produziu:
As duas coisas que você deve observar são: 1) o tamanho da unidade e 2) a coluna "Fim". No seu caso, você tem cilindros iguais a 8225280 bytes. Na coluna "Fim", sda8 termina em 525 (que é 525 [unidades] * 16065 * 512 = ~ 4,3 GB)
O dd pode fazer muitas coisas, como iniciar após um deslocamento ou parar após um número específico de blocos. Faremos o último usando a opção de contagem em dd. O comando apareceria da seguinte maneira:
Onde -bs é o tamanho do bloco (é mais fácil usar a unidade que o fdisk usa, mas qualquer unidade o fará contanto que a opção de contagem seja declarada nessas unidades) e count seja o número de unidades que queremos copiar (observe incrementamos a contagem em 1 para capturar o último bloco).
fonte
fdisk -l -u=cylinders /dev/sda
Embora
/dev/zero
o espaço livre em disco e o usodd conv=sparse
/gz -c
sejam possíveis, em discos enormes com espaço vazio rodando em 100s de GBs, o processo/dev/zero
é dolorosamente lento - sem mencionar que, como outras respostas observadas,/dev/zero
um SDD até o EOF.Aqui está o que eu fiz quando me deparei com esta situação:
Em um CD live do lubuntu, usado
gparted
para "reduzir" o disco para o tamanho mínimo possível, deixando o restante do espaço não alocadoUsado
dd bs=1M count=<size_in_MBs> if=/dev/sdX | gzip -c --fast| dd of=/path/to/image.gz
para criar a imagem compactada rapidamente (escusado será dizer que você pode pular a compactação se tiver espaço suficiente para armazenar dados brutos (ou estiver inclinado a reduzir a carga da CPU)dd if=/path/to/image.gz | gunzip -c | dd bs=1M of=/dev/sdY
para copiar os dados de volta para um disco diferentegparted
novamente para 'expandir' a partiçãoEu não tentei isso para várias partições, mas acredito que o processo acima pode ser adaptado para copiar 'partições' se a tabela de partições no disco de destino for criada primeiro e apenas os dados contidos na partição forem copiados via
dd
- offsets de leitura / gravação (skip
/seek
opção dedd
, respectivamente) seria necessária conforme apropriado.fonte
count
parâmetroVocê não pode.
dd
é uma ferramenta de nível muito baixo e não tem como distinguir entre arquivos e espaço vazio.Por outro lado, o espaço vazio comprimirá muito, muito bem; se você estiver preocupado apenas com o espaço de armazenamento, não por exemplo, o tempo de gravação, basta direcioná-lo através do gzip.
fonte
Supondo que o restante da unidade esteja vazio (todos os zeros), você pode canalizar seu DD através do gzip, o que deve compactar bastante o espaço vazio. Você pode usar uma ferramenta como o zerofree para garantir que o seu espaço vazio esteja realmente em branco, para que ele seja compactado corretamente.
Se você usar uma ferramenta como partimage , clonezilla ou algumas das outras ferramentas de clonagem do linux, elas cuidariam da maior parte disso automaticamente.
fonte
A resposta aceita não está certa. Eu concordo com o comentário acima. Eu uso o dd com o parâmetro count para fazer backup do meu disco regularmente. Basta substituir o BACKUP_FOLDER e a letra do seu dispositivo por "X":
Defina o último bloco usado do disco:
Em seguida, clonar o disco (excluindo o espaço vazio):
fonte