AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / server / Perguntas / 4906
Accepted
falstro
falstro
Asked: 2009-05-06 10:21:52 +0800 CST2009-05-06 10:21:52 +0800 CST 2009-05-06 10:21:52 +0800 CST

Usando DD para clonagem de disco

  • 772

Houve uma série de perguntas sobre ferramentas de clonagem de disco e ddfoi 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 ddpara 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?

disk-image dd
  • 29 29 respostas
  • 556864 Views

29 respostas

  • Voted
  1. Best Answer
    Adam Gibbins
    2009-05-06T10:31:57+08:002009-05-06T10:31:57+08:00

    dd é certamente a melhor ferramenta de clonagem, ele criará uma réplica 100% simplesmente usando o seguinte comando. Nunca tive problemas com isso.

    dd if=/dev/sda of=/dev/sdb bs=32M
    

    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.

    • 203
  2. David Hicks
    2009-05-07T14:47:31+08:002009-05-07T14:47:31+08:00

    Para economizar espaço, você pode compactar os dados produzidos pelo dd com gzip, por exemplo:

    dd if=/dev/hdb | gzip -c  > /image.img.gz
    

    Você pode restaurar seu disco com:

    gunzip -c /image.img.gz | dd of=/dev/hdb
    

    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:

    mkdir /mnt/hdb
    mount /dev/hdb /mnt/hdb
    dd if=/dev/zero of=/mnt/hdb/zero
    

    Espere um pouco, dd eventualmente falhará com uma mensagem de "disco cheio", então:

    rm /mnt/hdb/zero
    umount /mnt/hdb
    dd if=/dev/hdb | gzip -c  > /image.img.gz
    

    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:

    dd if=/dev/hdb of=/image.img &
    kill -SIGUSR1 1234
    

    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).

    • 135
  3. jldugger
    2009-05-06T12:20:34+08:002009-05-06T12:20:34+08:00

    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.

    • 47
  4. TimB
    2009-05-07T18:42:47+08:002009-05-07T18:42:47+08:00

    Ao usar ddpara clonar um disco que pode conter setores defeituosos, use conv=noerror,syncpara 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 dda velocidade do 's pode ser afetada pela configuração bs (tamanho do bloco). Eu costumo tentar 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.)

    • 32
  5. Kyle Cronin
    2009-05-06T10:26:44+08:002009-05-06T10:26:44+08:00

    Para clonar um disco, tudo o que você realmente precisa fazer é especificar a entrada e a saída para dd:

    dd if=/dev/hdb of=/image.img
    

    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:

    dd if=/dev/hdb of=/dev/hdc
    

    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.

    • 19
  6. Ben Williams
    2009-05-31T18:12:25+08:002009-05-31T18:12:25+08:00

    Se a unidade de origem estiver danificada, você terá mais sorte usando dd_rhelp( dd_rescueminha preferência pessoal) ou GNU ddrescue.

    A razão por trás disso é que, em erros de leitura, ddcontinua tentando e tentando e tentando - potencialmente esperando por um longo tempo para que os tempos limite ocorram. dd_rescuefaz coisas inteligentes como ler até um erro, depois escolher um ponto mais adiante no disco e ler para trás até o último erro, e dd_rhelpé basicamente um dd_rescuegerenciador de sessão - iniciando e retomando dd_rescueexecuçõ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ê deixar dd_rhelpem execução, no final, ele fará exatamente o mesmo trabalho que ddno mesmo tempo. No entanto, se ddencontrar 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*, enquanto dd_rhelp+ dd_rescuerecuperaria a maior parte dos dados muito mais rapidamente.

    • 14
  7. retracile
    2009-05-30T11:23:34+08:002009-05-30T11:23:34+08:00

    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:

    dd if=/dev/sda | ssh user@backupserver "cat > backup.img"
    

    Mas com mais força:

    dd if=/dev/sda | pv -c | gzip | ssh user@backupserver "split -b 2048m -d - backup-`hostname -s`.img.gz"
    

    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.

    • 9
  8. Sam Watkins
    2014-11-13T18:47:35+08:002014-11-13T18:47:35+08:00
    dd if=/dev/sda of=/dev/sdb bs=4096 conv=sync,noerror
    

    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.

    • 7
  9. James Sumners
    2009-05-30T14:03:58+08:002009-05-30T14:03:58+08:00

    Para clonar um disco, tudo o que você realmente precisa fazer é especificar a entrada e a saída para dd:

    dd if=/dev/hdb of=hdb.img
    

    Claro, certifique-se de que você tenha as permissões adequadas para ler diretamente /dev/hdb(eu recomendo executar como root) e que /dev/hdbnão esteja montado (você não deseja copiar enquanto o disco estiver sendo alterado). Depois de concluído, hdb.imgserá um clone byte a byte de todo o disco.

    Existem algumas desvantagens em usar ddpara clonar discos. Primeiro, ddirá 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, ddnã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:

    dd if=/dev/hdb of=/dev/hdc
    

    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:

    dd if=/dev/hdb | gzip -9 > hdb.img.gz
    

    A segunda desvantagem pode ser resolvida usando a pvferramenta pipeview ( ). Por exemplo:

    dd if=/dev/hdb | (pv -s `fdisk -l /dev/hdb | grep -o '[0-9]*\{1\} MB' | awk '{print $1}'`m) | cat > hdb.img
    

    Não conheço nenhuma maneira de superar a terceira desvantagem.

    Além disso, você pode acelerar o tempo de cópia dizendo ddpara trabalhar com grandes blocos de dados. Por exemplo:

    dd if=/dev/hdb of=hdb.img bs=1024
    
    • 6
  10. user5692
    2009-05-30T10:09:14+08:002009-05-30T10:09:14+08:00

    Outra coisa legal que você pode fazer com os discos dd e rescue é copiar dados pela rede:

    remote_machine$ nc -l -p 12345
    
    local_machine$ dd if=/dev/sda | nc remote_machine 12345
    

    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 5ou algo assim.

    • 5

