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

34

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

Quanto tempo deve levar uma cópia dd completa para ser concluída?

Até agora, ele está em execução há 5 horas e ainda continua ...

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

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

UPDATE: 1

Agora posso ver o progresso e já faz mais de 6 horas a cópia de 430 GB. O disco rígido é de 3 TB ...

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


UPDATE: 2

Isso parece muito melhor do que antes (obrigado ao Groxxda pelas sugestões):

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

O ETA dura cerca de 9 horas para 3TB, enquanto antes de atingir 430 GB após 6 horas, acho que levaria cerca de 36 horas usando o comando anterior.

oshirowanen
fonte
Tente capturar as estatísticas do processo: o envio de um sinal USR1 para um processo 'dd' em execução faz com que imprima as estatísticas de E / S no erro padrão e, em seguida, retome a cópia. $ dd se = / dev / zero de = / dev / null & pid = $! $ kill -USR1 $ pid Verifique sua página de manual quanto ao sinal real, pois difere para diferentes implementações de dd.
1213414
@Groxxda, não tenho ideia de como fazer isso.
Oshirowanen
11
Usos do GNU dd SIGUSR1e do BSD ddSIGINFO
groxxda
O que você quer dizer com "conectado ao mesmo cabo SATA"? Você está usando algum tipo de multiplicador de portas? (Se você atingir uma taxa de transferência de até 150MB / s, deve levá-lo 5-6hrs, mas acho que metade do que é mais realista.)
groxxda
11
Você pode acelerar o processo especificando um tamanho de bloco diferente (maior) ( bs=argumento para dd). Considere também conectar cada HDD à sua própria porta SATA.
groxxda

Respostas:

58

ddera útil nos velhos tempos, quando as pessoas usavam fitas (quando o tamanho dos blocos importava) e quando ferramentas mais simples, como as que catpodem não ser seguras para os binários.

Atualmente, dd if=/dev/sdb of=/dev/sdcé uma maneira lenta , complicada e propensa a erros de escrever cat /dev/sdb >/dev/sdc. Embora ddainda seja útil para algumas tarefas relativamente raras , é muito menos útil do que o número de tutoriais mencionando isso permitiria que você acreditasse. Não há mágica dd, a mágica está dentro /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 128kB por vez (o que é melhor que o ddpadrão de 512B, mas não tão bom quanto valores ainda maiores). Ele passa por dois canais antes de ser escrito.

Use o catcomando mais simples e rápido . (Em alguns benchmarks que fiz alguns anos atrás no Linux, catera mais rápido do que cppara uma cópia entre discos diferentes e cpmais rápido do que ddcom qualquer tamanho de bloco; ddcom um tamanho grande de bloco era um pouco mais rápido ao copiar no mesmo disco.)

cat /dev/sdb >/dev/sdc

Se você deseja executar este comando sudo, é necessário fazer o redirecionamento acontecer como root:

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

Se você deseja um relatório de progresso, já que está usando o Linux, pode obtê-lo facilmente, anotando o PID do catprocesso (por exemplo, 1234) e observando a posição do descritor de arquivo de entrada (ou saída).

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

Se você deseja um relatório de progresso e sua variante unix não fornece uma maneira fácil de chegar a uma posição de descritor de arquivo, você pode instalar e usar em pvvez de cat.

Gilles 'SO- parar de ser mau'
fonte
O que é estranho nos blocos grandes é que o gargalo é o disco, então o que torna catmais rápido que dd? Será que catusa o cache?
Emmanuel
11
@Gilles, obrigado pela resposta. Eu tenho mais cinco unidades de 3 TB para clonar e tentarei a opção cat em seguida. Pelo que sei, esse novo comando dd levará mais 3 horas para ser concluído, totalizando cerca de 11 horas. Se a abordagem de gato for mais rápida que 11 horas para o segundo HD de 3 TB, usarei esse método para as unidades restantes.
oshirowanen
2
@Gilles, para obter um relatório de progresso, eu uso em sudo sh -c 'pv /dev/sdb >/dev/sdc'vez de sudo sh -c 'cat /dev/sdb >/dev/sdc'?
Oshirowanen
11
@oshirowanen Sim, use pvonde você usaria cat.
Gilles 'SO- stop be evil'
11
@unhammer Não! Você copia cada dispositivo um por um, por exemplo cat /dev/sdc1 >/dev/sdb1 && cat /dev/sdd1 >/dev/sde1. Concatenar as duas partes não faz sentido. Se você deseja alterar a estrutura do volume btrfs, para que ele tenha dois subvolumes para um, é necessário usar as ferramentas btrfs para alterar a estrutura ou como você criou para criar um novo sistema de arquivos com a estrutura desejada e copiar os arquivos .
Gilles 'SO- stop being evil'
7

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

Vai muito mais rápido quando você usa um tamanho de bloco maior. As velocidades ideais começam mais bs=64kou menos. A maioria das pessoas usa um tamanho ainda maior bs=1Mpara que fique legível por humanos (quando dddiz que é copiado 1234 blocks, você sabe que é 1234 MiBsem fazer contas). É improvável que o uso de tamanhos de bloco ainda maiores resulte em melhorias de velocidade, apenas um maior consumo de memória.

Portanto, o comando deve ser:

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

Se você já tem uma ddexecução lenta , pode interrompê-la e continuar com uma ddinstância mais rápida . Para isso, é importante saber até que ponto a cópia já progrediu. ddnormalmente imprime o progresso quando você o cancela ou pode enviar o USR1sinal enquanto estiver em execução para fazer com que ele imprima seu progresso.

kill -USR1 $(pidof dd)

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

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

Se copiou menos que 1234MiB, sua cópia estará incompleta. Se copiou mais do que 1234MiBisso, irá copiar novamente algumas partes já copiadas, o que normalmente não causa nenhum dano. Portanto, em caso de dúvida, escolha um valor um pouco menor do que o que você acredita que já foi copiado.

frostschutz
fonte
5

Obtendo estatísticas sobre o processo dd em andamento

Você pode usar o killcomando com o sinal apropriado para fazer as ddestatísticas de saída com erro padrão.
Na página de 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 na página de manual o sinal correto, pois ele pode diferir em diferentes implementações de 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 no outro ao mesmo tempo.
  2. Use um tamanho de bloco apropriado usando o bs=argumento Dê uma olhada neste tópico no superusuário e tente alguns valores por si mesmo.
  3. Use ddinvocações 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 directargumento.
  5. Verifique se os discos rígidos não estão montados ou isso pode resultar em uma cópia corrompida.
groxxda
fonte
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 taxa de transferência e tempo restante. Ele usa 'e2image' embaixo para partições linux.

ioannis
fonte
0

Existe um software comercial chamado HDClone . É licenciado como freeware e comercial. Qualquer uma 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.

A versão gratuita será transferida a uma taxa de cerca de 80 MB / s, enquanto as versões pagas podem ser muito mais rápidas. 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.

Gerold manders
fonte
(1) Você é afiliado a este produto? (2) Onde podemos obtê-lo?
Scott
11
Ou você pode simplesmente usar "cat / dev / sdx> / dev / SDY" de graça ...
HörmannHH