Table des matières
2019-07-21: Création
2019-07-28: Nouvelle stratégie de disque
2019-08-09: Backup vers NAS
2019-08-17: NAS QNAP → Disk1 DATA
Situation
Suite à un freeze du PC suivi d'un power off forcé, voici l'accueil du reboot suivant :
Le système n'arrive pas à monter la partition /dev/sda6 qui correspond à /home.
Il semple y avoir une incohérence dans le système de fichier BTRFS.
Sauvegarde
Le principe est de :
- faire une image de la partition vers un disque externe
- Tenter une correction de la partition
Utilisation de dd, création de l'image sans compression :
# dd if=/dev/sda6 of=/mnt/wd-1to/pc-jc-debian-home/image.sda6.home.201-07-21 bs=4096 conv=notrunc,noerror status-progress
Pour la petite histoire, j'ai refait l'image le lendemain, le 22 car j'ai halt le PC sans unmount le disque externe. Donc dans le doute j'ai supprimé et recommencé l'image avec dd.
Tentative de correction
Les commandes suivantes n'ont rien données :
# btrfs check --readonly -p /dev/sda6 # mount -o ro,usebackuproot /dev/sda6 /mnt # btrfs rescue zero-log /dev/sda6 # btrfs check /dev/sda6 # btrfs check --repair /dev/sda6 # btrfsck --init-extent-tree /dev/sda6
Test de restauration
J'ai presque appris par cœur ce retour d’expérience :
linuxfr.org/.../btrfs-restore-a-la-rescousse
Donc voici la commande btrfs de restauration vers un autre disque :
# yes | btrfs restore -s -x -m -S -v -i -o /dev/sda6 /mnt/usb-8go/
Explications : (de raphj linuxfr.org/.../btrfs-restore-a-la-rescousse
- -s récupère aussi les sous-volumes
- -x récupère aussi les attributs étendus
- -m récupère aussi les métadonnées (droits, dates)
- -S récupère aussi les liens symboliques
- -v pour moins s'ennuyer, ça fait défiler des trucs à l'écran (et surtout on sait où on en est dans la récupération)
- -i ne pas s'arrêter à cause des erreurs (très important pour la suite, et de toute façon si on veut tout récupérer on ne veut pas que ça s'arrête)
- -o pour réécrire les fichiers qui existeraient déjà sur la destination (oui, il a fallu que je relance la commande plusieurs fois en apprenant à l'utiliser)
- yes, parce que même avec l'option -i, btrfs restore s'arrête de temps en temps en affichant We seem to be looping a lot on XXX, do you want to keep going on ? (y/N):, donc oui on veut que ça continue.
Testé vers une clé USB 8go avec un Ctrl+C juste pour voir, en attendant l'arrivé d'un disque dur pour recevoir la restauration, et qui finira dans un NAS (c'était prévu, c'est le moment d'upgrader le 160go en 4to ).

Bonus: Montage image partition faite avec dd
GNU Linux est définitivement plein d'utilitaires de dingue !
Commande file
La commande file retrouve plein d'info sur l'image dd
(j'ai juste ajouté qq passage à la ligne pour la lisibilité)
$ file -s image.sda6.home.2019-07-22 image.sda6.home.2019-07-22: BTRFS Filesystem label "DATA", sectorsize 4096, nodesize 16384, leafsize 16384, UUID=d4c14b15-8cda-41ee-b83d-71fa77b927d5, 336804290560/634998751232 bytes used, 1 devices
Commande parted
# parted image.sda6.home.2019-07-22 unit s print Modèle: (file) Disque /media/jc/My_Passport/pc-jc-ssd-debian-home/image.sda6.home.2019-07-22 : 1240231936s Taille des secteurs (logiques/physiques): 512B/512B Table de partitions : loop Disk Flags: Numéro Début Fin Taille Système de fichiers Fanions 1 0s 1240231935s 1240231936s btrfs
Méthode 1: parted+mount
Grace à parted, on vois qu'il n'y a pas d'offset comme dans cet exemple: can-i-mount-a-partition-from-a-full-drive-image
- Dans cet exemple, start (début de la partition) est en 2048s
donc offset = 2048 x 512 = 1048576
- Dans mon cas, le début de la partition est un 0s
donc calcul de l'offset = 0 x 512 = 0
# mount -t btrfs -o ro,loop,offset=0 image.sda6.home.2019-07-22 /mnt/debian-home-sda6-img
- Si comme moi, l'image provient d'une partition défectueuse, le montage ne fonctionnera pas.
- Pour une image correcte, il est possible de naviguer à l'intérieur et de prendre des fichiers.
- On note l'option -o ro pour readonly affin de ne pas effacer des données par erreur dans l'image.
Méthode 2: losetup+lsblk+mount
- Cette méthode consiste à allouer un 'loop device' :
# losetup -Prf image.sda6.home.2019-07-22
- Visu du 'loop device' -f pour file system
# lsblk -f NAME FSTYPE LABEL UUID MOUNTPOINT sda ├─sda1 ntfs 7616AE0F16ADD103 ├─sda2 ntfs 985EA4E05EA4B900 ├─sda3 ├─sda5 btrfs SYSTEM 8062d387-20e4-4ad0-92cd-2087f55142d1 ├─sda6 btrfs DATA d4c14b15-8cda-41ee-b83d-71fa77b927d5 └─sda7 swap 1d410210-c509-4894-b010-cc9becb30bb1 sdb ├─sdb1 vfat RECOVERY 32EC-CB7F ├─sdb2 ntfs OS AAA6F0E3A6F0B0C5 ├─sdb3 ntfs LOGICIELS BC6652E266529D48 ├─sdb4 ├─sdb5 ntfs HOME_COMMUN 8CDE58D8DE58BC60 /media/home_commun ├─sdb6 swap 266a37d4-4cf9-4d8d-b8f2-1b671ceadfe1 ├─sdb7 ext4 74ddd380-7130-4399-b561-41124928cad0 / └─sdb8 ext4 836cf27d-d1cd-4daa-b688-7f7de6abc221 /home sdg └─sdg1 ntfs My_Passport 97E68384FF65B81B /media/jc/My_Passport sr0 loop0 btrfs DATA d4c14b15-8cda-41ee-b83d-71fa77b927d5 loop1 squashfs /snap/spotify/35 loop2 btrfs DATA d4c14b15-8cda-41ee-b83d-71fa77b927d5 loop3 squashfs /snap/core/7270 loop4 squashfs /snap/core/6964 loop5 squashfs /snap/spotify/36
- Montage de l'image de la partition
# mount -r /dev/loop0 /mnt/debian-home-sda6-img/
Exemple /dev/loop0 vers une clé usb :
# yes | btrfs restore -s -x -m -S -v -i -o /dev/loop0 /media/jc/USB/
Nouvelle stratégie de disque
Suite à ce crash, je décide de mettre en place une nouvelle stratégie de stockage sur le PC.
Ce PC portable accueil 2 disques :
- Le disque 1 contient:
- Une partition win7 pour les jeux
- Une partition debian système formatée en btrfs
- Une partition debian home formatée en btrfs
- un swap
- Le disque 2 contient actuellement le win7 d'origine, Ubuntu 16.04. Ce disque vas être démonté.
- Le nouveau disque 2 sera dédié archivage avec une seule partition btrfs :
- Clonage du disque 1 partion win7 vers le disque 2 avec dd
- Clonage du disque 1 partion système debian vers le disque 2 avec dd
- rsync des datas [/home] du disque 1 vers le disque 2
- Formaté en btrfs, le disque 2 aura des snapshots pour versionner les rsyn.
- NAS QNAP 4to
- Disque 2: image dd du win7 rsync vers le NAS.
- Disque 2: image dd du systèmes debian rsync vers le NAS.
- Disque 2 [/home] sera rsyn vers le NAS pour sortir les datas du portable. L'idéal serais de créer un nouveaux dossier horodaté à chaque rsync et de faire une rotation de ces dossiers horodatés pour générer un archivage efficace dans le temps. Les très ancien serait supprimés au profit des nouveaux arrivants :
Ca sent le script qui pique les yeux !
-DISQUE 1----------------- | win7 | debian | debian | | | / | /home | | ntfs | btrfs | btrfs | -------------------------- | | | dd dd rsync | | | v v v -DISQUE 2----------------- | backup + snapshot | | btrfs |---------------- -------------------------- | | | rsync rsync | | v v -NAS QNAP----------------- -DISK EXTERNE------------- | 4to ext4 | | 750go | | Rotation dossiers horo. | | Dock station usb3 | -------------------------- --------------------------
Préparation disque 2
Suppression de la partition existante avec fdisk:
Visu des disques avec fdisk -l :
Formatage du disque 2 avec mkfs.btrfs :
Visu des disques avec fdisk -l :
Visu des disque avec btrfs filesystem show :
Montage du disque 2 :
Restauration sda6 vers disque2
Restauration avec snapshot
Restauration sans snapshot
Restauration image en Disque2 vers Disque1 sda6
- On affecte sda6 à /home :
# mount -t btrfs /dev/sda6 /home
- On reprend le disque sauvegarde avec l'image de sda6 faite au début.
- Ce disque est monté dans le 2ème logement de pc portable, ce qui optimise la vitesse de transfert : Pas d'adaptateur USB.
- On monte ce disque2 vue comme sdb1 :
# mount -t ntfs /dev/sdb1 /media/jc/WD-1to/
- On applique la méthode 2 du montage d'image (vue plus haut) avec assignation de /dev/loop0.
DISQUE1 sda5 -> DISQUE2
$ sudo time dd if=/dev/sda5 of=/media/user/BACKUP/sda5-SYSTEM/sda5-debian-system-2019-08-12_before-upgrade-debian-10.0.img bs=4096 conv=notrunc,noerror status=progress 49643884544 bytes (50 GB, 46 GiB) copied, 105 s, 473 MB/s 12206848+0 records in 12206848+0 records out 49999249408 bytes (50 GB, 47 GiB) copied, 106.681 s, 469 MB/s 6.21user 71.90system 1:46.71elapsed 73%CPU (0avgtext+0avgdata 1980maxresident)k 97654856inputs+97654912outputs (5major+96minor)pagefaults 0swaps
synchro rsync DISQUE1/DATA -> DISQUE2/BACKUP
$ rsync -avp --delete jc/ /media/jc/BACKUP/jc/ [...] sent 183,607,789,776 bytes received 10,932,404 bytes 223,244,647.03 bytes/sec total size is 440,659,881,860 speedup is 2.40
après suppression des VMs :
$ rsync -avp --delete jc/ /media/jc/BACKUP/jc/ [...] deleting VirtualBox VMs/TIA PORTAL V14 SP1 UP7 (W7 SP1 64b)/Logs/VBox.log.3 deleting VirtualBox VMs/TIA PORTAL V14 SP1 UP7 (W7 SP1 64b)/Logs/VBox.log.2 deleting VirtualBox VMs/TIA PORTAL V14 SP1 UP7 (W7 SP1 64b)/Logs/VBox.log.1 deleting VirtualBox VMs/TIA PORTAL V14 SP1 UP7 (W7 SP1 64b)/Logs/VBox.log deleting VirtualBox VMs/TIA PORTAL V14 SP1 UP7 (W7 SP1 64b)/Logs/ deleting VirtualBox VMs/TIA PORTAL V14 SP1 UP7 (W7 SP1 64b)/TIA PORTAL V14 SP1 UP7 (W7 SP1 64b)_2019-03-05-disk001.vmdk deleting VirtualBox VMs/TIA PORTAL V14 SP1 UP7 (W7 SP1 64b)/TIA PORTAL V14 SP1 UP7 (W7 SP1 64b).vbox-prev deleting VirtualBox VMs/TIA PORTAL V14 SP1 UP7 (W7 SP1 64b)/TIA PORTAL V14 SP1 UP7 (W7 SP1 64b).vbox deleting VirtualBox VMs/TIA PORTAL V14 SP1 UP7 (W7 SP1 64b)/ deleting VirtualBox VMs/Debian Stretch 9.5 non-free/Logs/VBox.log.3 deleting VirtualBox VMs/Debian Stretch 9.5 non-free/Logs/VBox.log.2 deleting VirtualBox VMs/Debian Stretch 9.5 non-free/Logs/VBox.log.1 deleting VirtualBox VMs/Debian Stretch 9.5 non-free/Logs/VBox.log deleting VirtualBox VMs/Debian Stretch 9.5 non-free/Logs/ deleting VirtualBox VMs/Debian Stretch 9.5 non-free/Debian Stretch 9.5 non-free_2018-11-17a-disk002.vmdk deleting VirtualBox VMs/Debian Stretch 9.5 non-free/Debian Stretch 9.5 non-free.vbox-prev deleting VirtualBox VMs/Debian Stretch 9.5 non-free/Debian Stretch 9.5 non-free.vbox deleting VirtualBox VMs/Debian Stretch 9.5 non-free/ deleting VirtualBox VMs/Debian Stretch 9.5 Docker/Logs/VBox.log deleting VirtualBox VMs/Debian Stretch 9.5 Docker/Logs/ deleting VirtualBox VMs/Debian Stretch 9.5 Docker/Debian Stretch 9.5 Docker.vbox-prev deleting VirtualBox VMs/Debian Stretch 9.5 Docker/Debian Stretch 9.5 Docker.vbox deleting VirtualBox VMs/Debian Stretch 9.5 Docker/Debian Stretch 9.5 Docker-disk1.vmdk deleting VirtualBox VMs/Debian Stretch 9.5 Docker/ VirtualBox VMs/ sent 65,584,754 bytes received 305,898 bytes 630,532.56 bytes/sec total size is 377,256,182,225 speedup is 5,725.49
DISQUE2 -> NAS QNAP
$ rsync -avp --delete /media/jc/BACKUP/jc/ jc@192.168.1.202:~/rsync/jc-portable/jc/ [...] sent 377,463,892,679 bytes received 33,834,990 bytes 11,936,120.90 bytes/sec total size is 377,256,182,225 speedup is 1.00 rsync error: some files/attrs were not transferred (see previous errors) (code 23) at main.c(1196) [sender=3.1.2]
Variante :
$ time rsync -a --delete --progress /media/jc/BACKUP/sda6-DATA/jc/ jc@192.168.1.202:~/rsync/jc-portable/jc/ sent 10,877,075,811 bytes received 2,937,754 bytes 6,338,487.37 bytes/sec total size is 387,710,351,768 speedup is 35.64 rsync error: some files/attrs were not transferred (see previous errors) (code 23) at main.c(1196) [sender=3.1.2] real 28m36,483s user 3m46,664s sys 2m33,300s
NAS QNAP -> Disk1 DATA
Exemple de restauration de données depuis un NAS vers le dossier user, avec un fichier d'exclusion de dossier :
$ pwd /home/jc $ time rsync -a --progress --exclude-from=rsync-exclude.txt jc@192.168.1.202:~/rsync/jc-portable/jc/ ~ [...] real 238m37,763s user 78m5,333s sys 45m18,364s
Avec rsync-exclude.txt
.ICEauthority .Xauthority .bash_history .bash_logout .bashrc .cache/ .config/ .dbus/ .directory .dmrc .gnupg/ .java/ .kde/ .lesshst .local/ .mozilla/ .nv/ .nvidia-settings-rc .pki/ .profile .pulse-cookie .python_history .selected_editor .steam/ .steampath@ .steampid@ .xfce4-session.verbose-log .xfce4-session.verbose-log.last .xsession-errors .xsession-errors.old