Cópia DD completa do disco rígido para o disco rígido

30

PERGUNTA ORIGINAL:

Se eu tiver 2 discos rígidos idênticos com as seguintes características:

  • SATA 6,0 Gb / s
  • 5400 rpm
  • 3 TB

Por quanto tempo uma cópia completa do dd deve ser concluída?

Até agora, ele está funcionando há 5 horas e ainda continua ...

Estou usando o Linux Ubuntu 12.04 64bits e o comando que estou usando é:

dd if=/dev/sdb of=/dev/sdc

ATUALIZAÇÃO: 1

Agora posso ver o progresso e já passou de 6 horas para copiar 430 GB. O HDD é de 3 TB ...

Não há maneira mais rápida de fazer isso?

ATUALIZAÇÃO: 2

Isso parece muito melhor do que antes (Obrigado à Groxxda pelas sugestões):

sudo dd if=/dev/sdb bs=128K | pv -s 3000G | sudo dd of=/dev/sdc bs=128K

O ETA é de cerca de 9 horas para 3 TB, enquanto antes chegava a 430 GB após 6 horas, por isso acredito que teria levado cerca de 36 horas usando o comando anterior.

    
por oshirowanen 12.07.2014 / 15:10

5 respostas

53

dd foi útil antigamente, quando as pessoas usavam fitas (quando os tamanhos de bloco eram importantes) e quando ferramentas mais simples, como cat , podiam não ser seguras em binários.

Hoje em dia, dd if=/dev/sdb of=/dev/sdc é apenas complicado, propenso a erros, lento maneira de escrever cat /dev/sdb >/dev/sdc . Embora o dd ainda seja útil para alguns Tarefas relativamente raras , é muito menos útil do que o número de tutoriais que mencionam que permitiria que você acreditasse. Não há mágica em dd , a mágica é toda em /dev/sdb .

Seu novo comando sudo dd if=/dev/sdb bs=128K | pv -s 3000G | sudo dd of=/dev/sdc bs=128K novamente é desnecessariamente lento e complicado. Os dados são lidos em 128kB de cada vez (o que é melhor que o padrão dd de 512B, mas não tão bom quanto valores ainda maiores). Em seguida, ele passa por dois tubos antes de ser escrito.

Use o comando cat mais simples e rápido. (Em algumas benchmarks Eu fiz um par de anos atrás no Linux, cat foi mais rápido que cp para uma cópia entre discos diferentes, e cp foi mais rápido que dd com qualquer tamanho do bloco; dd com um tamanho de bloco grande foi um pouco mais rápido ao copiar no mesmo disco.)

cat /dev/sdb >/dev/sdc

Se você quiser executar este comando em sudo , você precisa fazer o redirecionamento acontecer como root:

sudo sh -c 'cat /dev/sdb >/dev/sdc'

Se você quiser um relatório de progresso, já que está usando o Linux, pode facilmente obter um observando o PID do processo cat (digamos 1234) e observando a posição de seu descritor de arquivo de entrada (ou saída) .

# cat /proc/1234/fdinfo/0
pos:    64155648 
flags:  0100000

Se você quiser um relatório de progresso e sua variante unix não fornecer uma maneira fácil de obter uma posição de descritor de arquivo, você pode instalar e usar pv em vez de cat .

    
por 12.07.2014 / 23:17
5

dd usa um tamanho de bloco muito pequeno por padrão (512 bytes). Isso resulta em muita sobrecarga (um read() e write() syscall para cada 512 bytes).

Vai muito mais rápido quando você usa um tamanho maior de blocos. As velocidades ideais começam em bs=64k ou mais. A maioria das pessoas usa um bs=1M ainda maior para se tornar legível (quando dd diz que copiou 1234 blocks , você sabe que é 1234 MiB sem fazer nenhuma matemática). É improvável que o uso de blocos de tamanho ainda maiores resulte em melhorias de velocidade, apenas um consumo maior de memória.

Então o comando deve ser:

dd bs=1M if=/dev/sdb of=/dev/sdc

Se você já tiver um dd lento em execução, poderá interrompê-lo e retomar com uma instância mais rápida de dd . Para isso, é importante saber até onde a cópia já progrediu. dd geralmente imprime o progresso quando você o cancela, ou você pode enviar o sinal USR1 enquanto ele estiver sendo executado para que ele imprima seu progresso.

kill -USR1 $(pidof dd)

Por exemplo, se ele copiou mais de 1234MiB , você pode continuar na posição 1234MiB usando:

dd bs=1M seek=1234 skip=1234 if=/dev/sdb of=/dev/sdc

Se ele copiou menos de 1234MiB , sua cópia ficará incompleta. Se ele copiou mais de 1234MiB , ele copia novamente algumas partes já copiadas, o que normalmente não causa nenhum dano. Então, em caso de dúvida, você deve escolher um valor um pouco menor do que você acredita que já foi copiado.

    
por 12.07.2014 / 16:11
5

Obtendo estatísticas sobre o processo dd em andamento

Você pode usar o comando kill com o sinal apropriado para tornar as estatísticas dd output em erro padrão.
Na página do manual do GNU dd:

Sending a USR1 signal to a running 'dd' process makes it print I/O statistics to standard error and then resume copying.
      $ dd if=/dev/zero of=/dev/null& pid=$!
      $ kill -USR1 $pid
      18335302+0 records in 18335302+0 records out 9387674624 bytes (9.4 GB)  copied,  34.6279 seconds, 271 MB/s

Certifique-se de verificar primeiro a sua página de manual para o sinal correto, pois ele pode diferir em diferentes implementações dd: (o BSD dd usa SIGINFO).

Acelerando o processo

  1. Conecte cada HDD à sua própria porta SATA para que os dados possam ser lidos de um dispositivo e gravados para o outro ao mesmo tempo.
  2. Use um tamanho de bloco apropriado usando o argumento bs= . Dê uma olhada no este tópico no superusuário e tente alguns valores para você mesmo.
  3. Use invocações dd separadas para leitura e gravação e use um canal para conectá-las ( dd if=/dev/sda bs=1M | dd of=/dev/sdb bs=1M ).
    Se você fizer isso e especificar um tamanho de bloco, certifique-se de usar o mesmo tamanho de bloco em cada chamada.
  4. Você pode tentar outras otimizações, como o argumento direct .
  5. Verifique se seus discos rígidos não estão montados ou se pode resultar em uma cópia corrompida.
por 12.07.2014 / 16:16
0

Você já tentou "gparted"? Você pode literalmente copiar e colar uma partição de uma unidade para outra e redimensioná-la conforme necessário. Você obtém a taxa de transferência e o tempo restante. Ele usa 'e2image' embaixo para partições Linux.

    
por 01.09.2017 / 23:30
0

Existe um software comercial chamado HDClone . É licenciado como freeware e comercial. Qualquer das versões pode criar um pendrive ou DVD inicializável, além de copiar discos. Conecte os HDs de origem e destino e siga as instruções baseadas na GUI.

O gratuito irá transferir a uma taxa de cerca de 80MB / seg, enquanto as versões pagas podem ir muito mais rápido. Para sistemas de arquivos NTFS e FAT, as versões pagas podem ser configuradas para clonar apenas os bits ocupados do HD, o que aumenta drasticamente a velocidade de cada clone.

    
por 09.10.2017 / 22:50