relate perguntas

  • Como montar um ISO de CD/DVD no Windows 7?

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Ping uma porta específica

    • 18 respostas
  • Marko Smith

    Qual porta o SFTP usa?

    • 6 respostas
  • Marko Smith

    Resolver o nome do host do endereço IP

    • 8 respostas
  • Marko Smith

    Como posso classificar a saída du -h por tamanho

    • 30 respostas
  • Marko Smith

    Linha de comando para listar usuários em um grupo do Windows Active Directory?

    • 9 respostas
  • Marko Smith

    Qual é o utilitário de linha de comando no Windows para fazer uma pesquisa reversa de DNS?

    • 14 respostas
  • Marko Smith

    Como verificar se uma porta está bloqueada em uma máquina Windows?

    • 4 respostas
  • Marko Smith

    Qual porta devo abrir para permitir a área de trabalho remota?

    • 9 respostas
  • Marko Smith

    O que é um arquivo Pem e como ele difere de outros formatos de arquivo de chave gerada pelo OpenSSL?

    • 3 respostas
  • Marko Smith

    Como determinar se uma variável bash está vazia?

    • 15 respostas
  • Martin Hope
    Davie Ping uma porta específica 2009-10-09 01:57:50 +0800 CST
  • Martin Hope
    MikeN No Nginx, como posso reescrever todas as solicitações http para https mantendo o subdomínio? 2009-09-22 06:04:43 +0800 CST
  • Martin Hope
    Tom Feiner Como posso classificar a saída du -h por tamanho 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    0x89 Qual é a diferença entre colchetes duplos e simples no bash? 2009-08-10 13:11:51 +0800 CST
  • Martin Hope
    kch Como altero a senha da minha chave privada? 2009-08-06 21:37:57 +0800 CST
  • Martin Hope
    Kyle Brandt Como funciona a sub-rede IPv4? 2009-08-05 06:05:31 +0800 CST
  • Martin Hope
    Noah Goodrich O que é um arquivo Pem e como ele difere de outros formatos de arquivo de chave gerada pelo OpenSSL? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent Como determinar se uma variável bash está vazia? 2009-05-13 09:54:48 +0800 CST

Hot tag

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve