Houve uma série de perguntas sobre ferramentas de clonagem de disco e dd
foi sugerida pelo menos uma vez. Eu já pensei em me usar dd
, principalmente pela facilidade de uso, e que está prontamente disponível em praticamente todas as distribuições Linux inicializáveis.
Qual é a melhor maneira de usar dd
para clonar um disco? Fiz uma pesquisa rápida no Google e o primeiro resultado foi uma tentativa aparentemente fracassada . Existe alguma coisa que eu preciso fazer depois de usar dd
, ou seja, há algo que NÃO PODE ser lido usando dd
?
dd é certamente a melhor ferramenta de clonagem, ele criará uma réplica 100% simplesmente usando o seguinte comando. Nunca tive problemas com isso.
Esteja ciente de que, ao clonar cada byte, você não deve usá-lo em uma unidade ou partição que esteja sendo usada. Especialmente aplicativos como bancos de dados não podem lidar com isso muito bem e você pode acabar com dados corrompidos.
Para economizar espaço, você pode compactar os dados produzidos pelo dd com gzip, por exemplo:
Você pode restaurar seu disco com:
Para economizar ainda mais espaço, desfragmente a unidade/partição que deseja clonar com antecedência (se apropriado) e, em seguida, zere todo o espaço não utilizado restante, facilitando a compactação do gzip:
Espere um pouco, dd eventualmente falhará com uma mensagem de "disco cheio", então:
Além disso, você pode obter um processo dd em execução em segundo plano para relatar o status enviando um sinal com o comando kill, por exemplo:
Verifique seu sistema - o comando acima é para Linux, OSX e BSD Os comandos dd diferem nos sinais que aceitam (OSX usa
SIGINFO
- você pode pressionar Ctrl+ Tpara relatar o status).CUIDADO : dd'ar um sistema de arquivos ativo pode corromper os arquivos. A razão é simples, ele não entende a atividade do sistema de arquivos que pode estar acontecendo e não faz nenhuma tentativa de mitigá-la. Se uma gravação estiver parcialmente em andamento, você receberá uma gravação parcial. Isso geralmente não é bom para as coisas e geralmente é fatal para bancos de dados. Além disso, se você estragar o se e de parâmetros propensos a erros de digitação, ai de você. Na maioria dos casos, o rsync é uma ferramenta igualmente eficaz escrita após o advento da multitarefa e fornecerá visualizações consistentes de arquivos individuais.
No entanto, o DD deve capturar com precisão o estado do bit de uma unidade desmontada. Bootloaders, volumes llvm, UUIDs e rótulos de partição, etc. Apenas certifique-se de ter uma unidade capaz de espelhar a unidade de destino bit a bit.
Ao usar
dd
para clonar um disco que pode conter setores defeituosos, useconv=noerror,sync
para garantir que ele não pare quando encontrar um erro e preencha os setores ausentes com bytes nulos. Geralmente, essa é a primeira etapa que dou ao tentar recuperar de um disco com falha ou com falha - obtenha uma cópia antes de fazer qualquer tentativa de recuperação e, em seguida, faça a recuperação no disco bom (clonado). Deixo para a ferramenta de recuperação lidar com todos os setores em branco que não puderam ser copiados.Além disso, você pode descobrir que
dd
a velocidade do 's pode ser afetada pela configuração bs (tamanho do bloco). Eu costumo tentarbs=32768
, mas você pode testá-lo em seus próprios sistemas para ver o que funciona mais rápido para você. (Isso pressupõe que você não precisa usar um tamanho de bloco específico por outro motivo, por exemplo, se estiver gravando em uma fita.)Para clonar um disco, tudo o que você realmente precisa fazer é especificar a entrada e a saída para dd:
Claro, certifique-se de ter as permissões adequadas para ler diretamente de /dev/hdb (eu recomendo executar como root), e que /dev/hdb não está montado (você não deseja copiar enquanto o disco estiver sendo alterado - a montagem como somente leitura também é aceitável). Depois de concluído, image.img será um clone byte a byte de todo o disco.
Existem algumas desvantagens em usar dd para clonar discos. Primeiro, o dd copiará todo o seu disco, até mesmo o espaço vazio, e se feito em um disco grande pode resultar em um arquivo de imagem extremamente grande. Em segundo lugar, o dd não fornece absolutamente nenhuma indicação de progresso, o que pode ser frustrante porque a cópia leva muito tempo. Terceiro, se você copiar esta imagem para outras unidades (novamente, usando dd), elas devem ser tão grandes ou maiores que o disco original, mas você não poderá usar nenhum espaço adicional que possa ter no disco de destino até que você redimensione suas partições.
Você também pode fazer uma cópia direta de disco para disco:
mas você ainda está sujeito às limitações acima em relação ao espaço livre.
No que diz respeito a problemas ou pegadinhas, dd, na maioria das vezes, faz um excelente trabalho. No entanto, há um tempo atrás, eu tinha um disco rígido que estava prestes a morrer, então usei o dd para tentar copiar todas as informações que consegui antes que ele morresse completamente. Foi então descoberto que o dd não lida muito bem com erros de leitura - havia vários setores no disco que o dd não conseguia ler, fazendo com que o dd desistisse e parasse a cópia. Na época, não consegui encontrar uma maneira de dizer ao dd para continuar, apesar de encontrar um erro de leitura (embora pareça ter essa configuração), então passei um bom tempo especificando manualmente pular e procurar pular o seções ilegíveis.
Passei algum tempo pesquisando soluções para esse problema (depois de concluir a tarefa) e encontrei um programa chamado ddrescue , que, segundo o site, funciona como dd, mas continua lendo mesmo que encontre um erro. Na verdade, nunca usei o programa, mas vale a pena considerar, especialmente se o disco do qual você está copiando for antigo, que pode ter setores defeituosos, mesmo que o sistema pareça bom.
Se a unidade de origem estiver danificada, você terá mais sorte usando
dd_rhelp
(dd_rescue
minha preferência pessoal) ou GNUddrescue
.A razão por trás disso é que, em erros de leitura,
dd
continua tentando e tentando e tentando - potencialmente esperando por um longo tempo para que os tempos limite ocorram.dd_rescue
faz coisas inteligentes como ler até um erro, depois escolher um ponto mais adiante no disco e ler para trás até o último erro, edd_rhelp
é basicamente umdd_rescue
gerenciador de sessão - iniciando e retomandodd_rescue
execuções de maneira inteligente para torná-lo mais rápido novamente.O resultado final
dd_rhelp
é o máximo de dados recuperados em tempo mínimo. Se você deixardd_rhelp
em execução, no final, ele fará exatamente o mesmo trabalho quedd
no mesmo tempo. No entanto, sedd
encontrar erros de leitura no byte 100 de seu disco de 100 Gb, você terá que esperar muito tempo para recuperar os outros 9.999.900 bytes*, enquantodd_rhelp
+dd_rescue
recuperaria a maior parte dos dados muito mais rapidamente.O disco de origem não deve ter nenhum sistema de arquivos montado. Como um usuário capaz de ler o dispositivo de bloco (o root funciona), execute 'dd if=/dev/sda ....'
Agora, uma das coisas legais aqui é que você está criando um fluxo de bytes... e você pode fazer muito com isso: compactá-lo, enviá-lo pela rede, fragmentá-lo em blobs menores etc.
Por exemplo:
Mas com mais força:
A imagem acima copia uma imagem compactada do disco rígido de origem para um sistema remoto, onde a armazena em pedaços numerados de 2G usando o nome do host de origem, mantendo você atualizado sobre o progresso.
Observe que dependendo do tamanho do disco, velocidade da CPU na origem, velocidade da CPU no destino, velocidade da rede, etc. Você pode querer pular a compressão, ou fazer a compressão no lado remoto, ou habilitar a compressão do ssh.
Isso copiará o disco e pulará blocos com erros, o que é muito importante.
Estas são as opções básicas e essenciais para usar o dd para clonar ou resgatar um disco.
I did not want to post another answer, but there were no good answers with the essential "conv=sync,noerror" options among the 25 already posted.
Para clonar um disco, tudo o que você realmente precisa fazer é especificar a entrada e a saída para
dd
:Claro, certifique-se de que você tenha as permissões adequadas para ler diretamente
/dev/hdb
(eu recomendo executar como root) e que/dev/hdb
não esteja montado (você não deseja copiar enquanto o disco estiver sendo alterado). Depois de concluído,hdb.img
será um clone byte a byte de todo o disco.Existem algumas desvantagens em usar
dd
para clonar discos. Primeiro,dd
irá copiar todo o seu disco, até mesmo o espaço vazio, e se feito em um disco grande pode resultar em um arquivo de imagem extremamente grande. Em segundo lugar,dd
não fornece absolutamente nenhuma indicação de progresso, o que pode ser frustrante porque a cópia leva muito tempo. Terceiro, se você copiar esta imagem para outras unidades (novamente, usando dd), elas devem ser tão grandes ou maiores que o disco original, mas você não poderá usar nenhum espaço adicional que possa ter no disco de destino até que você redimensione suas partições.Você também pode fazer uma cópia direta de disco para disco:
mas você ainda está sujeito às limitações acima em relação ao espaço livre.
A primeira desvantagem pode ser resolvida com o gzip dos dados enquanto você faz a cópia. Por exemplo:
A segunda desvantagem pode ser resolvida usando a
pv
ferramenta pipeview ( ). Por exemplo:Não conheço nenhuma maneira de superar a terceira desvantagem.
Além disso, você pode acelerar o tempo de cópia dizendo
dd
para trabalhar com grandes blocos de dados. Por exemplo:Outra coisa legal que você pode fazer com os discos dd e rescue é copiar dados pela rede:
Você pode colocar o gzip em ambos os pipelines se a rede não for local. Para progredir, use
pv
. Para fazer o netcat de local_machine sair depois de copiar, você pode adicionar-w 5
ou algo assim.