Você deseja dd_rescue
.
dd_rescue -a -b 8M /dev/sda1 /mount/external/backup/sda1.raw
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.
Você deseja dd_rescue
.
dd_rescue -a -b 8M /dev/sda1 /mount/external/backup/sda1.raw
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 .
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.
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.
Existem xfsdump e xfsrestore para o XFS que tem sido um sistema de arquivos Linux nativo por um bom tempo .
Tags dd cloning sparse-files