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:~$