Houve várias perguntas sobre as ferramentas de clonagem de disco e dd
foram sugeridas pelo menos uma vez. Eu já considerei dd
me usar , principalmente devido à 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? Eu fiz uma pesquisa rápida no Google, e o primeiro resultado foi uma aparente tentativa fracassada . Existe algo que eu precise fazer depois de usar dd
, ou seja, há algo que NÃO PODE ser lido usando dd
?
disk-image
dd
falstro
fonte
fonte
dd
opções corretas para ignorar blocos defeituosos - o que é essencial ao clonar discos para recuperação. Eu adicionei uma resposta melhor, o que pode clonar discos tendo blocos ruins:dd if=/dev/sda of=/dev/sdb bs=4096 conv=sync,noerror
Respostas:
O dd é certamente a melhor ferramenta de clonagem, ele criará uma réplica 100% simplesmente usando o seguinte comando. Eu nunca tive problemas com isso.
Esteja ciente de que ao clonar todos os bytes, você não deve usá-lo em uma unidade ou partição que está sendo usada. Especialmente aplicativos como bancos de dados não conseguem lidar muito bem com isso e você pode acabar com dados corrompidos.
fonte
dd if=/dev/sda | dd of=/dev/sdb
. Nos meus testes, executar o comando sem o pipe me proporcionou uma taxa de transferência de ~ 112kb / s. Com o tubo, eu tenho ~ 235kb / s. Nunca tive problemas com esse método. Boa sorte!Para economizar espaço, você pode compactar os dados produzidos pelo dd com o gzip, por exemplo:
Você pode restaurar seu disco com:
Para economizar ainda mais espaço, desfragmentar a unidade / partição que você deseja clonar anteriormente (se apropriado) e zerar todo o espaço restante não utilizado, facilitando a compactação do gzip:
Espere um pouco, o dd eventualmente falhará com uma mensagem "disco cheio" e:
Além disso, você pode executar um processo dd 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 eles aceitam (o OSX usa
SIGINFO
- você pode pressionar Ctrl+ Tpara relatar o status).fonte
kill -SIGUSR1 %1
comando OSX dd aceita SIGUSR1 ... super útil, obrigado!Kill -SIGUSR1 1234
eu estava procurando por isso.dd if=/dev/hdb | gzip -c > /image.img.gz
:?ATENÇÃO : a instalação de um sistema de arquivos ativo pode corromper arquivos. O motivo é 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 os bancos de dados. Além disso, se você estragar o erro de digitação se e dos parâmetros, 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. Carregadores de inicialização, volumes llvm, UUIDs de partição e etiquetas etc. Apenas verifique se você possui uma unidade capaz de espelhar a unidade de destino pouco a pouco.
fonte
sync
não seja a resposta para problemas de corrupção de arquivos. O que acontece se um daemon ou algo assim grava mais arquivos apóssync
, durante add
operação?rsync
garantirá que os dados internos no sistema de arquivos de destino sejam consistentes. Isso não garantirá que os dados contidos nos arquivos sejam consistentes; para isso, será necessário bloquear os arquivos e qualquer programa que grave nos arquivos precisará respeitar esses bloqueios.Ao usar o dd para clonar um disco que pode conter setores defeituosos, use "conv = 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 eu tomo se tentar recuperar de um disco com falha ou com falha - obtenha uma cópia antes de fazer qualquer tentativa de recuperação e faça a recuperação no disco bom (clonado). Deixo para a ferramenta de recuperação lidar com os setores em branco que não puderam ser copiados.
Além disso, você pode achar que a velocidade do dd pode ser afetada pela configuração bs (tamanho do bloco). Normalmente, eu tento bs = 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.)
fonte
Para clonar um disco, tudo o que você realmente precisa fazer é especificar a entrada e a saída para o dd:
Obviamente, verifique se você tem permissões adequadas para ler diretamente de / dev / hdb (eu recomendaria executar como root) e se / 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). Uma vez concluído, o image.img será um clone de byte por byte de todo o disco.
Existem algumas desvantagens em usar o dd para clonar discos. Primeiro, o dd copiará todo o seu disco, mesmo o espaço vazio, e se for feito em um disco grande, poderá resultar em um arquivo de imagem extremamente grande. Segundo, o dd não fornece absolutamente nenhuma indicação de progresso, o que pode ser frustrante porque a cópia demora muito tempo. Terceiro, se você copiar esta imagem para outras unidades (novamente, usando o dd), elas deverão 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 problemas, 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 as informações que eu poderia obter antes que ele morresse completamente. Foi então aprendido que o dd não lida muito bem com os 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. No momento, 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), por isso passei bastante tempo especificando manualmente pular e tentar 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, de acordo com 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.
fonte
conv=sync,noerror
ajudaria.conv=sync,noerror
opções são essenciais, elas permitem que o dd pule blocos defeituosos e zere-os na imagem para que as coisas estejam alinhadas corretamente. Suportes para as poucas pessoas que comentaram algo sobre isso.ddrescue
fornece indicador de progresso sem opções especiais, e você pode parar a cópia e continuar de onde parou.status=progress
Se a unidade de origem estiver danificada, você terá mais sorte ao usar
dd_rhelp
comdd_rescue
(minha preferência pessoal) ou GNUddrescue
.A razão por trás disso é que, com erros de leitura,
dd
continua tentando e tentando e tentando - potencialmente esperando por um longo período de tempo.dd_rescue
faz coisas inteligentes, como ler até um erro, depois escolher um ponto mais adiante no disco e ler de volta para o último erro, edd_rhelp
é basicamente umdd_rescue
gerenciador de sessões - iniciando e retomando inteligentemente asdd_rescue
execuções para torná-lo mais rápido novamente.O resultado final
dd_rhelp
é o máximo de dados recuperados em tempo mínimo. Se você sair emdd_rhelp
execução, no final, ele fará exatamente o mesmo trabalho quedd
no mesmo horário. No entanto, sedd
ocorrerem erros de leitura no byte 100 do seu disco de 100 Gb, será necessário aguardar muito tempo para recuperar os outros 9.999.900 bytes *, enquanto odd_rhelp
+dd_rescue
recuperaria a maior parte dos dados muito mais rapidamente.fonte
O disco de origem não deve ter nenhum sistema de arquivos montado. Como um usuário capaz de ler o dispositivo de bloco (raiz funciona), execute 'dd if = / dev / sda ....'
Agora, uma das coisas legais aqui é que você está criando um fluxo de bytes ... e pode fazer muito com isso: compactá-lo, enviá-lo pela rede, dividi-lo em blobs menores etc.
Por exemplo:
Mas mais poderosamente:
A cópia acima copia uma imagem compactada do disco rígido de origem para um sistema remoto, onde a armazena em pedaços 2G numerados usando o nome do host de origem, mantendo você atualizado sobre o andamento.
Observe que, dependendo do tamanho do disco, velocidade da CPU na origem, velocidade da CPU no destino, velocidade da rede, etc. Talvez você queira pular a compactação ou fazer a compactação no lado remoto ou ativar a compactação do ssh.
fonte
Para clonar um disco, tudo o que você realmente precisa fazer é especificar a entrada e a saída para
dd
:Obviamente, verifique se você possui permissões adequadas para ler diretamente
/dev/hdb
(recomendo executar como root) e/dev/hdb
se não está montado (você não deseja copiar enquanto o disco estiver sendo alterado). Depois de concluído,hdb.img
será um clone de byte por byte de todo o disco.Existem algumas desvantagens em usar
dd
para clonar discos. Primeiro,dd
copiará todo o seu disco, mesmo o espaço vazio, e se for feito em um disco grande, poderá resultar em um arquivo de imagem extremamente grande. Segundo, nãodd
fornece absolutamente nenhuma indicação de progresso, o que pode ser frustrante porque a cópia demora muito tempo. Terceiro, se você copiar esta imagem para outras unidades (novamente, usando o dd), elas deverão 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 ao compactar os dados à medida que 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 pedaços de dados. Por exemplo:fonte
dd if=/dev/zero bs=1M of=/balloon; sync; rm /balloon
(Inteligência Modulo extra na camada de sistema de ficheiros.)Outra coisa legal que você pode fazer com os discos dd e de resgate é copiar dados pela rede:
Você pode colar o gzip nesses dois pipelines se a rede não for local. Para progredir, use
pv
. Para fazer com que o netcat do local_machine feche após a cópia, você pode adicionar-w 5
algo assim.fonte
> disk_backup.img
ou|dd of=/dev/sdb
ou outra coisa, dependendo do que você deseja fazer. Suponho que você não deseja despejar uma imagem de disco no stdout.Lembre-se de que o dd faz uma cópia exata , incluindo todo o espaço em branco.
Que significa:
Espero que seja útil
fonte
Para referência futura, pode ser interessante verificar o ddrescue . Ele salvou meu dia algumas vezes.
fonte
Outro recurso importante é copiar MBRs, tabelas de partição e registros de inicialização.
Somente
e a outra direção quando você está escrevendo. Polonês com
fdisk
depois.Você se sente muito mais seguro ao fazer backup da sua tabela de partições.
Além disso, torna a migração para outro disco rígido (enquanto altera a estrutura da partição) uma alegria.
fonte
Esse é um tipo de hack barato, mas é uma maneira rápida e suja de monitorar seu processo de DD.
Execute seu comando dd. Abra um novo shell e faça um ps awx para encontrar o PID do seu processo de dd. Agora, no novo tipo de shell, assista -n 10 kill -USR1 {pid do seu processo DD}
Isso não fará nada na janela de saída do relógio, mas, de volta ao shell DD original, o DD começará a emitir relatórios de status a cada 10 segundos. Você pode alterar o -n 10 no comando watch para qualquer outro período de tempo, é claro.
Tachyon
fonte
watch
disponível e-USR1
mata dd. Porém, o seguinte comando funciona:while [ true ]; do killall -INFO dd; sleep 30; done
pv
comando.Isso copiará o disco e ignorará os 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.
Eu não queria postar outra resposta, mas não havia boas respostas com as opções essenciais "conv = sync, noerror" entre as 25 já postadas.
fonte
conv=sync,noerror
, pois pulará muitos dados para cada bloco defeituoso. Essas opções são essenciais para a "clonagem de recuperação" e não é bom ter que pesquisar nos comentários. A resposta mais popular é adequada se os discos não tiverem blocos defeituosos, por exemplo, para clonar um disco novo, mas não para recuperação.dd
exemplo aqui, além de ser adequado para clonar um disco sem erros. Portanto, considero minha resposta a melhor aqui sobre como "usar o DD para clonagem de disco". Não adicionei informações sobre o monitoramento do progresso, compactação etc., porque queria simplificá-lo e me concentrar em fornecer uma resposta curta que atenda ao básico.Você poderia realmente tentar algo assim
pular todos os erros e ter o clone exato de uma partição ou disco rígido
fonte
O dd fornece informações de progresso - bem, a maioria das versões no linux. Eu já vi alguns que não lembram o sabor unix.
A página de manual diz: Enviar um sinal USR1 para um processo 'dd' em execução faz com que imprima as estatísticas de E / S para erro padrão e depois continue a cópia.
Eu uso esse recurso regularmente.
fonte
Alguém tinha que dizer o seguinte: experimente o Clonezilla (http: // clonezilla.org/)
O que você ganha? Copiar apenas partes usadas do sistema de arquivos. O Clonezilla usa dd, grub, sfdisk, parted, partimage, ntfsclone e / ou partclone. Dependendo das opções que você escolher.
Documentação decente pode ser encontrada em: http: // clonezilla.org/clonezilla-live/doc/
fonte
Como copiar usando o dd (neste caso, para uma máquina remota, mas o mesmo princípio se aplica a uma cópia local) que mostra o progresso.
Ele funciona armazenando o pid através do descritor de arquivo 3 em / tmp / pid, que é então usado para as mortes subsequentes com o sinal USR1. Uma ruga era filtrar a saída do progresso no stderr para apenas uma linha através da filtragem do stderr através de um subshell.
fonte
A maioria das informações foi descrita em remessas inseridas anteriormente, mas nem todas foram descritas.
No linux, você pode clonar o disco rígido ou particionar pelo comando dd. Atenção, quando você cometer um erro, perderá todos os seus dados.
Inicialmente, o destino não deve estar em uso, a fonte secundária não deve ser usada ou remontada no modo somente leitura. Caso contrário, a cópia será danificada. Se a remontagem for impossível, faça da unidade inicializável (hdd / ssd / pendrive) qualquer distribuição Linux ao vivo. Eu prefiro o knoppix, mas essa é a sua escolha. Se for possível, você pode inicializar ou alterar o nível do sistema para 1, no modo de usuário único, ou você pode reiniciar o sistema diretamente no modo de usuário único, dependendo da distribuição. Se você clonar apenas uma partição, essa partição deve ser desmontada ou remontada no RO:
ou
Se você deseja clonar todo o disco rígido, desmonte ou remonte todas as partições.
Você deve identificar o dispositivo de origem e destino. veja o dmesg, aqui estão armazenadas todas as informações necessárias sobre o dispositivo, com o fornecedor etc. a identificação alternativa pode ser baseada no tamanho do dispositivo, se for diferente. Em seguida, o destino deve ser o mesmo ou maior que a origem. você deve calcular a origem, por exemplo: fdisk -l / dev / sda, exceto a geometria da partição (pode haver GPT), irá buscar: 1. tamanho total do disco com GB e bytes 2. geometria histórica e número total do setor, informações muito importantes 3. tamanho do bloco em bytes, geralmente é 512.
por exemplo:
Em seguida, vamos tentar com mais de 512 divisores, temos 41943040 setores físicos:
41943040/256 = 163840, muito bom, podemos fazer cópias em massa de 256 setores. podemos mais? vamos tentar: 41943040/1024 = 40960, acho que isso é suficiente, vamos selecionar este. Vamos contar o tamanho do grupo de setores: 512 (tamanho do setor) * 1024 = 524288 bytes eq 512K. Então podemos usar o parâmetro bs = 512K ou menos, mas divida-o por 2 ^ x. Para discos rígidos modernos com grande cache interno, isso é bastante prático. para unidades mais antigas com cache muito menor, um valor de 32K ou menos é suficiente.
Depois da preparação, podemos fazer uma cópia: dd se = / dev / source_devide of = / dev / destination_device bs = 32K e a cópia será feita. Preste atenção, qualquer erro substituirá seus dados de importação e importação. No destino, todos serão substituídos.
Se você tentar resgatar dados no disco de origem danificado, use melhor o tamanho do setor nativo, geralmente este é 512 bytes e adicione a opção conv = notrunc. caso contrário, os buracos na fonte descartados por setores defeituosos serão unidos pela mudança de setor no destino. Isso danificará a cópia com poucas chances de reparo. então o comando será:
, e aguarde muito tempo quando a unidade e o sistema desistem e andam setor por setor até o fim.
O dd é uma ferramenta útil para mover a partição para um novo local. Simplesmente crie uma partição, faça dd para uma nova partição (isso pode ser maior, muito maior) e, se possível, expanda o sistema de arquivos copiados para preencher todas as novas partições, ext3 / ext4 / xfs / zfs / btrfs têm esse recurso. Finalmente, você deve alterar / etc / fstab e, em seguida, desmontar / montar, se possível, ou reiniciar o sistema.
Claro que você pode clonar qualquer tipo de partição. O comando dd não analisa o tipo de sistema de arquivos, não faz nada com sua estrutura. esse comando pode ser usado para clonar NTFS ou outros tipos de partição.
Existe algum truque. Quando você não definiu o parâmetro, o dd colocará a saída em seu stdout. você pode fazer uma cópia bruta compactada do disco ou partição, por exemplo:
Claro que isso deve ser feito offline. você pode restaurar isso:
, todo o disco rígido sda será substituído por esse backup e todos os dados atuais serão perdidos. Você pode fazer isso também com a partição NTFS do Windows e o disco rígido usado por isso. Claro que você pode usar outro comando de compactação, dependendo de sua escolha.
fonte
Você pode criar um arquivo de imagem compactado da partição (ou disco) rapidamente usando
bzip2
ou emgzip
vez dedd
. Isso é bom para armazenar imagens em mídia removível:Se o disco já tiver sido muito usado antes, você poderá aprimorar a compactação preenchendo todo o espaço não utilizado com zeros antes da imagem:
Para restaurar a imagem em outro disco, tudo o que você precisa fazer é:
fonte
Por alguma razão, o dd falha ao criar imagens de CDs com faixas de áudio. Você precisa usar o cdrdao ou algo semelhante para obter uma imagem + arquivo TOC.
fonte
Uma observação sobre a velocidade: na minha experiência, dd é duas vezes mais rápido se você especificar bs = 1024 em vez do padrão bs = 512. O uso de um tamanho de bloco ainda maior não proporciona aceleração perceptível em bs = 1024.
fonte
Uma coisa que você deve estar ciente ao fazer dd de um disco completo é que isso substituirá o registro mestre de inicialização do disco receptor. Contém a tabela de partições e outras informações vitais. Se o novo disco não for o mesmo que o disco antigo, isso poderá criar todos os tipos de tabelas. Copiar sobre partições geralmente é mais seguro (e as partições de troca não precisam ser copiadas)
fonte
Estou fora da função de administrador há muitos anos, mas sei que 'dd' está pronto para o trabalho. Eu usei essa técnica regularmente no final dos anos 80 nos computadores Sun Sparc e 386i. Eu tinha um cliente que solicitou mais de 30 sistemas 386i executando software CAD distribuído em várias fitas QIC.
Instalamos no primeiro computador, configuramos o aplicativo, executamos o sys-unconfig do SunOS, colocamos a unidade em uma caixa de sapatos com um endereço SCSI diferente e, em seguida, passamos a 'dd' para as outras 30 unidades.
fonte
Como outros mencionaram acima, um dos truques ao clonar um sistema de arquivos montado é a potencial corrupção de dados. Obviamente, isso não se aplica a clones de unidade completa, mas se você estiver usando LVM, poderá capturar instantaneamente o LogicalVolume e dd a partir do instantâneo para obter uma imagem consistente.
fonte
Para volumes NTFS, prefiro usar o ntfsclone . Faz parte do pacote ntfsprogs .
fonte
Apenas um aviso para iniciantes que precisa ser dito: Pelo menos em algumas versões, bs = X significa que a memória para o tamanho de X será literalmente alocada. bs = 2 GB em um sistema com 1 GB de RAM e troca insuficiente fará com que coisas ruins aconteçam.
fonte