rsync - Transferts de fichiers - Application à la sauvegarde d'un système standard

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 recopie des fichiers s'effectue avec rsync. Pour plus de détails sur la commande voir rsync.

Sommaire

1 - Principe

Dans ce qui suit, on suppose que

La migration s'effectue en plusieurs étapes :

2 - Partitionnement du disque de destination

2.1 - Caractéristiques du disque à migrer

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

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.

2.2 - Partitionnement et formatage du disque de destination

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

3 - Sauvegarde de la partition home

3.1 - Montage de la partition

Monter la partition home du disque de destination par exemple en /mnt :

# mount /dev/sdb3 /mnt

3.2 - Sauvegarde à l'identique

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.

# lsblk -f |grep -E "NAME|/mnt"
NAME FSTYPE LABEL UUID MOUNTPOINT
├─sdb3 ext4 homedd 253c5c20-fe9e-4b5d-8c83-94aabbab8f66 /mnt
# rsync -av --delete /home/ /mnt/ --dry-run
# rsync -av --delete /home/ /mnt/

Notes :

3.3 - Sauvegarde avec filtres et exclusions

Il est possible d'utiliser

# rsync -av --delete-excluded --filter={"- *.iso","- *.vdi","- Trash/","- lost+found/","- *.tmp","- .thumbnails/"} --exclude={"/user/Téléchargements/*","/user/.cache/*",} /home/ /mnt/

3.4 - Démontage

Démonter la partition :

# umount /mnt

4 - Sauvegarde de la partition racine

4.1 - Montage des partitions

Monter la partition racine du disque de destination, par exemple en /mnt :

# mount /dev/sdb1 /mnt

4.2 - Sauvegarde

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.

# lsblk -f |grep -E "NAME|/mnt"
NAME FSTYPE LABEL UUID MOUNTPOINT
└─sdb1 ext4 debiandd ccb46e14-dff6-4319-a059-aca7cd5864d6 /mnt
# rsync -aAXv --delete-excluded --exclude={"/dev/*","/proc/*","/sys/*","/tmp/*","/run/*","/mnt/*","/media/*","/lost+found","/home/*"}  / /mnt/ --dry-run
# rsync -aAXv --delete-excluded --exclude={"/dev/*","/proc/*","/sys/*","/tmp/*","/run/*","/mnt/*","/media/*","/lost+found","/home/*"}  / /mnt/

4.3 - Fin de la sauvegarde

Démonter la partition :

# umount /mnt

5 - Mise à jour des fichiers fstab, resume et de grub

5.1 - Changement de racine

# 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

5.2 - Mise à jour des fichiers fstab et resume

5.2.1 Noter les identifiants UUID ou LABELS des partitions de destination

# 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
# lsblk -o NAME,LABEL /dev/sdb
NAME LABEL
sda
├─sdb2 swapdd
├─sdb3 homedd
└─sdb1 debiandd

5.2.2 Mettre à jour fstab

/# 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

5.2.3 Mettre à jour resume

/# nano /etc/initramfs-tools/conf.d/resume
RESUME=UUID=80847b0f-4d07-4767-bd50-ceb3f0bd56a0
/# nano /etc/initramfs-tools/conf.d/resume
RESUME=LABEL=swapdd
# update-initramfs -u

5.3 - Mise à jour grub

/# grub-install /dev/sdb
Installing for i386-pc platform.
Installation terminée, sans erreur.
/# 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.

5.4 - Fin

/# exit
exit
# umount dev
# umount run/lvm
# umount run
# umount sys
# umount proc
# cd ..
# umount /mnt

6 - Vérification

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.