Réinstaller intégralement Debian en LVM miroir

Bonjour,
À la suite des déboires précédents, je choisi votre proposition de sages, de tout réinstaller plus intelligemment.

Je dispose donc de

  • 2 SSD identiques de 3.6T
  • une sauvegarde du système par timeshift
  • une sauvegarde des données par rsync
  • un clef USB (ventoy, merci à celui d’entre vous qui me l’a fait découvrir) avec une image debinstall de bookworm
  • et de vos conseils passés et sans doute à venir

J’envisage donc (avec l’installeur de bookworm) de faire d’abord une installation sur 1 seul SSD (/dev/nvme0) puis de créer le miroir avec le 2e SSD (/dev/nvme1) lorsque tout sera en ordre.

(I) Je suppose que l’installeur se chargera de ce que j’envisage ici:
1 partitionnement UEFI + 1 partition de tout l’espace restant: /dev/nvme0n1
2 pvcreate /dev/nvme0n1
3 vgcreate SSD0 /dev/nvme0n1
pour retrouver mes marques (qui me conviennent):
4 lvcreate -nroot -L100G SSD0
lvcreate -nlocal -L40G SSD0
lvcreate -nwork -L1500G SSD0
5 Formater ces 3 volumes logiques en ext4 (j’abandonne xfs sur vos conseils pour les données de travail)
6 éditer /etc/fstab pour monter local et work

Terminer l’installation sur ces bases (est-ce correcte?)

(II) Restaurer mon système et mes données précédentes:
1 Restaurer le système avec timeshift du 19 ou du 20/12/2024 (le problème est apparu le 21)
2 Restaurer les données de travail avec rsync
3 Nettoyer la partition racine anormalement encombrée (72 G, voir la discussion précédente)

(III) créer le miroir
1 Copier la partition UEFI
2 formater tout l’espace restant
3 créer le miroir

Pensez-vous que j’ai fait des erreurs, des oublis, notamment que l’installeur se chargera de tout ce que j’ai préciser dans la première partie (I)?

Discussion précédente:

Parle plutôt de LVM raid, car miroir peut prêter à confusion même si le mot semble similaire et que la commande lvm puisse l’utiliser. Miroir ça signifie RAID1 en fait.

ne fait pas de multiples VG, ici ça ne servira à rien sauf à complexifier ton installation.

Tu fait une partition EFI et une parition LVM avec ce qui reste du premier disque et le deuxième disque.

ensuite tu créées un VG avec tes deux PV.
Ensuite tu vas créer des LVM RAID en utilisant la commande lvcreate --mirrors (identique à --type raid1 / --type mirror qui est donc implicite).
Le fait de créer ta partition ainsi va automatiquement créer un miroir de ta partition.

Tu n’as donc pas à faire manuellement deux partitions pour quelles soient en miroir. Et malheureusement, l’installateur Debian ne sait pas faire.

Pour la commande de création:

lvcreate --mirrors 1 --type raid1 -l 100%FREE --nosync -n <nom du lvm> raid0vg0

–mirrors 1 c’est le nombre de miroir de la partition
–nosync pour éviter la synchronisation à la création du miroir, mais les données seront ensuite synchronisées. Ça évite de faire une longue synchronisation d’une partition vide.

N’oublie pas que le principe de faire du miroir divise ton espace de stockage par 2.

Tu peux utiliser le how tro Raid1 with LVM from scratch - Gentoo wiki
Mais attention c’est du gentoo, donc il faut aussi adapter.

Avec du lvm raid1 il faut s’assurer que chaque miroir se trouve sur un PV différent, car sinon ça ne sert à rien :wink:

Et d’une façon plus générale, on utilise le RAID1 pour un système pour s’assurer que celui-ci peut redémarrer en cas de défaillance.
Les données sont rarement en RAID1 mais plutôt en RAID5 et plus. Si tu as une synchronisation temps réel avec un stockage externe, le mettre en RAID1 n’est pas vraiment utile.
Si tu devais utiliser une parition en RAID1 et une autre en RAID5 alors il serait nécessaire de faire 2 VG, un avec deux PV, un avec 3 PV (min).

