Ceci est valable pour un ordinateur GNU/Linux installé sans UEFI, ce qui nous arrange puisque nous préférons utiliser du matériel reconditionné et qu'il est encore possible de s'en passer.

L'idée est de cloner un disque HDD de 500GB vers un disque SSD de 240GB à condition qu'il y moins de 240GB d'utilisés sur le disque d'origine. C'est souvent le cas pour des ordinateurs utilisés dans un bureau parce que la plupart des données sont sur un serveur et que les disques d'origines contiennent principallement le système d'exploitation, les applications et peut-être l'un ou l'autre profile utilisateur·ice dans /home.

Attention cela fonctionne pour des disques qui ont été installés sans UEFI et donc sur du matériel qui supporte encore des BIOS plus anciens (legacy).

Toutes les commandes sont à faire avec les droits de root.

Sur l'ordinateur de destination

On part du principe qu'un ordinateur plus récent, équipé d'un disque SSD de 240GB permet de brancher l'ancien disque de 500GB. En 2022, c'est tout à fait possible en SATA et au pire, il faut peut-être prévoir de mettre le vieux disque HDD dans un boitier USB externe et faire la procédure en utilisant un port USB au lieu d'un port SATA.

Booter avec un clé UBS

Nous utilisons System Rescue parce qu'il est basé sur Archlinux et qu'il contient l'outil arch-chroot dont nous aurons besoin.

De plus, en démarrant le PC, on peut choisir de charger l'OS dans la RAM, ce qui permet de libérer la clé USB et de faire d'autres ordinateurs en parallèle sans avoir besoin d'une clé USB bootable par machine.

Donc, au démarrage, il faut choisir l'option copy to ram.

Partitionner le nouveau disque

L'idée ici est d'avoir une partition racine / qui contiendra tout le système et une seconde partition plus petite pour en faire une swap.

Avec les deux disques branchés dans la machine.

Bien identifier le nouveau SSD de 240GB et l'ancien HDD de 500GB.

# lsblk -fs

Et partitionner le nouveau disque, dans notre cas il s'appelle /dev/sdb mais ça pourrait être différent pour vous.

Ne vous trompez pas de disque !

La commande fdisk se gère avec des commandes comme o, n, p, t, a, w mais vous comprendrez dés que vous aurez exécuté fdisk /dev/sdX (ou X est votre nouveau disque SSD).

# fdisk /dev/sdb
o  (vire tout)
n p enter -10G
n p enter enter
t 2 82
a 1
w

Formater et créer une swap

Les deux partitions ayant été créés, il faut maintenant formater la première (en ext4 dans notre cas) et créer une swap sur la seconde.

# mkfs.ext4 /dev/sdb1
# mkswap /dev/sdb2

Monter les deux disques

Maintenant, l'ancien disque HDD et le nouveau SSD sont utilisables et nous pouvons les monter pour avoir accès à leur système de fichier.

# mkdir /vieudisk
# mkdir /newdisk
# mount -o ro /dev/sda1 /vieudisk
# mount /dev/sdb1 /newdisk

Recopier tout le système

Et ensuite, copier tout le système, les applications, les données, les journeaux, etc. de l'ancien disque vers le nouveau avec la commande rsync.

# rsync -av /vieudisk/ /newdisk/

Finaliser le travail sur le nouveau disque

Nous allons activer la swap pour que l'utilitaire genfstab que nous exécuterons puisse l'identifer et l'inscrire dans la fstab.

# swapon /dev/sdb2
# genfstab -U /newdisk/ > /newdisk/etc/fstab

Et maintenant nous pouvons installer le secteur d'amorçage avec grub-install et arch-chroot pour quitter le système de fichier de System Rescue et utiliser le système de fichier du nouveau disque SSD. Le kernel permet de changer de racine lorsqu'on lui demande, ce qui dans le jargon porte le doux nom de chrooter le système en cours de fonctionnement.

# arch-chroot /newdisk
# export PATH=/bin:/sbin:/usr/bin:/usr/sbin
# grub-install   /dev/sdb  # ou si cela ne fonctionne pas, essayez la commande suivante
# grub-install  --boot-directory=/newdisk/boot/ /dev/sdb
# update-grub

Et tant que nous sommes sur le nouveau système avec notre kernel chrooté, nous en profitons pour activer fstrim qui a la responsabilité de libérer les blocks du disque SSD lorsque des données seront supprimées.

# systemctl enable fstrim.timer

Et pour terminer, nous utilisons sync pour demander au kernel de terminer et clôturer les oppérations d'écritures sur les disques, cela nous assure qu'il n'y a pas encore des oppérations en attente dans le cache et cela évite la corruption de données. Et nous pouvons éteindre l'ordinateur avec poweroff.

# sync
# poweroff

Enlever le vieux disque et démarrer

Il reste à déconnecter l'ancien disque HDD de la machine et l'allumer.

Si la distribution GNU/Linux d'origine n'est pas trop vielle et que le noyaux trouve de quoi piloter le matériel de la nouvelle machine, l'ordinateur devrait fonctionner sur ce nouveau matériel.

Voilà ! Nous avons « cloné » un système complet autrement qu'en utilisant, par exemple dd ou ddrescue pour faire des copies bit à bit complète, y compris des secteurs non utilisés et/ou gparted pour redimensionner le disque trop grand (500GB > 240GB).