Existe uma maneira de fazer uma cópia / clone no nível do setor de um disco rígido para outro?

5

Sem entrar em detalhes que me distraiam, estou tentando duplicar o conteúdo da unidade de 500 GB no meu MacBook para outra unidade de 500 GB. Mas isso está se tornando um aborrecimento inesperado porque a unidade contém a partição do OS X e uma partição NTFS com o Win 7 através do Boot Camp da Apple.

Com exceção do Clonezilla , as ferramentas que eu vi até agora têm alguma limitação. As ferramentas do Mac não querem lidar com a partição NTFS. As ferramentas do Windows são totalmente ignorantes sobre a partição HFS + e / ou o particionamento MBR / GPT híbrido do Boot Camp.

O Clonezilla parecia que faria o que eu queria, mas aparentemente não consigo descobrir como usá-lo. Depois de fazer o que eu achava que era uma cópia setor a setor, descobri que apenas a partição NTFS tinha sido migrada. Os outros estavam aparentemente vazios. (E, francamente, não estou certo de que o Clonezilla tenha migrado a tabela de partições corretamente).

Observação: são necessárias mais de duas horas usando o SATA para ler / gravar todos os setores com essas unidades. Então não estou pronto para usar trial & erro para estreitar a combinação certa de opções do Clonezilla para usar.

Estou começando a achar que talvez a resposta seja inicializar o Linux (provavelmente o Ubuntu) e depois usar algum comando antigo do BSD. O problema é que eu não sei qual comando (ou parâmetros a serem usados) para fazer uma cópia no nível do setor de uma unidade para outra. Até onde eu sei, as unidades têm o mesmo número de setores, então isso deve ser trivial. Suspiro.

Sim, dd funciona . (Ufa!)

Eu gostei especialmente do link na resposta à pergunta / troca correspondente no serverfault.com como eu nunca teria pensado em procurar lá.

Aqui estão alguns ajustes adicionais que usei depois de aprender sobre eles na troca no serverfault.

  • Não use o tamanho de transferência padrão de 512 bytes. No meu caso eu usei o formulário de dd if=/dev/sda of=/dev/sdb bs=8192
    desde que isso significativamente aumentou a taxa de transferência de dados. (Aconteceu que o tamanho de ambas as minhas unidades era um múltiplo de 8192. Não tenho certeza se isso importava, mas era mais seguro fazê-lo dessa maneira).

  • Existe uma maneira de obter algum status de progresso do comando dd . Aparentemente dd exibe seu status de transferência atual quando recebe o sinal correto. Eu usei o método sugerido em esta resposta de falha de servidor . No entanto, usei um intervalo de 120 segundos, não 10, pois não queria ser "inundado" com informações de progresso.

Demorou cerca de 2 horas e 20 minutos para clonar completamente a minha unidade de 500 GB para outra unidade de 500 GB. A mensagem de status final do dd foi 500107862016 bytes (500 GB) copied, 8353.86 s, 59.9 MB/s

O que falta em termos de opções este processo certamente compensa em simplicidade e integridade. : -)

    
por irrational John 29.05.2010 / 21:59

2 respostas

3

No linux, o comando dd pode fazer o que você quiser.

link

Apenas certifique-se de não clonar a unidade vazia na unidade que deseja clonar.

    
por 29.05.2010 / 23:11
0

Se você quiser rápido ..., então dd não é o que você quer. Por quê?

Porque é single-threaded. Isso significa que funciona desta maneira:

  1. lê um bloco da fonte, aguarda até que esteja pronto
  2. escreve esse bloco no destino, aguarda até pronto
  3. goto 1

Na verdade, a escrita e a leitura do próximo bloco podem acontecer ao mesmo tempo, mas o dd não pode fazer isso.

Para fazer backups rápidos, você pode usar a ferramenta buffer . Similarmente ao dd , ele funciona basicamente da entrada padrão para a saída padrão, então você pode usá-lo em um pipe, para tornar seus dois sites realmente paralelos trabalhando.

A parametrização que você provavelmente mais gosta:

buffer -i /dev/sdX -o /dev/sdY -s 8192 -b 2048

Ele irá clonar /dev/sdX para /dev/sdY , rapidamente.

Você também pode usar buffer para acelerar qualquer comando do shell canalizado:

pipe-chain-commands1 | buffer -s 8192 -b 2048 | pipe-chain-commands2

Isso resultará que a primeira cadeia não deve esperar até que a segunda cadeia não coma sua saída.

    
por 14.09.2018 / 17:37