Les partition sont à la fois fonction de leur utilisation mais aussi de leurs options (noexec, nosuid, nodev entre autres) et de la sécurité que l’on veut y appliquer (c’est pour ça par exemple que je sépare /var de /, et dans /var je sépare /var/log et /var/log/audit en cas de saturation des logs).
Ta partition /home/work n’est pas claire; work est un user ou pas?
Il vaut mieux que tu fasse une partition des données utilisateurs globale dans ce cas => /home

Pour /usr/local, comment vas-tu l’utiliser? Cette parition est normallement là pour les application manuellement installées/compilées. Mais il vaut toujours mieux utiliser les applications packagées par Debian (en backport si nécessaire).
Sur mon installation je n’ai que VirtualBox qui a mis quelque chose dans cette arborescence. Je ne suis donc pas certain que faire une partition sur celle-ci soit pertinente.

A ta place je ne ferais certainement pas du lvm mirror je partirai sur un bon vieux raid 1 à l’aide de mdadm avec du LVM pour la souplesse à l’intérieur.

Au plus simple depuis l’installateur Debian je fais un montage raid 1 de deux partitions sur chaque disque auquel j’ajoute la partition uefi à créer sur chacun des disques.

Première partition pour /boot, la seconde sera le PV du LVM.
Création ensuite du groupe de volume avec tes volumes logiques comme tu le souhaites.

Ton raid s’occupera de maintenir tes deux partitionnement identiques, et tu n’a finalement qu’un seul LVM à gérer avec un seul groupe de volume … pour la même assurance en cas de perte de disque.

Dans la finalité tu devrais avoir :

/dev/nvme0n1p1 efi 50Mo efi
/dev/nvme1n1p1 efi 50Mo efi
/dev/md0 → nvme0n1p2 raid 1Go /boot
/dev/md0 → nvme1n1p2 raid 1Go /boot
/dev/md1 → nvme0n1p1 raid 100% PV système + VG système + 4 volumes logiques (swap,/,/local,/work)
/dev/md1 → nvme1n1p1 raid 100% PV système + VG système + 4 volumes logiques (swap,/,/local,/work)

Tu peux réaliser tout cela tranquillement depuis l’installateur expert afin de pouvoir définir patiemment les tailles voulues.

Tu copies ton uefi sur le deuxième disque en post installation avec un simple dd comme ceci :

dd if=/dev/nvme0n1p1 of=/dev/nvme1n1p1

Tu t’assures que tout est bon avec

efibootmgr -v | grep -i debian

Si il n’y a qu’une entrée (c’est sûr à l’installation ^^ ) tu fais un :

efibootmgr --create --disk /dev/nvme1n1 --part 1 --label "debian2" --loader "\EFI\debian\shimx64.efi"

On vérifie avec les uuid :

ls -l /dev/disk/by-partuuid/
efibootmgr -v

PS : N’utilise pas à 100% ton VG comme ça tu conserve de la souplesse pour l’utilisation.

PS 2 : Il doit même être possible de placer la partition uefi en raid avec mdadm en adaptant cet article : GNU/Linux | Configurer un RAID1 mdadm avec un boot UEFI

pourquoi faire une partition /boto hors lvm? seule l’efi necessite d’etre exterieure à lvm.

Par habitude car grub et lillo ne gère pas la partition /boot dans LVM :stuck_out_tongue: mais c’est pas faux vue que l’amorçage se fera via la partition efi :smiley:

Merci Zargos et Clochette,

je vais suivre le modèle proposé par Clochette, plus en phase avec ce que je crois comprendre, en ignorer la création de /boot/ qui restera dans la racine LVM

@Zargos
SI je comprends bien, isoler /var/ sur une partition séparée serait une précaution pour éviter la saturation de la partition racine à l’origine de mon problème, car elle peut « gonfler » exagérément?

Pour la question de mon choix: (je suis seul utilisateur de mon ordinateur, eric)

  1. Je mets dans /usr/local (avec les même droits (owner) que /home/eric et de /home work)
    tout ce qui concerne mes scripts et créations personnelles, ainsi que l’arborescence de texlive, (jamais à jour dans les dépots Debian et bien expliqué dans texlive),
    j’ai donc une arborescence comme ça:

