Files
test-repo/bordel-a-patrick.md
2022-06-24 02:05:19 +02:00

20 KiB

Réparation du bordel de deneb

installation de Emacs (!!)

br@deneb:~$ sudo apt-get install emacs-nox

Tu pourras le virer après.

État des lieux

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

Nommage des disques (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 ("Xena"), 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, 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).
#
# <file system> <mount point>   <type>  <options>       <dump>  <pass>
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).
#
# <file system> <mount point>   <type>  <options>       <dump>  <pass>

############ Une seule de ces deux sections doit être active

########## boot sur le second 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).
#
# <file system> <mount point>   <type>  <options>       <dump>  <pass>

############ Une seule de ces deux sections doit être active

########## boot sur le second 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

br@deneb:/etc$ diff fstab.root{1,2}
12,13c12,13
< LABEL=root1    /               ext4    errors=remount-ro        0       1
< LABEL=export1  /export         ext4    defaults                 0       2
---
> #LABEL=root1    /               ext4    errors=remount-ro        0       1
> #LABEL=export1  /export         ext4    defaults                 0       2
16,17c16,17
< #LABEL=root2    /               ext4    errors=remount-ro        0       1
< #LABEL=export2  /export         ext4    defaults                 0       2
---
> LABEL=root2    /               ext4    errors=remount-ro        0       1
> LABEL=export2  /export         ext4    defaults                 0       2
20d19
< LABEL=swap1    none            swap    nofail,sw,pri=0          0       0
21a21
> 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 et sur github.

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.

#!/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 ou sur github.

Test du script en dry run

Patrick: Lancer la commande sudo ./dup-live-disk.sh --dry-run sdb |& tee /tmp/dry-run.txt.

Recopie proprement dite

Patrick: Lancer la commande sudo dup-live-disk.sh --yes sdb |& tee /tmp/we-go.txt.

Output:

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
***** rsync status=0

*** 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
***** rsync status=0

*** 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
br@deneb:~$