Lvremove d'une partition LVM en post-installation

Bonjour,
J’ai un soucis dans un fichier de post-installation dans un installer Debian.
Ce postinst script s’execute dans le in-target de l’installation.
Vers la fin de ce fichier, je dois supprimer une partition créée automatiquement par l’installer selon la configuration indiquée à celui-ci (par preseed).
Cependant, l’execution du lvremove provoque un plantage de LVM semble-t-il et plante donc la fin de l’installation.
Pas de message d’erreur dans les logs, juste un arrêt du script et de l’installer.
en console quand je fais un lvdisplay ou un lvs, pas de réponse.

As-tu vérifier que le LV était désactivé avant son retrait ? sinon je n’ai pas plus d’idée que ça.

j’ai lvchange -an /dev/mapper/vg01-todelete. ensuite je fais le lvremove.
mais 'ai toujours le probleme

Est-ce que tu fais la suppression à la main ou dans un script lancé automatiquement à la fin de ton installation ?

Post-installation, c’est ce que je précisais. je pense que le problème viens de là, mais je ne trouves pas pourquoi. Comme je n’ai absolument aucun log; normalement le script est installé en root, dans l’environnement cible.

Je me rappelle vaguement avoir eu un un souci pour exécuter des commandes lvm en chroot et avoir dû monter /run en bind. Par contre je ne me rappelle pas si l’installateur le fait, et je n’ai pas de quoi vérifier sous la main.

Dans le contexte de l’installateur ou dans in-target ?
« Pas de réponse » = retour au prompt sans rien afficher ou pas de retour au prompt ?

pas de retour au prompt , ni en root, ni en chroot /target

Vérification faite, l’installateur n’a pas de règles udev pour créer les fichiers spéciaux de périphériques et/ou liens dans /dev/mapper/ et /dev/VG/, et j’ai l’impression que le lvm d’une installation normale compte dessus et attend qu’ils soient créés. Définir DM_DISABLE_UDEV=1 empêche lvm de compter sur udev. Mais pourquoi ne pas plutôt exécuter les commandes lvm dans le contexte de l’installateur ?

C’est une installation automatique utilisant preseed (créé avec simple-cdd).
je peux essayer avec la late_command pour voir.

Par curiosité, pourquoi as-tu besoin de supprimer un volume logique ? Pourquoi ne pas plutôt ne pas le créer du tout ?

dans le système de calcul des partition de partman-auto, il y avait un soucis avec les calculs sur des espaces disques de tailles variables.
Pour contrer ce problème, il fallait créer une partition du type ci-dessous pour circonvenir le problème:

    >             1 1 -1 ext4 \
    >                     $lvmok{ } lv_name{ todelete } \
    >                     method{ lvm } format{ } \
    >                     use_filesystem{ } filesystem{ ext4 } \
    >                     label{ TODELETE } \
    >                     mountpoint{ /todelete } \
    >             .

J’utilise un partitionnement qui est valable jusque sur un disque de 10 To.
Avec les règles suivantes:

  • taille max du disque 10To
  • taille du LVM = 100% du disque sauf /boot ou /boot/efi
  • taille max utilisée du LVM 300Go
  • 25% pour /
  • 25% pour /var
  • 10% pour /var/log
  • 10% pour /var/log/audit
  • 5% pour /var/tmp
  • 5% pour /tmp
  • dans les 10% restant:
    • 256 Mo pour /boot
    • 200 Mo /boot/efi

De fait le problème se posait si le disque est plus grand que 300 Go, la dernière partition créée prenait le reste du disque. cette partition todelete servait à finaliser le partitionnement avec une taille de 1Mo quelque soit le disque.
cette partition n’a pas vocation à perdurer ensuite.

Si tu veux dire que l’algorithme de calcul automatique des tailles est merdique, je ne te contredirai pas. Par contre, je ne comprends la suite.

Seulement avec une taille max illimitée (-1).

Si j’interprète bien ta recette, la taille max du volume « todelete » est illimitée (-1), pas 1 Mio.
Edit: correction : avec une priorité inférieure ou égale à la taille min, la taille calculée ne peut pas dépasser la taille min donc 1 Mo effectivement. Mais je ne vois pas l’intérêt de ce volume.

oui pardon, erreur de ma part, je viens de m’en rendre compte.

En fait il semble que non. Le problème c’est que pour tester il faut obligatoirement un disque supérieur à 300 Go. En virtualbox, qui me sert de plateforme de test c’est un peu compliqué.

empêcher que dans les autres partitions (légitimes celles-ci) la dernière traitée ne prennent tout le reste du disque.

En fait non, erreur de ma part, voir réponse précédente.

Si elle n’a pas -1 comme taille max, je ne vois pas comment ça pourrait arriver.

je vais retester pour voir. Ma configuration de partitionnement a été établie il y a près de deux ans maintenant, peut être que e n’ai plus besoin de cette partition aujourd’hui. je suis en train de faire un test avec un disque de 400Go sur une VM.

EDIT: test réalisé. dans mes partition, /var a été traité en denier lors du test et elle fait 30% de plus que / alors qu’elle devrait être de la même taille.
Je pense que c’est lié à une faille dans l’algorithme; qui effectivement est loin d’être idéal.
C’est pour ça que j’utilise cette partition bidon.

C’est /tmp et non /var/ qui est traité en dernier et il est à 130 Go environ alors qu’il devrait être à 7,5 Go environ.
Si je met mon todelete en 1 1 -1, alors tout est nickel, le todelete récupère la place qui devrait être libre.
Pour la suppression du lvm avec le late_command ca semble marcher en faisant un umount, uun lvchange et un lvremove.
Pour le fstab il est traité par le script de post-installation.

Tu veux dire qu’il a une taille supérieure à 1 Mio ? Dans ce cas il y a vraiment un bug quelque part car avec ces paramètres la taille devrait être fixée à 1 Mio.

Concernant le démontage et la modification de fstab, tu ne pourrais éliminer ça en ne spécifiant pas de point de montage pour le volume ?

oui bonne idée :slight_smile: je n’y avais pas pensé :crazy_face: trop la tête dans le guidon sur ce projet.
Par contre, l’installeur n’aime pas, il veut un point de montage. Donc soit on est obligé d’y passer (j’arrive à m’en débarrasser maintenant), soit je trouve l’option qui permet que l’installeur ne demande pas de point de montage pour une partition.

EDIT: j’ai trouvé, créée la partition sans point de montage:

                1 1 -1 ext4 \
                        $lvmok{ } lv_name{ todelete } \
                        method{ lvm } format{ } \
                .

Non en fait, le 1mo c’est le minimum, ensuite il rend tout ce qu’il reste, ça c’est le -1 qui le détermine. Comme le preseed est défini pour une utilisation complète du disque avec d-i partman-auto-lvm/guided_size string max, il va automatiquement utiliser tout le disque. C’est pour ça que la dernière partition contient tout ce qui n’a pas été utilisé.

Au final:
-création de la partition

                1 1 -1 ext4 \
                        $lvmok{ } lv_name{ todelete } \
                        method{ lvm } format{ } \
                .

-suppression dans le late_command:

d-i preseed/late_command string \
        logger "late_command: remove todelete"; \
        lvchange -an /dev/mapper/vg01-todelete; \
        lvremove -y vg01/todelete;