Comment dd un disque distant en utilisant SSH sur une machine locale et l'enregistrer sur un disque local

85

Comment créer une sauvegarde d'un disque distant à l'aide de SSH sur ma machine locale et l'enregistrer sur un disque local?


J'ai essayé ce qui suit:

ssh [email protected] "sudo dd if=/dev/sdX " | \
  dd of=/home/username/Documents/filename.image`

Cependant, je reçois le message d'erreur suivant:

aucun tty présent et aucun programme askpass spécifié

Qu0rk
la source

Réponses:

114

Si votre intention est de sauvegarder le disque dur A d' un ordinateur distant via SSH vers un fichier unique se trouvant sur le disque dur de votre ordinateur local, vous pouvez procéder de l'une des manières suivantes.

Exemples

courir depuis un ordinateur distant

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

exécuter à partir de l'ordinateur local

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

Exemple en direct

$ 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éthodes de surveillance?

  1. Connectez-vous via sshun autre terminal et ls -lle fichier pour voir sa taille.
  2. Vous pouvez utiliser pvpour surveiller la progression d'une opération de grande taille, par exemple, pour l'exemple distant ci-dessus, vous pouvez effectuer les opérations suivantes:

    $ dd if=/dev/sda | gzip -1 - | pv | ssh user@local dd of=image.gz
    
  3. Envoyez un signal "SIGUSR1" à ddet il imprimera les statistiques. Quelque chose comme:

    $ pkill -USR1 dd
    

Références

Les méthodes de surveillance mentionnées ci-dessus ont été initialement laissées via les commentaires de @Ryan & @bladt et de moi-même. Je les ai déplacés dans la réponse pour les rendre plus évidents.

slm
la source
J'ai essayé ceci pour un problème similaire (sauvegarde du ONEdisque dur de l'ordinateur distant sur TWOle stockage de l' ordinateur distant ), comme ceci: <br /> [racine @ ONE] # dd if = / dev / sda1 | ssh root @ TWO dd of=/root/Public/ONE/sda1.img<br /> 409600 + 0 enregistrements sur 409600 + 0 enregistrements sur 209715200 octets (210 Mo) copiés, 0.894929 s, 234 Mo / s Le pseudo-terminal ne sera pas attribué car stdin n'est pas une racine de terminal @ le mot de passe de TWO : Le problème est que le /root/Public/ONE/sda1.imgfichier a été créé ONE, pas TWOcomme prévu. Comment puis-je réparer ça?
Urhixidur
1
Quelqu'un peut-il nous donner un exemple d'utilisation à pvpartir de la machine locale? Je vous remercie.
TCB13
il est préférable d'utiliser lbzip2 ou pigz insted de gzip
Shimon Doodkin
pourquoi ai-je besoin de "| dd of = image.gz" à la fin? (pas seulement "> image.gz") car dd prend 100% d'un processeur
Shimon Doodkin
6
En ce qui concerne la surveillance: Les nouvelles versions dd ont également l’ status=progressoption. Ainsi, vous n’avez plus besoin de courir pkill -USR1 dddepuis un autre terminal.
Till Schäfer
12

L'erreur que vous recevez est due à l'utilisation de sudo à distance (le mot de passe vous sera demandé mais vous ne disposez pas d'un tty pour le saisir). D'autre part, en tant qu'utilisateur normal, vous ne pouvez pas utiliser normalement simplement ddcomme suggéré dans une autre réponse (vous ne disposez pas des autorisations requises sur le périphérique). Vous pouvez résoudre le problème en vous donnant le droit d’exécuter en ddtant que sudo sans mot de passe. Vous pouvez le faire en éditant le fichier sudoers (sur la télécommande!):

sudo visudo

ajoutez la ligne suivante:

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

Maintenant vous pouvez émettre:

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

et ça devrait marcher. Vous pouvez créer une entrée plus générique dans sudoers, ce qui vous permet d’exécuter ddn’importe quel paramètre, mais il est plus sage de conserver au minimum ces autorisations gratuites.

Elfantin
la source
Ou, vous pouvez simplement exécuter 'sudo ls' à la fin applicable (et taper le mot de passe), juste avant d'exécuter la commande 'sudo dd ...'
MikeW
Avec les nouvelles versions de dd, ajouter status = progress permet même de surveiller la progression de la copie.
Sensslen
7

Je viens d'utiliser une version modifiée sur une machine virtuelle Linux Mint pour cloner un disque dur physique sur un serveur RedHat vieillissant.

J'ai exécuté ce qui suit en tant que root sur la boîte virtuelle:

ssh [email protected] "dd if=/dev/cciss/c0d0" | dd of=/dev/sdb
  • 192.168.1.5 est la boîte physique Red Hat Enterprise Linux 2.1.
  • / dev / sdb est un nouveau disque virtuel qui, une fois le clonage terminé, constituera la base d'une version virtuelle de l'ancienne boîte physique en train de mourir.
Fred Nerk
la source