/usr/local/texlive/…
/usr/local/share (pour des icônes de bureau propre à chaque volume usb)
/usr/local/lib/bash (pour des petites fonctions personnelles en bash)
/usr/local/bin/ pour mes scripts
/usr/local/etc. pour des ressources propres aux scripts (par exemple: fichier exclude_listes pour rsync)

Isoler /usr/local/ permet donc d’être préservé par les mises à jour et surtout les mises à niveaux.

  1. /home/work/ est un artifice (sans doute contestable!) pour isoler mes données de travail tout en laissant /home/eric dans la partition système … pour d’anciennes et obscures raisons oubliées peut-être pas si bonnes que je le croyait autrefois…, où /home/eric ne contient que les données variables et les données de configuration utilisateurs. J’assimile donc cette arborescence au système, comme /etc/.
    C’est le nom d’une 2e chemin du même utilisateur (eric)

Je vais donc me lancer dans l’aventure, avec un grand merci pour votre aide.

J’envisage donc la démarche suivante:

INSTALLEUR:

1 Faire du raid1 avec mdadm (via l’installeur)

  • 1 partition uefi sur chaque SSD
  • 1 partition pour le PV sur chaque SSD en raid1 = 1 seul LVM à gérer
  • création du VG
  • création des LV

Résultat attendu
/dev/nvme0n1p1 efi 50Mo efi
/dev/nvme1n1p1 efi 50Mo efi

/dev/md0 → nvme0n1p2 raid 100% PV système + VG système + 4 LV
/dev/md0 → nvme1n1p2 raid 100% PV système + VG système + 4 LV

  • swap 124 G
  • / 75 G
  • /var 40 G
  • /local 40 G
  • /work 1500 G
  • /eric 50 G

APRES INSTALLEUR (1er démarrage):
dd if=/dev/nvme0n1p1 of=/dev/nvme1n1p1

:astonished:

Pour le reste je sais pas trop ça dépend de tes besoins, je vais pas t’orienter plus que ça tu doit bien savoir ce dont tu as besoin.

Jusqu’à présent je me passai de swap. Sauf montage vidéo que je n’ai pas fait depuis 6 ou 7 ans, et une mémoire de 62Gi, je peux m’en passer. (j’ai proposé 2 fois la mémoire comme appris quand j’ai découvert Linux, vers 1999.)

Normalement tout ce qui est personnel est dans ton home.
/usr/local se rapporte à ce qui est spécifique à la machine, hors système standard Debian.

Il n’y a aucun package qui utilise normalement /usr/local.
Et quoique tru mettes en manuel, il n’y aura pas de mise à jour qui l’"impacterait, à moins que tu n’ais mis à la fois un packages Debian et le même logiciel à partir des sources ou d’un tar.gz.
et le fait d’avoir une partition séparée ne change rien en ce qui concerne les mises à jour.

Ancien certes :wink:
Mieux vaut avoir /home en partition séparée, et à l’abri d’un crash système. Une réinstallatrion système complète ne cnécessite donc pas forcement de reformater le /home et donc de conserver tes données même après une réinstallation.

Au delà de cet aspect, cela va à l’encontre des standard architecturaux de Linux d’une façon générale et de Debian ensuite.
Des outils de sécurité par exemple, mais aussi d’indexation ou autres que je n’ai pas en tête n’auront pas le même comportement vis à vis de ce type de répertoire.

/home est un répertoire user en lien avec les users définis dans le système. Chaque /home /$USER contient toutes les données relatives à un utilisateurs, de façon transparente pour le système. Un fichier créé par ton user sera toujours avec les bon droits et permissions dans /home/eric. Il n’est pas certain que ce soit toujours le cas dans /home/work.

Si tu as besoin d’un répertoire de travail, alors tu crées un répertoire /home/eric/work (c’est d’ailleurs ce que j’ai sur mon PC. C’est plus naturel.
D’autant qu’il y a un impact fort avec uimask, setuid, setgid, sticky bvits et autres particularité du système que nous n’avons pas toujrosu explicitement en tête à chaque action.
Et je ne parle même pas des cas liés à apparmor, aide, auditd et consorts

mauvaise idée, cela peut impacter les performance de certains logiciels, éventuellement du système, et de façon catégorique toute forme de mise en veille.

merci Zargos,
j’envisage alors de mettre 64G.

Joyeux Noël à tous