Clona apenas o espaço em uso no disco rígido

5

Posso usar dd, rsync, clonezilla ou qualquer ferramenta para clonar apenas o espaço em uso no meu disco rígido no Linux? Eu preciso fazer um backup de um HD de 1 TB (com apenas 2 GB de espaço em uso) em um HD de 500 GB.

    
por kroka 05.07.2016 / 19:02

3 respostas

12

Você pode, mas deve preparar seu disco primeiro. O truque é usar arquivos ou compactações esparsas. Esse método é demorado, gera alta E / S. No seu caso (2GB em uso em 1 TB HDD) uma cópia de arquivo (como sugerido no comentário da serragem) provavelmente será uma solução muito melhor. Se - por outro lado - você teve, por exemplo 850 GB em uso de 1 TB, muitos arquivos pequenos nele, você queria fazer backup de MBR, tabela de partição, metadados, tudo isso de uma só vez - então meu método seria uma maneira razoável de salvar pelo menos 150 GB no arquivo de imagem (que ainda não cabia em HDD de 500 GB, a menos que os dados sejam bem compactados).

Estou escrevendo isso para usuários com maior uso de disco. Observe também que a unidade de origem deve estar íntegra e permitir a substituição do espaço vazio. Eu estou dando a solução principalmente para backup, não recuperação nem forense. O tempo e o custo de E / S serão pagos não apenas durante a criação da imagem, mas também quando (se) a imagem for gravada no disco. Pense duas vezes se o método for adequado para você.

Digamos que você precise clonar /dev/sdb e várias partições: /dev/sdb1 , /dev/sdb2

Preparação

Para tirar vantagem de arquivos esparsos ou compactação, você deve sobrescrever o espaço vazio com zeros:

## Most commands need sudo.
mount -o rw /dev/sdb1 /mnt
dd if=/dev/zero of=/mnt/zero_file bs=32M
## Long wait here. Expect "no space left on device".
sync
rm /mnt/zero_file
umount /dev/sdb1
## Repeat this with /dev/sdb2, /dev/sdb3 etc.

No caso de partição do Windows, pode haver algum problema devido à hibernação do Windows. Leia este .

Se houver grandes lacunas no layout da partição, você também deve preenchê-las com zeros. As partições de swap (se houver) precisam de tratamento especial para tornar a imagem resultante o menor possível. Os arquivos do Windows como hiberfil.sys , pagefile.sys e swapfile.sys podem ser removidos antes de zero_file creation. Não vou abordar esses casos em detalhes aqui.

Método de arquivo esparso

Este método pode ser usado se o sistema de arquivos de destino (onde o arquivo de imagem será salvo) suportar arquivos esparsos. Para gerar um arquivo de imagem esparsa, invoque:

## dd probably needs sudo here.
dd if=/dev/sdb of=/foo/bar/my_image.dd bs=512 conv=sparse

(EDIT: originalmente havia bs=32M mas não é a boa escolha com conv=sparse . Compare esta questão .)

Para escrever a imagem de volta:

## dd probably needs sudo here.
dd if=/foo/bar/my_image.dd of=/dev/sdb bs=32M

Vantagens:

  • A imagem pode ser montada ( mount -o offset=… ou use kpartx ) para acessar os arquivos.

Desvantagens:

  • O sistema de arquivos de destino deve suportar arquivos esparsos.
  • Lembre-se de mantê-lo esparso ao copiar ( cp --sparse=always ).

Método de arquivo compactado

Para gerar a imagem:

## dd probably needs sudo here.
dd if=/dev/sdb bs=32M | gzip -c > /foo/bar/my_image.dd.gz

Para escrever a imagem de volta:

## dd probably needs sudo here.
gzip -cd < /foo/bar/my_image.dd.gz | dd of=/dev/sdb bs=32M

Esses comandos podem ser criados sem dd , com gzip apenas. Eu usei dd para garantir 32 buffer MiB.

Vantagens:

  • O arquivo resultante é não esparso, não precisa de tratamento especial.
  • O tamanho da imagem será reduzido ainda mais se os arquivos do disco de origem estiverem sujeitos à compactação.

Desvantagens:

  • É difícil acessar os arquivos dentro da imagem compactada sem descompactação completa (alguns FUSE podem ser úteis, embora eu não tenha certeza, nunca tentei; considere um abordagem do squashfs ).

Dicas

Para monitorar o progresso, invoque dd com status=progress operando. Se dd já estiver sendo executado sem ele (por exemplo, seu dd não suporta status=progress ou você esqueceu de usá-lo), envie o sinal USR1 para a ferramenta:

kill -s USR1 $(pidof dd)

e repita conforme necessário.

Como alternativa, você pode usar pv para ler. Exemplos:

pv -B 32m /dev/sdb | dd of=/foo/bar/my_image.dd bs=512 conv=sparse
pv -B 32m /dev/sdb | gzip -c > /foo/bar/my_image.dd.gz

Para compactar o uso rápido gzip --fast , para compactar o melhor uso gzip --best . Consulte man gzip para mais opções.

Use pigz em vez de gzip , se puder. Isso deve acelerar as coisas, porque pigz pode utilizar mais de um núcleo de processador. Você pode usar outro compressor se quiser.

    
por 06.07.2016 / 04:16
0

Se o disco de destino já estiver formatado, o segundo disco será conectado à mesma máquina que o primeiro, será montado e, se você estiver executando o Linux ou o Mac:

rsync -avP --ignore=/media/disk2 / /media/disk2

Se o disco de destino já estiver formatado, o segundo disco será formatado e montado em outro PC e, se você estiver executando o Linux ou o Mac:

rsync -avP / user@ip_of_disk2_host:/media/disk2

Isso pressupõe que você esteja apenas querendo um backup dos arquivos sem considerar a unidade subjacente. Isso faz um backup PER FILE e será executado rapidamente em apenas 2 GB de dados.

    
por 09.10.2018 / 04:59
-1
  1. Faça um USB ao vivo do gparted
  2. Inicialize no gparted e redimensione a partição na unidade original para 2+ gb
  3. Copiar unidade
  4. Redimensione a partição recém-copiada para seu tamanho total
por 09.10.2018 / 04:46