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é
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.
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
$ 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
ssh
dans un autre terminal et ls -l
le fichier pour voir sa taille.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
Envoyez un signal "SIGUSR1" à dd
et il imprimera les statistiques. Quelque chose comme:
$ pkill -USR1 dd
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.
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.
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
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":
/dev/mmcblk0
- ceci clone la carte entière)Sudo -S
)status=progress
)gzip
)ssh [email protected] "Sudo -S dd if=/dev/mmcblk0 status=progress | gzip -1 -" | dd of=rpiimg.gz