Aller au contenu principal
~/GiwiSoft
Photo 1597852074816 d933c7d2b988

Comment copier un disque dur distant sur un disque dur local

Giwi 3 min de lecture Linux

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
$ ssh user@<serveur distant> "sudo dd if=/dev/sda" | pv | sudo dd of=/dev/sdb

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
# sur le serveur distant, créez d'abord l'image :
$ ssh user@<serveur distant> "sudo dd if=/dev/sda of=/tmp/image.img bs=4M"
$ rsync -avP --partial --progress user@<serveur distant>:/tmp/image.img .
$ sudo dd if=image.img of=/dev/sdb bs=4M

--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
$ sudo fdisk -l /dev/sdb # vérifier la cible
$ sudo blkid /dev/sdb # voir si la cible contait déjà des données

En cas de doute, débranchez la source avant d’insérer la cible.