Clona a partição inteira ou o disco rígido em um arquivo esparso

30

Eu gosto de clonar uma partição inteira ou um disco rígido inteiro em um disco externo maior, mas gosto de criar um arquivo esparso. Costumo usar dd para clonagem, mas não suporta arquivos esparsos. Como solução alternativa, usei algo como:

cp --sparse=always <(dd if=/dev/sda1 bs=8M) /mount/external/backup/sda1.raw

No entanto, isso é um pouco complicado demais para o meu gosto e não me permite retomar o processo se for abortado. É engraçado que exista uma ferramenta NTFS para isso ( ntfsclone ), mas essa ferramenta não existe para os sistemas de arquivos nativos do Linux (EXT2-4).

Existe alguma ferramenta melhor para isso? uma variante dd com suporte esparso? Eu não procuro por algum software proprietário para backups em disco, mas simplesmente quero fazer uma cópia clone esparsa que eu possa montar como dispositivo de loop, se necessário.

    
por Martin Scharrer 20.07.2011 / 21:48

5 respostas

19

Você deseja dd_rescue .

dd_rescue -a -b 8M /dev/sda1 /mount/external/backup/sda1.raw
    
por 24.07.2011 / 23:50
15

Apenas para completar a chamada para ddrescue . O sinalizador --sparse ou -S permite que o destino seja gravado de forma esparsa:

$ ddrescue -S -b8M /dev/sda1 /mount/external/backup/sda1.raw

Ou com opção longa:

$ ddrescue --sparse --block-size 8M /dev/sda1 /mount/external/backup/sda1.raw

Ou se preferir MiBs :

$ ddrescue -S -b8Mi /dev/sda1 /mount/external/backup/sda1.raw

Para permitir que o salvamento seja interrompido e reiniciado, você também pode fazer uso de um arquivo de registro:

$ ddrescue -S -b8Mi /dev/sda1 /mount/external/backup/sda1.raw ~/sda1.rescue.log

Note que o GNU ddrescue e dd_rescue são programas diferentes. Mas o GNU ddrescue parece ser mais difundido. Por exemplo, já está empacotado com o GRML .

    
por 28.05.2012 / 12:24
2

Houve um patch oferecido em 2007 para fornecer suporte a arquivos esparsos em GNU dd, mas parece não ter feito isso em coreutils (pelo menos não em 8.4). Eu duvido que o dd mudou muito desde então, o patch pode se aplicar contra a versão atual sem muito trabalho.

Também estou realmente impressionado com o uso criativo de cp em sua pergunta, e ele me ajudou a realizar a retomada (aqui resumindo de ~ 80M na origem):

cp --sparse=always \
  <(dd if=/dev/sda1 bs=8M skip=10) /dev/stdout \
  | dd bs=8M seek=10 of=/mount/external/backup/sda1.raw

Editar: risque isso. O segundo dd , é claro, estaria procurando a posição errada no arquivo de saída, já que não é o mesmo comprimento que a entrada.

    
por 22.07.2011 / 20:44
0

Nota: isso não funciona pelas razões descritas nos comentários, estou deixando aqui para referência.

Monitore as estatísticas do dd usando kill -USR1:

$ cp --sparse=always <(dd if=/dev/urandom bs=8M) \
    /mount/external/backup/sda1.raw&
$ watch kill -USR1 'pidof -s /bin/dd'

Continue usando o comando skip / seek:

$ i_bytes= # get from the last dd statistic
$ o_bytes='du -b /mount/external/backup/sda1.raw | cut -f 1'   
$ cp --sparse=always <(dd if=/dev/urandom bs=8M skip=$i_bytes \
    seek=$o_bytes) /mount/external/backup/sda1.raw&
$ watch kill -USR1 'pidof -s /bin/dd'

Sem $ i_bytes, seria mais difícil retomar. É provavelmente mais fácil registrar as estatísticas do dd em um arquivo no caso de a máquina falhar ou o que quer que seja.

    
por 21.07.2011 / 20:10
0

Existem xfsdump e xfsrestore para o XFS que tem sido um sistema de arquivos Linux nativo por um bom tempo .

    
por 27.11.2015 / 04:15