Mise à jour : Debian 9.0
L'objectif est de copier une installation existante d'un disque vers un nouveau disque, pour disposer, par exemple, d'un disque de rechange prêt à l'emploi en cas de panne, ou migrer d'un disque dur à un disque SSD, ou d'un système de fichier à un autre.....
La solution décrite ici est basée sur la copie des répertoires à l'aide de rsync, telle que présentée par le wiki Archlinux : Full system backup with rsync
Par rapport à une copie ou un clonage de partitions (avec gparted ou clonezilla), cette solution présente plusieurs avantages
la partition de destination peut-être plus petite que la partition d'origine
les mises à jour sont possibles sans qu'il soit nécessaire de tout recopier
la recopie peut s'effectuer depuis le système à recopier en cours de fonctionnement et ne nécessite donc pas de redémarrage du système
La recopie des fichiers s'effectue avec rsync. Pour plus de détails sur la commande voir rsync.
Sommaire
Dans ce qui suit, on suppose que
le système à recopier est situé sur le disque sda
la recopie est effectuée sur le disque sdb
les disques d'origine et de destination ont trois partitions : une pour la racine, une pour /home et une pour le swap
La migration s'effectue en plusieurs étapes :
Partitionnement du disque de destination
Recopie des partitions racine et home, en sélectionnant éventuellement les répertoires et fichiers à ne pas recopier
Adaptation sur le disque de destination des fichiers fstab et resume et de grub
Démarrer le système à migrer et noter les identifiants des partitions racine et home du disque à migrer
# lsblk -f /dev/sda
NAME FSTYPE LABEL UUID MOUNTPOINT
sda
├─sda1 ext4 debian a42b8919-e6a8-49e0-845e-6feb76b02297 /
├─sda2 swap swap e08131c8-298b-4368-81e4-502c3b83bef5 [SWAP]
└─sda3 ext4 home 78f7dc86-7d34-45aa-80c0-99538d77a3f7 /home
Dans le cas présent, il s'agit de
sda1 pour la partition racine à migrer
sda3 pour la partition home à migrer
Noter la taille des partitions et leur occupation
# df -h /dev/sda1 /dev/sda3
Sys. de fichiers Taille Utilisé Dispo Uti% Monté sur
/dev/sda1 20G 5,9G 13G 33% /
/dev/sda3 186G 58G 119G 33% /home
En déduire la taille minimum des partitions / et /home sur les quelles s'effectueront la migration.
Connecter le disque sur lequel s'effectuera la migration et créer les partitions racine, swap et home avec leur système de fichiers.
Si le disque de destination est un disque SDD, par précaution, réserver sur le disque un espace libre non partitionné pour faciliter la gestion des effacements.
Dans l'exemple ci-dessous, l'espace libre est situé à la fin du disque après la partition 3, et sa dimension est de 16383153 secteurs (468862128 - 452478975), soit 8388174336 octets, environ 8Gio.# fdisk -l /dev/sdb
Disque /dev/sdb : 223,6 GiB, 240057409536 octets, 468862128 secteurs
Unités : secteur de 1 × 512 = 512 octets
Taille de secteur (logique / physique) : 512 octets / 512 octets
taille d'E/S (minimale / optimale) : 512 octets / 512 octets
Type d'étiquette de disque : dos
Identifiant de disque : 0x2327fe4a
Device Boot Start End Sectors Size Id Type
/dev/sdb1 2048 40962047 40960000 19,5G 83 Linux
/dev/sdb2 40962048 57346047 16384000 7,8G 82 Linux swap / Solaris
/dev/sdb3 57346048 452478975 395132928 188,4G 83 Linux
Monter la partition home du disque de destination par exemple en /mnt :
# mount /dev/sdb3 /mnt
Attention : la partition de destination (ici homedd, sdb3) doit impérativement être montée en /mnt, sinon la copie s'effectuera, sur le disque d'origine.
Vérifier le point de montage
# lsblk -f |grep -E "NAME|/mnt"
NAME FSTYPE LABEL UUID MOUNTPOINT
├─sdb3 ext4 homedd 253c5c20-fe9e-4b5d-8c83-94aabbab8f66 /mnt
Tester la recopie (ou la mise à jour) du contenu du répertoire home de sda3 vers homedd de sdb3, avec l'option --dry-run
# rsync -av --delete /home/ /mnt/ --dry-run
# rsync -av --delete /home/ /mnt/
Notes :
rsync doit-être lancé en root pour pouvoir accéder au répertoire /mnt
noter le / dans l'adresse de la source : /home/ car le répertoire home ne doit pas être créé dans sdb3
Il est possible d'utiliser
Attention dans l'option --exclude : les chemins sont relatifs par rapport à la source (ici /home) donc dans les exclusions ne pas inclure /home dans le chemin, mais inclure /user
# rsync -av --delete-excluded --filter={"- *.iso","- *.vdi","- Trash/","- lost+found/","- *.tmp","- .thumbnails/"} --exclude={"/user/Téléchargements/*","/user/.cache/*",} /home/ /mnt/
Démonter la partition :
# umount /mnt
Monter la partition racine du disque de destination, par exemple en /mnt :
# mount /dev/sdb1 /mnt
Attention : la partition de destination (ici debiandd, sdb1) doit impérativement être montée en /mnt, sinon la copie s'effectuera, sur le disque d'origine.
Vérifier le point de montage
# lsblk -f |grep -E "NAME|/mnt"
NAME FSTYPE LABEL UUID MOUNTPOINT
└─sdb1 ext4 debiandd ccb46e14-dff6-4319-a059-aca7cd5864d6 /mnt
Tester la recopie du répertoire racine / de la partition debian vers le répertoire racine / de la partition debiandd, en excluant :
les répertoires système "peuplés" au démarrage du système /dev, /proc, /sys/ ... ou comprenant des fichiers temporaires ...
les répertoires sur lesquels des systèmes de fichier sont montés et qui ne doivent pas être recopiés : /media, /home, /mnt
# rsync -aAXv --delete-excluded --exclude={"/dev/*","/proc/*","/sys/*","/tmp/*","/run/*","/mnt/*","/media/*","/lost+found","/home/*"} / /mnt/ --dry-run
Si aucune anomalie n'est détectée, procéder à la sauvegarde :
# rsync -aAXv --delete-excluded --exclude={"/dev/*","/proc/*","/sys/*","/tmp/*","/run/*","/mnt/*","/media/*","/lost+found","/home/*"} / /mnt/
Démonter la partition :
# umount /mnt
Effectuer un changement de racine (chroot) vers la partition debiandd
# mount /dev/sdb1
# cd /mnt
# mount --bind /proc proc
# mount --bind /sys sys
# mount --bind /run run # En cas d'utilisation de apt, évite le message : E: Impossible d'ouvrir le fichier verrou /var/lock/aptitude - open (2: Aucun fichier ou dossier de ce type)
# mount --bind /dev dev # Pour l'accès aux partitions externes, par exemple, pour la mise en place de grub sur la MBR
# mount --bind /dev/pts dev/pts # Evite le message : E: Impossible d'écrire le journal (Est-ce que /dev/pts est monté ?) - posix_openpt (2: Aucun fichier ou dossier de ce type)
# cp /etc/resolv.conf etc # En de problème de connexion internet
# chroot ./
Ou bien en regroupant les commandes :
# cd /mnt
# mount --bind /proc proc && mount --bind /sys sys && mount --bind /run run && mount --bind /dev dev && cp /etc/resolv.conf etc
# chroot ./
Note : En cas de message : "WARNING: Failed to connect to lvmetad: No such file or directory. Falling back to internal scanning." pendant l'étape de mise à jour de grub, monter également /run/lvm
mount --bind /run/lvm run/lvm
soit avec les UUID : UUID="xxxxxxxxxxxxxxx"
# lsblk -o NAME,UUID /dev/sdb
NAME UUID
sdb
├─sdb1 ccb46e14-dff6-4319-a059-aca7cd5864d6
├─sdb2 80847b0f-4d07-4767-bd50-ceb3f0bd56a0
└─sdb3 253c5c20-fe9e-4b5d-8c83-94aabbab8f66
soit avec LABELS : LABEL="azerazer"
# lsblk -o NAME,LABEL /dev/sdb
NAME LABEL
sda
├─sdb2 swapdd
├─sdb3 homedd
└─sdb1 debiandd
Soit avec les LABELS
/# nano /etc/fstab # /etc/fstab: static file system information.
...
# <file system> <mount point> <type> <options> <dump> <pass>
# / was on /dev/sda1 during installation
LABEL="debiandd" / ext4 errors=remount-ro 0 1
# /home was on /dev/sda3 during installation
LABEL="homedd" /home ext4 defaults 0 2
# swap was on /dev/sda2 during installation
LABEL="swapdd" none swap sw 0 0
/dev/sr0 /media/cdrom0 udf,iso9660 user,noauto 0 0
Soit avec les UUIDs
/# nano /etc/initramfs-tools/conf.d/resume
RESUME=UUID=80847b0f-4d07-4767-bd50-ceb3f0bd56a0
Soit avec les LABELs
/# nano /etc/initramfs-tools/conf.d/resume
RESUME=LABEL=swapdd
Mettre à jour initramfs :
# update-initramfs -u
/# grub-install /dev/sdb
Installing for i386-pc platform.
Installation terminée, sans erreur.
Mettre à jour grub.cfg
/# update-grub
Création du fichier de configuration GRUB…
Found background image: /usr/share/images/desktop-base/desktop-grub.png
Image Linux trouvée : /boot/vmlinuz-4.7.0-0.bpo.1-amd64
Image mémoire initiale trouvée : /boot/initrd.img-4.7.0-0.bpo.1-amd64
Image Linux trouvée : /boot/vmlinuz-4.6.0-0.bpo.1-amd64
Image mémoire initiale trouvée : /boot/initrd.img-4.6.0-0.bpo.1-amd64
Debian GNU/Linux (8.6) trouvé sur /dev/sda1
fait
Note : le système installé sur sda1 a été pris en compte. Si ce n'est pas souhaité, il faudra le supprimer.
Clore le changement de racine
/# exit
exit
# umount dev
# umount run/lvm
# umount run
# umount sys
# umount proc
Démonter la partition sdb1
# cd ..
# umount /mnt
Redémarrer sur le nouveau disque et vérifier le bon fonctionnement.
Le disque migré peut-être utilisé comme sauvegarde et mis à jour régulièrement à partir du disque original selon le même principe.