# Réparation du bordel de deneb ## installation de Emacs - ça c'est pour moi (!!) Tu pourras le virer après. ``` br@deneb:~$ sudo apt-get install emacs-nox ``` ## État des lieux Les 2 disques et partitions : ``` br@deneb:~$ lsblk.sh NAME TYPE FSTYPE MOUNTPOINT PARTLABEL LABEL SIZE RO UUID PARTUUID sda disk 465.8G 0 ├─sda1 part ext4 / 28.6G 0 33059c17-761e-4c5f-ab9d-035976e0bfc6 b827da31-01 ├─sda2 part 1K 0 b827da31-02 ├─sda5 part swap [SWAP] 1.9G 0 e6be26ca-411c-43e4-aa11-ae03af96720c b827da31-05 └─sda6 part ext4 /export 435.2G 0 91e5624c-de87-49ac-97b9-2f0fa618609f b827da31-06 sdb disk 149.1G 0 ├─sdb1 part 1K 0 6facf23c-01 ├─sdb5 part ext4 /systemXena 18.6G 0 346332fb-c6a6-4772-ac7c-91e3adf5c790 6facf23c-05 ├─sdb6 part swap [SWAP] 2.3G 0 67bbbe64-e52f-44ee-b9ea-d8881247ffb5 6facf23c-06 └─sdb7 part ext4 /backup-damia 128.1G 0 6d2994d9-2209-4360-b27d-b73f06d86c87 6facf23c-07 sr0 rom 1024M 0 ``` Pour simplifier les fstab, ainsi que la reconnaissance des disques, nous allons ajouter des labels à chaque partition. ## Nommage des partitions (labels) Ajout d'un label pour les partitions du premier disque, avec le suffixe "1" (root1, export1, swap1) : ``` br@deneb:~$ sudo e2label /dev/sda1 root1 br@deneb:~$ sudo swaplabel -L swap1 /dev/sda5 br@deneb:~$ sudo e2label /dev/sda6 export1 ``` Ajout d'un label pour les partitions du second disque, avec le suffixe "2" : ``` br@deneb:~$ sudo e2label /dev/sdb7 export2 br@deneb:~$ sudo e2label /dev/sdb5 root2 br@deneb:~$ sudo swaplabel -L swap2 /dev/sdb6 ``` Nouvelle situation : ``` br@deneb:~$ !lsb lsblk.sh NAME TYPE FSTYPE MOUNTPOINT PARTLABEL LABEL SIZE RO UUID PARTUUID sda disk 465.8G 0 ├─sda1 part ext4 / root1 28.6G 0 33059c17-761e-4c5f-ab9d-035976e0bfc6 b827da31-01 ├─sda2 part 1K 0 b827da31-02 ├─sda5 part swap [SWAP] swap1 1.9G 0 e6be26ca-411c-43e4-aa11-ae03af96720c b827da31-05 └─sda6 part ext4 /export export1 435.2G 0 91e5624c-de87-49ac-97b9-2f0fa618609f b827da31-06 sdb disk 149.1G 0 ├─sdb1 part 1K 0 6facf23c-01 ├─sdb5 part ext4 /systemXena root2 18.6G 0 346332fb-c6a6-4772-ac7c-91e3adf5c790 6facf23c-05 ├─sdb6 part swap [SWAP] swap2 2.3G 0 67bbbe64-e52f-44ee-b9ea-d8881247ffb5 6facf23c-06 └─sdb7 part ext4 /backup-damia export2 128.1G 0 6d2994d9-2209-4360-b27d-b73f06d86c87 6facf23c-07 sr0 rom 1024M 0 ``` ## Correction du fstab du second disque On ne va pas monter ici les partitions du premier disque (losqu'on boot sur le second disque), on verra ca plus bas avec l'`automounter` (`autofs`). ``` br@deneb:~/.emacs.d$ sudo emacs /systemXena/etc/fstab br@deneb:~/.emacs.d$ cat /systemXena/etc/fstab # /etc/fstab: static file system information. # # Use 'blkid' to print the universally unique identifier for a # device; this may be used with UUID= as a more robust way to name devices # that works even if disks are added and removed. See fstab(5). # # LABEL=root2 / ext4 errors=remount-ro 0 1 LABEL=export2 /export ext4 defaults 0 2 # swap was on /dev/sda2 during installation LABEL=swap2 none swap nofail,sw,pri=0 0 0 LABEL=swap1 none swap nofail,sw,pri=0 0 0 ``` ## Ajustement de /home sur le second disque (Xena) On déplace `/systemXena/home` dans `/backup-damia` (le futur `/export`). ``` br@deneb:/backup-damia$ sudo mv /systemXena/home/ /backup-damia/ ``` Et on fait pointer `/systemXena/home` vers `./export/home` : ``` br@deneb:~$ cd /systemXena/ br@deneb:/systemXena$ ln -s ./export/home br@deneb:/systemXena$ ls -l home lrwxrwxrwx 1 root root 13 Jun 21 22:45 home -> ./export/home ``` Maintenant, on devrait pouvoir booter sur Xena. ## autofs ### Installation ``` $ sudo apt-get install autofs ``` ### Setup Nous allons utiliser les labels pour monter automatiquement les partitions locales, si on essaie d'y accéder. Les partitions seront automatiquement démontées 1 minute après le dernier accès. #### /etc/auto.master Fichier `/etc/auto.master`. C'est le fichier principal. On vire tout ce qui existe, et on ajoute la ligne : ``` /mnt/hd /etc/auto.hd --timeout 60 --ghost ``` Ça veut dire que l'automounter sera actif sur `/mnt/hd`, contrôlé par la configuration décrite dans `/etc/auto.hd`. On précise aussi le timeout de démontage (60 secondes), et l'option `--ghost` qui permettra de voir les répertoires possibles dans `/mnt/hd`, même s'ils ne sont pas montés. L'option `--ghost` n'aura aucun effet ici,car nous utilisons un _wildcard_ (`*`) dans `/etc/auto.hd`. #### /etc/auto.hd On y met : ``` * -fstype=auto,defaults :LABEL=& ``` On dit que pour tous les point de montage `*` (dans /mnt/hd), on effectue un montage avec les options par défaut, et que la source du montage est une partition de label indentique à `*`. Par exemple, si une partition a pour label `root1`, elle sera montée dans `/mnt/hd/root1` dès lors qu'on accède à ce répertoire. Puisque nous utilisons `*` pour cette map, l'option `--ghost` n'aura aucun effet. #### Redémarrage de autofs ``` br@deneb:/mnt$ sudo systemctl restart autofs ``` Voilà. C'est fini. Testons: ``` br@deneb:~$ cd /mnt br@deneb:/mnt$ ls -l hd total 0 br@deneb:/mnt$ ls hd/root2 bin/ export/ initrd.img.old@ mnt/ sbin/ tmp/ boot/ export1/ lib/ opt/ snap/ usr/ cdrom/ export2/ lib64/ proc/ srv/ var/ dev/ home@ lost+found/ root/ sys/ vmlinuz@ etc/ initrd.img@ media/ run/ system1Xenal/ vmlinuz.old@ br@deneb:/mnt$ ls -l hd total 0 drwxr-xr-x 2 root root 0 Jun 22 10:26 root2/ br@deneb:/mnt$ df.sh Filesystem 1K-blocks Used Available Use% Mounted on /dev/sda1 29396988 19004928 8875724 69% / /dev/sdb7 132076960 101520 125243256 1% /backup-damia /dev/sdb5 19091584 5477272 12621444 31% /systemXena /dev/sda6 448172912 316800084 108537220 75% /export /dev/sdb5 19091584 5477272 12621444 31% /mnt/hd/root2 br@deneb:/mnt$ sleep 60 br@deneb:/mnt$ df.sh Filesystem 1K-blocks Used Available Use% Mounted on /dev/sda1 29396988 19004928 8875724 69% / /dev/sdb7 132076960 101520 125243256 1% /backup-damia /dev/sdb5 19091584 5477272 12621444 31% /systemXena /dev/sda6 448172912 316800108 108537196 75% /export ``` #### Création de liens dans /mnt pour faciliter l'accès aux partitions ``` br@deneb:/mnt$ for i in {root,export}{1,2}; do > sudo ln -s hd/$i > done br@deneb:/mnt$ ls -l total 0 lrwxrwxrwx 1 root root 10 Jun 22 10:33 export1 -> hd/export1/ lrwxrwxrwx 1 root root 10 Jun 22 10:33 export2 -> hd/export2/ drwxr-xr-x 6 root root 0 Jun 22 10:33 hd/ lrwxrwxrwx 1 root root 8 Jun 22 10:33 root1 -> hd/root1/ lrwxrwxrwx 1 root root 8 Jun 22 10:33 root2 -> hd/root2/ ``` ## Nettoyage du fstab, et préparation de la duplication de disque sda -> sdb On vire les montages en dur, hormis `/`, `/export`, et les partitions de swap. On en profite pour remplacer `UUID=` par `LABEL=`. Il faut que nous ayons un fstab prêt à l'emploi sur le disque source (`sda`), que nous activerons lors de la copie sur sdb ``` br@deneb:/mnt$ sudo emacs /etc/fstab br@deneb:/mnt$ cat /etc/fstab # /etc/fstab: static file system information. # # Use 'blkid' to print the universally unique identifier for a # device; this may be used with UUID= as a more robust way to name devices # that works even if disks are added and removed. See fstab(5). # # ############ Une seule de ces deux sections doit être active ########## boot sur le premier disque LABEL=root1 / ext4 errors=remount-ro 0 1 LABEL=export1 /export ext4 defaults 0 2 ########## boot sur le second disque #LABEL=root2 / ext4 errors=remount-ro 0 1 #LABEL=export2 /export ext4 defaults 0 2 # swap LABEL=swap1 none swap nofail,sw,pri=0 0 0 LABEL=swap2 none swap nofail,sw,pri=0 0 0 ``` Maintenant on prépare un fstab utilisable quand on boote sur `sdb` dans le `/etc` de `sda`. ``` br@deneb:/mnt$ cd /etc br@deneb:/etc$ sudo ln fstab fstab.root1 br@deneb:/etc$ sudo cp fstab fstab.root2 br@deneb:/etc$ sudo emacs fstab.root2 br@deneb:/etc$ ls -l fst* -rw-r--r-- 2 root root 916 Jun 22 10:50 fstab -rw-r--r-- 2 root root 916 Jun 22 10:50 fstab.root1 -rw-r--r-- 1 root root 916 Jun 22 10:49 fstab.root2 br@deneb:/etc$ cat fstab.root2 # /etc/fstab: static file system information. # # Use 'blkid' to print the universally unique identifier for a # device; this may be used with UUID= as a more robust way to name devices # that works even if disks are added and removed. See fstab(5). # # ############ Une seule de ces deux sections doit être active ########## boot sur le premier disque #LABEL=root1 / ext4 errors=remount-ro 0 1 #LABEL=export1 /export ext4 defaults 0 2 ########## boot sur le second disque LABEL=root2 / ext4 errors=remount-ro 0 1 LABEL=export2 /export ext4 defaults 0 2 # swap LABEL=swap2 none swap nofail,sw,pri=0 0 0 LABEL=swap1 none swap nofail,sw,pri=0 0 0 ``` ## Création de filtres pour le script de copie de disques __Note__: Le script de duplication de disque est sur mon [serveur gitea](https://git.bodiccea.tk/bruno/Tools/src/branch/master/bash/dup-live-disk.sh) et sur [github](https://github.com/braoult/Tools/blob/master/bash/dup-live-disk.sh). #### partition root ``` br@deneb:~$ cat /.rsync-disk-copy - /dev/* - /media/* - /lost+found/* - /proc/* - /run/* - /srv/* - /sys/* - /tmp/* ``` #### partition export Le home de patrick est gros, il ne passera pas sur `sdb`. Il faudrait trouver ce qui prend de la place : ``` br@deneb:~$ cd ~patrick br@deneb:/home/patrick$ sudo du -sm * | sort -n [...] 1052 Documents 1535 Famille_llgal 2208 Divers 2238 Maildir 2591 Ancetres 4424 bm39 8194 Bureau 13876 ml.faivre 13979 Images_llgal 24505 Musique 223081 Vidéos ``` Pour exclure des répertoires de la copie, il faudrait créer un fichier `.rsync-disk-copy` dans `~patrick` ( __ça c'est le boulot de Patrick__), avec les répertoires à exclure de la copie. Par exemple, en virant tout ce qui dépasse 10G : ``` - /ml.faivre/ - /Images_llgal/ - /Musique/ - /Vidéos/ ``` Il faudrait être certain que la taille restante à copier ne dépasse pas les 80%-90% de la partition `/export` du disque cible. Avec ces 4 répertoires on "économise" 275Gb, donc on pourrait commencer comme ça et affiner par la suite pour copier plus de bordel sur le second disque ;-) ## Reformatage de sdb Il est à noter que la partition `root` de `sdb` est trop petite. Donc il faudrait reformater totalement `sdb`. __Ça c'est aussi le boulot de Patrick__ : ``` root2: 30 Gb (ext4) swap2: 3 ou 4 Gb (swap) export2: le reste, c.a.d. 110-115 Gb (ext4) ``` Si tu veux, au lieu d'utiliser `gparted`, tu pourrais le faire en ligne de commande. Voici un script qui fera ça. Il crée un disque GPT avec une _protective MBR_, avec, dans l'ordre: 1 MiB pour `grub`, 30 GiB pour `/`, 4 GiB pour le `swap`, le reste pour `/export`. Les GUIDs sont aussi ré-initialisés, et des PARTLABEL/LABELS ajoutés. On pourrait virer la partie `partlabel` (lignes `--change-name=`), on ne s'en servira pas ici. ``` bash #!/usr/bin/env bash set -e declare -i PARTCODE=2 declare DEVICE=/dev/sdb swapoff -L "swap$PARTCODE" sgdisk \ --clear \ --new 1::+1M \ --typecode=1:ef02 \ --change-name=1:"grub $PARTCODE" \ --new 2::+30G \ --typecode=2:8300 \ --change-name=2:"ext4 root $PARTCODE" \ --new 3::+4G \ --typecode=3:8200 \ --change-name=3:"swap $PARTCODE" \ --new 4::-0 \ --typecode=4:8300 \ --change-name=4:"ext4 export $PARTCODE" \ --randomize-guids \ --mbrtogpt \ "$DEVICE" partprobe wipefs -a "${DEVICE}1" mkfs.ext4 -L "root$PARTCODE" "${DEVICE}2" mkswap -L "swap$PARTCODE" "${DEVICE}3" mkfs.ext4 -L "export$PARTCODE" "${DEVICE}4" ``` Le résultat du script ci-dessus a été : ``` patrick@deneb:~/bin$ sudo bash format_disque2.sh [sudo] Mot de passe de patrick : Setting name! partNum is 0 Setting name! partNum is 1 Setting name! partNum is 2 Setting name! partNum is 3 Warning: The kernel is still using the old partition table. The new table will be used at the next reboot or after you run partprobe(8) or kpartx(8) The operation has completed successfully. /dev/sdb1 : 2 octets ont été effacés à l'index 0x00000438 (ext4) : 53 ef mke2fs 1.45.5 (07-Jan-2020) En train de créer un système de fichiers avec 7864320 4k blocs et 1966080 i-noeuds. UUID de système de fichiers=8cc4aebd-8a8d-4236-9a4b-d0ece4892629 Superblocs de secours stockés sur les blocs : 32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208, 4096000 Allocation des tables de groupe : complété Écriture des tables d'i-noeuds : complété Création du journal (32768 blocs) : complété Écriture des superblocs et de l'information de comptabilité du système de fichiers : complété Configure l'espace d'échange (swap) en version 1, taille = 4 GiB (4294963200 octets) LABEL=swap2, UUID=22a00dae-e72a-4d05-a630-d678661d8a7f mke2fs 1.45.5 (07-Jan-2020) En train de créer un système de fichiers avec 30159313 4k blocs et 7544832 i-noeuds. UUID de système de fichiers=da2019e2-8768-4963-898f-f0834e5cd52b Superblocs de secours stockés sur les blocs : 32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208, 4096000, 7962624, 11239424, 20480000, 23887872 Allocation des tables de groupe : complété Écriture des tables d'i-noeuds : complété Création du journal (131072 blocs) : complété Écriture des superblocs et de l'information de comptabilité du système de fichiers : complété ``` Et la nouvelle configuration des disques : ``` br@deneb:/$ lsblk.sh NAME TYPE FSTYPE MOUNTPOINT PARTLABEL LABEL SIZE RO UUID PARTUUID sda disk 465.8G 0 ├─sda1 part ext4 / root1 28.6G 0 33059c17-761e-4c5f-ab9d-035976e0bfc6 b827da31-01 ├─sda2 part 1K 0 b827da31-02 ├─sda5 part swap [SWAP] swap1 1.9G 0 e6be26ca-411c-43e4-aa11-ae03af96720c b827da31-05 └─sda6 part ext4 /export export1 435.2G 0 91e5624c-de87-49ac-97b9-2f0fa618609f b827da31-06 sdb disk 149.1G 0 ├─sdb1 part grub 2 1M 0 05050503-9504-4e22-9a94-56af02dbe811 ├─sdb2 part ext4 /mnt/hd/root2 ext4 root 2 root2 30G 0 8cc4aebd-8a8d-4236-9a4b-d0ece4892629 7f049ffd-31a6-4429-a10a-764647f345a4 ├─sdb3 part swap swap 2 swap2 4G 0 22a00dae-e72a-4d05-a630-d678661d8a7f 59d51ca0-010c-4d09-a98b-6081a4a12c42 └─sdb4 part ext4 ext4 export 2 export2 115G 0 da2019e2-8768-4963-898f-f0834e5cd52b fb2f7577-d8d4-41ae-98bc-dee824fd8d7f sr0 rom 1024M 0 ``` ## Copie du disque sda vers sdb Récupérer le script sur mon [serveur gitea](https://git.bodiccea.tk/bruno/Tools/src/branch/master/bash/dup-live-disk.sh) ou sur [github](https://github.com/braoult/Tools/blob/master/bash/dup-live-disk.sh). ### Test du script en dry run Patrick: Lancer la commande `sudo ./dup-live-disk.sh --dry-run sdb |& tee /tmp/dry-run.txt`. Résultat : ``` br@deneb:~$ cat /tmp/dry-run.txt found LABEL=root1 DEV=/dev/sda1 FSTYPE=ext4 found LABEL=swap1 DEV=/dev/sda5 FSTYPE=swap found LABEL=export1 DEV=/dev/sda6 FSTYPE=ext4 rootlabel=root maybe=root2 Found destination root label: root2 Looking for [root2] label : DEV=/dev/sdb2 DISK=/dev/sdb FSTYPE=ext4 Looking for [swap2] label : DEV=/dev/sdb3 DISK=/dev/sdb FSTYPE=swap Looking for [export2] label : DEV=/dev/sdb4 DISK=/dev/sdb FSTYPE=ext4 DEV1 DEV2 LABEL1 LABEL2 FS1 FS2 SVALID? DVALID? ROOT /dev/sda1 /dev/sdb2 root1 root2 ext4 ext4 y y * /dev/sda5 /dev/sdb3 swap1 swap2 swap swap n n /dev/sda6 /dev/sdb4 export1 export2 ext4 ext4 y y Info: Found target fstab (fstab.root2) in SRC root partition (/mnt/root1/etc). *** Copy /mnt/root1/ to /mnt/root2 [y/n/q] ? yes MariaDB/MySQL is inactive. dry-run: rsync -axH --filter=dir-merge .rsync-disk-copy --delete --delete-excluded /mnt/root1/ /mnt/root2 *** Link /mnt/root2/etc/fstab.root2 to /mnt/root2/etc/fstab [y/n/q] ? yes dry-run: ln -f /mnt/root2/etc/fstab.root2 /mnt/root2/etc/fstab skipping label swap *** Copy /mnt/export1/ to /mnt/export2 [y/n/q] ? yes MariaDB/MySQL is inactive. dry-run: rsync -axH --filter=dir-merge .rsync-disk-copy --delete --delete-excluded /mnt/export1/ /mnt/export2 *** install grub on /dev/sdb (root label: root2) [y/n/q] ? yes installing grub on /dev/sdb... dry-run: mount -o bind /sys /mnt/root2/sys dry-run: mount -o bind /proc /mnt/root2/proc dry-run: mount -o bind /dev /mnt/root2/dev dry-run: chroot /mnt/root2 update-grub dry-run: chroot /mnt/root2 grub-install /dev/sdb ``` ### Recopie proprement dite Patrick: Lancer la commande `sudo dup-live-disk.sh --yes sdb |& tee /tmp/we-go.txt` Cela donne : ``` br@deneb:~$ cat /tmp/we-go.txt found LABEL=root1 DEV=/dev/sda1 FSTYPE=ext4 found LABEL=swap1 DEV=/dev/sda5 FSTYPE=swap found LABEL=export1 DEV=/dev/sda6 FSTYPE=ext4 rootlabel=root maybe=root2 Found destination root label: root2 Looking for [root2] label : DEV=/dev/sdb2 DISK=/dev/sdb FSTYPE=ext4 Looking for [swap2] label : DEV=/dev/sdb3 DISK=/dev/sdb FSTYPE=swap Looking for [export2] label : DEV=/dev/sdb4 DISK=/dev/sdb FSTYPE=ext4 DEV1 DEV2 LABEL1 LABEL2 FS1 FS2 SVALID? DVALID? ROOT /dev/sda1 /dev/sdb2 root1 root2 ext4 ext4 y y * /dev/sda5 /dev/sdb3 swap1 swap2 swap swap n n /dev/sda6 /dev/sdb4 export1 export2 ext4 ext4 y y Info: Found target fstab (fstab.root2) in SRC root partition (/mnt/root1/etc). *** Copy /mnt/root1/ to /mnt/root2 [y/n/q] ? yes MariaDB/MySQL is inactive. rsync -axH --filter=dir-merge .rsync-disk-copy --delete --delete-excluded /mnt/root1/ /mnt/root2 *** Link /mnt/root2/etc/fstab.root2 to /mnt/root2/etc/fstab [y/n/q] ? yes ln -f /mnt/root2/etc/fstab.root2 /mnt/root2/etc/fstab skipping label swap *** Copy /mnt/export1/ to /mnt/export2 [y/n/q] ? yes MariaDB/MySQL is inactive. rsync -axH --filter=dir-merge .rsync-disk-copy --delete --delete-excluded /mnt/export1/ /mnt/export2 *** install grub on /dev/sdb (root label: root2) [y/n/q] ? yes installing grub on /dev/sdb... mount -o bind /sys /mnt/root2/sys mount -o bind /proc /mnt/root2/proc mount -o bind /dev /mnt/root2/dev chroot /mnt/root2 update-grub Sourcing file `/etc/default/grub' Sourcing file `/etc/default/grub.d/init-select.cfg' Création du fichier de configuration GRUB… Image Linux trouvée : /boot/vmlinuz-5.4.0-120-generic Image mémoire initiale trouvée : /boot/initrd.img-5.4.0-120-generic Image Linux trouvée : /boot/vmlinuz-5.4.0-117-generic Image mémoire initiale trouvée : /boot/initrd.img-5.4.0-117-generic Image Linux trouvée : /boot/vmlinuz-5.4.0-77-generic Image mémoire initiale trouvée : /boot/initrd.img-5.4.0-77-generic Found memtest86+ image: /boot/memtest86+.elf Found memtest86+ image: /boot/memtest86+.bin Ubuntu 20.04.4 LTS (20.04) trouvé sur /dev/sda1 fait chroot /mnt/root2 grub-install /dev/sdb Installation pour la plate-forme i386-pc. Installation terminée, sans erreur. umount /mnt/root2/dev umount /mnt/root2/proc umount /mnt/root2/sys ```