Como clonar o disco local (como / dev / sda) para o NAS via rede

0

Eu tenho um disco (A) (disco rígido SATA 2 TB 3.5) e tenho um NAS D-Link DNS-320L (com modelo exato de disco rígido SATA 2 TB 3.5). Ambos conectados a um roteador (rede local), 192.168.1.3 e 192.168.1.2 , respectivamente.

Como posso clonar o disco A ( /dev/sda ) no meu NAS ( //192.168.1.2/disk ) com dd ?

Exemplo hipotético (não funciona):

sudo dd if=/dev/sda |pv|dd of=//192.168.1.2/disk bs=1M conv=notrunc,noerror

Nota: preciso clonar (replicar) todo o HD "A" para HD "B" . HD "A" contém SO Ubuntu 16.04 x64, swap, MBR e outras partições.

Objetivo: Se houver um dano em "A", substitua-o por "B" rapidamente.

    
por bdc 25.03.2017 / 03:47

1 resposta

0

I need to clone (replica) entire HD "A" to HD "B".

Remova o HD "B" do seu NAS e conecte-o diretamente ao sistema onde o HD "A" está. Então você pode clonar com pv ou dd , ddrescue , ou mesmo com cp ou cat , e pode ser tão simples quanto

sudo dd if=/dev/sda of=/dev/sdb

Use as opções de que você precisa. (BTW, no seu exemplo conv=notrunc,noerror não faz sentido. Isso faria sentido com o primeiro dd .)

E é verdade que você não deve fazer isso quando qualquer sistema de arquivos de /dev/sda estiver montado com acesso de gravação ou /dev/sdb estiver montado de alguma forma. Isso é o que acontece quando sua origem pode mudar durante a clonagem sequencial .

Seu disco de destino (suas partições, sistemas de arquivos e arquivos) pode ou não ser visto pelo NAS quando você reinstala o disco lá. O NAS pode gravar algumas alterações e estragar o clone (por exemplo, pode ou não alterar os dados do carregador de inicialização no MBR e nos seguintes setores).

Eu sei que você quer uma solução onde o disco de destino fica dentro do NAS o tempo todo. Isso é difícil porque o seu NAS não expõe o disco (o dispositivo) nem sua partição ( s), nem sistema (s) de arquivos. Ele expõe arquivos (existentes no sistema de arquivos EXT3) usando CIFS / SMB, NFS, AFP ou HTTP / HTTPS. Para clonar no disco, você precisa ser capaz de escrever nele em um nível de setor - eu acho que o seu NAS não vai deixar você fazer isso desse jeito.

Eu disse "isso é difícil", não "impossível", porque se você pudesse obter acesso SSH (ou telnet, ou assim) ao seu NAS, então você poderia gravar no disco em um nível setorial. Você pode encontrar um shell Linux (?) Com ferramentas padrão e talvez você possa fazer algo semelhante a isso (da distribuição Linux ao vivo em um PC onde o HD "A" é):

sudo dd if=/dev/sda bs=1M conv=notrunc,noerror | pv | ssh [email protected] "dd of=/dev/your_target_disk bs=1M"

Ou use nc para transmitir seus dados.

Editar 1. Embora não esteja convencido de que isso funcionará com o NAS em questão (ou qualquer outro NAS), estou adicionando a solução nc , porque o OP solicitou explicitamente (em comentários). A seguinte solução funcionará com certeza para o "NAS" que é um computador comum com o Linux.

Antes de informar ao seu NAS para escutar os dados que chegam e passá-los ao dispositivo, certifique-se de que nenhum outro processo grave no disco de destino; umount se você puder ou, pelo menos, não compartilhar o dispositivo na configuração do NAS. Então:

# log in to NAS
nc -l 3210 | dd of=/dev/sda

O número 3210 é um número de porta, você pode escolhê-lo no intervalo 1024..65535 . Substitua /dev/sda string pelo dispositivo correto. De agora em diante, o seu NAS aguarda conexão de entrada. Se alguém se conectar a ele na porta escolhida, seus dados serão gravados no dispositivo, mas em um ambiente doméstico isso dificilmente será uma preocupação. No entanto, se você estiver preocupado com isso, saiba que nc aceitará apenas uma conexão (uma de cada vez e uma no total, ou seja, sairá quando a primeira conexão terminar). Então, se você se conectar com sucesso no próximo passo, saberá que ninguém fez isso.

Em seguida, informe seu sistema operacional com o disco de origem (HD "A") para lê-lo e envie os dados para a escuta nc no seu NAS. Como /dev/sda não deve ser montado (estritamente: ele pode ser montado, mas somente leitura), é melhor executar essa etapa de dentro de alguma distribuição Linux ao vivo.

# where HD "A" is
dd if=/dev/sda | nc 192.168.1.2 3210

Use as opções dd de que você precisa (como conv=notrunc,noerror ). Observe que 3210 é o número da porta de escuta que escolhi na etapa anterior.

Na prática, você pode querer monitorar o progresso, então o melhor comando pode ser:

dd if=/dev/sda | pv | nc 192.168.1.2 3210

Ou você pode solicitar que dd informe seu progresso passando o sinal USR1 para ele. Execute o seguinte em outro terminal:

kill -s USR1 $(pidof dd)

e as informações aparecerão no terminal em que dd é executado.

Depois que dd terminar e não houver erro (em nenhum dos lados), você deve reinicializar o NAS graciosamente . É muito importante deixar sync o disco de destino, portanto, não basta cortar a energia. Use o modo adequado de reinicializar ou desligar o seu NAS.

A edição 1 termina aqui.

Se você conseguir fazer isso, então as operações NAS normais podem ou não estragar algo no clone, como se você tivesse reinstalado o disco diretamente clonado.

Alguns comentários sugeridos para montar o compartilhamento e gravar nele em um nível de arquivo. Você tem pelo menos duas opções:

  • você copia arquivos (por exemplo, com rsync );
  • ou você escreve a imagem inteira do seu HD "A" como um arquivo colocado em um sistema de arquivos em HD "B".

Ambos os métodos podem ser úteis, mas nenhum deles é clonado. Você não poderá substituir o HD "A" simplesmente pelo HD "B" desejado. Além disso, o último método não funcionará no seu caso particular porque ele precisa de espaço livre no sistema de arquivos HD "B" para ser maior que o HD "A" (esta restrição pode não funcionar se você usar um arquivo esparso, mas não use um com NFS, SMB etc., você pode?). Você pode escrever um arquivo compactado e ele pode se encaixar, mas isso é ainda mais longe da clonagem.

    
por 27.03.2017 / 18:45