Como dd um disco remoto usando SSH na máquina local e salvar em um disco local


85

Como posso criar um backup de um disco remoto usando SSH na minha máquina local e salvá-lo em um disco local?


Eu tentei o seguinte:

ssh hostname@my.ip.address "sudo dd if=/dev/sdX " | \
  dd of=/home/username/Documents/filename.image`

No entanto, eu recebo o seguinte erro:

nenhum presente tty e nenhum programa askpass especificado

Respostas:


114

Se sua intenção é fazer backup do HDD A de um computador remoto via SSH para um único arquivo que esteja no HDD do computador local, você pode fazer o seguinte.

Exemplos

executar a partir do computador remoto

$ dd if=/dev/sda | gzip -1 - | ssh user@local dd of=image.gz

executar a partir do computador local

$ ssh user@remote "dd if=/dev/sda | gzip -1 -" | dd of=image.gz

Exemplo ao vivo

$ ssh skinner "dd if=/dev/sda5 | gzip -1 -" | dd of=image.gz
208782+0 records in
208782+0 records out
106896384 bytes (107 MB) copied, 22.7608 seconds, 4.7 MB/s
116749+1 records in
116749+1 records out
59775805 bytes (60 MB) copied, 23.9154 s, 2.5 MB/s

$ ll | grep image.gz
-rw-rw-r--.   1 saml saml  59775805 May 31 01:03 image.gz

Métodos para monitoramento?

  1. Entre via sshem outro terminal e ls -lo arquivo para ver qual é o seu tamanho.
  2. Você pode usar pvpara monitorar o progresso de uma grande operação de dd, por exemplo, para o exemplo remoto acima, você pode:

    $ dd if=/dev/sda | gzip -1 - | pv | ssh user@local dd of=image.gz
    
  3. Envie um sinal "SIGUSR1" para dde ele imprimirá estatísticas. Algo como:

    $ pkill -USR1 dd
    

Referências

Os métodos mencionados acima para o monitoramento foram originalmente deixados por comentários de @Ryan & @bladt e de mim. Mudei-os para a resposta para torná-los mais óbvios.


Tentei isso por um problema semelhante (fazendo backup do ONEdisco rígido do computador remoto para o TWOarmazenamento do computador remoto ), assim: <br /> [root @ ONE] # dd if = / dev / sda1 | ssh root @ DOIS dd of=/root/Public/ONE/sda1.img<br /> 409600 + 0 registros em 409600 + 0 registros 209715200 bytes (210 MB) copiados, 0,894929 s, 234 MB / s O pseudo-terminal não será alocado porque stdin não é uma raiz do terminal @ senha do TWO : O problema é que o /root/Public/ONE/sda1.imgarquivo foi criado ONE, não TWOcomo esperado. Como faço para corrigir isso?
Urhixidur

1
Alguém pode nos dar um exemplo de uso pvna máquina local? Obrigado.
TCB13

é melhor usar lbzip2 ou pigz insted de gzip
Shimon Doodkin

por que preciso do "| dd of = image.gz" no final? (e não apenas "> image.gz"), porque dd leva 100% de uma cpu
Shimon Doodkin

6
Em relação ao monitoramento: as versões mais recentes do dd também têm a status=progressopção. Portanto, você não precisa mais correr pkill -USR1 ddde outro terminal.
Till Schäfer

12

O erro que você recebe é devido ao uso do sudo remotamente (você deve solicitar a senha, mas não tem um tty para digitá-la). Por outro lado, como usuário normal, normalmente não é possível usá-lo simplesmente ddcomo sugerido em outra resposta (você não tem as permissões necessárias para o dispositivo). Você pode resolver o problema concedendo a si mesmo direitos para executar ddcomo sudo sem uma senha. Você pode fazer isso editando o arquivo sudoers (no controle remoto!):

sudo visudo

adicione a seguinte linha:

userfoo ALL=(ALL) NOPASSWD: /bin/dd if=/dev/sdX

Agora você pode emitir:

ssh userfoo@host "sudo /bin/dd if=/dev/sdX" | dd of=test.dd

e deve funcionar. Você pode fazer uma entrada mais genérica nos sudoers, permitindo executar ddcom qualquer parâmetro, mas é mais prudente manter essas permissões gratuitas no mínimo necessário.


Ou, você pode simplesmente executar 'sudo ls' no final aplicável (e digitar a senha), antes de executar o comando 'sudo dd ...'
MikeW

Com as versões mais recentes do dd, adicionar status = progress permite até o monitoramento do progresso da cópia.
sensslen

7

Acabei de usar uma versão modificada em uma caixa Linux Mint virtual para clonar um disco rígido físico em um servidor RedHat antigo.

Executei o seguinte como root na caixa virtual:

ssh root@192.168.1.5 "dd if=/dev/cciss/c0d0" | dd of=/dev/sdb
  • 192.168.1.5 é a caixa física do Red Hat Enterprise Linux 2.1.
  • / dev / sdb é um novo disco virtual, que ao terminar a clonagem será a base de uma versão virtual da antiga caixa física que está morrendo.
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.