web-dev-qa-db-fra.com

Comment dd un disque distant en utilisant SSH sur la machine locale et enregistrer sur un disque local

Comment puis-je 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 l'erreur suivante:

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

89
Qu0rk

Si votre intention est de sauvegarder le disque dur d'un ordinateur distant A via SSH vers un seul fichier qui se trouve sur le disque dur de votre ordinateur local, vous pouvez effectuer l'une des opérations suivantes: le suivant.

Exemples

exécuté depuis un ordinateur distant

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

exécuté depuis un 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 ssh dans un autre terminal et ls -l le fichier pour voir sa taille.
  2. Vous pouvez utiliser pv pour surveiller la progression d'une opération dd de grande taille, par exemple, pour l'exemple distant ci-dessus, vous pouvez faire:

    $ dd if=/dev/sda | gzip -1 - | pv | ssh user@local dd of=image.gz
    
  3. Envoyez un signal "SIGUSR1" à dd et 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 des commentaires par @ Ryan & @ bladt et moi-même. Je les ai placés dans la réponse pour les rendre plus évidents.

124
slm

L'erreur que vous recevez est due à l'utilisation de Sudo à distance (le mot de passe vous sera demandé mais vous n'avez pas de terminal pour le saisir). D'un autre côté, en tant qu'utilisateur normal, vous ne pouvez pas normalement utiliser simplement dd comme suggéré dans une autre réponse (vous n'avez pas les autorisations requises sur le périphérique). Vous pouvez résoudre le problème en vous donnant le droit d'exécuter dd en tant 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

Vous pouvez maintenant é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, vous permettant d'exécuter dd avec n'importe quel paramètre, mais il est plus sage de conserver ces autorisations gratuites au minimum dont vous avez besoin.

12
elfantin

Je viens d'utiliser une version modifiée sur une boîte 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 de 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 mourante.
8
Fred Nerk

La combinaison de ces réponses m'a permis de cloner vers un autre hôte Linux et d'éviter l'erreur "autorisation refusée":

  • Carte SD RPI4 (/dev/mmcblk0 - ceci clone la carte entière)
  • éviter le problème d'autorisation en demandant un privilège élevé (Sudo -S)
  • voir les progrès lors de la copie (status=progress)
  • compression de la copie (gzip)
ssh [email protected] "Sudo -S dd if=/dev/mmcblk0 status=progress | gzip -1 -" | dd of=rpiimg.gz
0
Paul Sturm