Comment copier un disque dur distant sur un disque dur local
Si comme moi, vous souhaitez migrer le disque dur de votre media player sur un nouveau disque, voici une ligne de commande bien pratique.
J’accède à mon media center en ssh, sur mon media center, mon vieux disque est en /dev/sda (fdisk -l pour vous en assurer).
Mon nouveau disque est branché en USB sur mon laptop en /dev/sdb (faites attention, je ne veux pas être tenu pour responsable d’une fausse manip!)
Pour copier le distant sur le local :
ssh user@<serveur distant> "sudo dd if=/dev/sda" sudo dd of=/dev/sdb |
Et pour connaître la progression, logguez vous en ssh sur le serveur distant dans un autre terminal et tapez :
sudo pkill -USR1 dd |
Vous verrez la progression dans le premier terminal.
Afficher la progression en direct avec pv
Pour éviter de devoir ouvrir un second terminal, intercalez pv (Pipe Viewer) dans le pipeline :
sudo apt install pv |
pv affiche le débit, le volume transféré et le temps restant estimé.
Compresser le flux pour les réseaux lents
Sur une connexion lente, compressez le flux avec gzip au vol :
ssh user@<serveur distant> "sudo dd if=/dev/sda | gzip -c" | gunzip -c | sudo dd of=/dev/sdb |
Ou avec pv pour voir la progression :
ssh user@<serveur distant> "sudo dd if=/dev/sda | gzip -c" | pv | gunzip -c | sudo dd of=/dev/sdb |
Pour du réseau très lent, zstd offre un meilleur ratio compression/vitesse :
ssh user@<serveur distant> "sudo dd if=/dev/sda | zstd -c" | zstd -d | sudo dd of=/dev/sdb |
Reprendre un transfert échoué avec rsync
Si la connexion coupe en plein milieu d’un transfert de plusieurs centaines de Go, dd ne permet pas de reprendre. Préférez rsync avec une image disque montée en boucle :
ssh user@<serveur distant> "sudo dd if=/dev/sda" > image_disque.img |
--partial conserve le fichier partiellement transféré et reprend où il s’était arrêté.
Alternative moderne : rsync pour copie logique
Si vous n’avez pas besoin d’un clone bit-à-bit (partition, MBR, etc.), rsync est plus efficace pour sauvegarder les fichiers :
rsync -avz --delete --progress -e ssh user@<serveur distant>:/chemin/dossier/ /chemin/local/ |
Vérifications de sécurité avant dd
Rappel important : dd écrit en aveugle. Vérifiez toujours deux fois vos périphériques :
lsblk # lister tous les disques |
En cas de doute, débranchez la source avant d’insérer la cible.