Comment activer et monter automatiquement des Volumes Logiques (LV) ?
Lors de l'installation d'un serveur de fichiers, nous avons utilisé des Volumes Logiques pour nos espaces de stockages (communs et personnels). Pouvoir les monter automatiquement, à coup sûr, au démarrage est l'objet de cet article.
Lors de l'installation d'un serveur de fichiers, j'ai été amené à installer une Mandriva 2010.0 sur des Volumes Logiques ( /, /home/ et /usr/src) installés sur un disque dur dédié, ainsi que tous mes espaces de stockage personnels et communs sur des Volumes Logiques (LV) installés sur un RAID 5 (cf. Configurer le RAID et la gestion de son espace mémoire (LVM)). J'ai décrit tous mes points de montage dans /etc/fstab afin que tout se remonte automatiquement au démarrage. Mais cela ne marche pas !
Pourtant sous Mandriva, cela devrait se faire tout seul. Et, effectivement, c'est bien le cas pour les Volumes Logiques créés à l'installation de la Mandriva, mais par contre un redémarrage me fait perdre quasi systématiquement (le "quasi" est vraiment gênant) les montages de mes LV sur mon RAID (j'ai bien dit les montages pas mes données).
A priori je ne suis pas le seul, puisque quelques uns ont reporté des problèmes similaires, cf. bug55503 qui à ce jour (fin janvier 2010) laissent encore perplexes. Il faut reconnaître que c'est assez surprenant car si on regarde le /etc/rc.d/rc.sysinit, on y trouve bien les lignes d'activation des LV. Alors, problème de timing ? Je laisse cette problématique aux bons soins des experts.
Nota : En 2011, lors d'une réinstallation avec une Mandriva 2010.2, le problème ne se posait plus
1 - Activer (activate) les LV au démarrage (boot)
Si les montages indiqués dans /etc/fstab échouent c'est tout simplement parce que les volumes logiques ne sont pas activés. Pour les activer, il faut plusieurs conditions :
- "Device mapper support" doit être actif : Là cela se joue en partie dans le kernel. Il faut que vous ayez device-mapper inscrit en dur (*) ou en module (M). Pour la Mandriva 2010, par défaut c'est en module. Comme vous pouvez le voir ici:
Nota : l'obtention de ce "screenshot" sort de l'objet de cet article. Il sera abordé dans un article sur la configuration du kernel. Pour les plus connaisseurs et curieux, cet "écran" se trouve sous Device Drivers --> Multiple devices drivers support (RAID and LVM). - le module dm-mod doit être lancé au boot :
- si vous avez installé votre distribution avec des Volumes Logiques, dm-mod est lancé automatiquement. Vous pouvez le voir grâce à un :
#lsmod | grep dm_mod
qui vous le retournera s'il est lancé (notez le tiret bas '_' et non le tiret du trait d'union '-').
- si vous n'avez pas installé votre distribution avec des Volumes Logique, et que vous avez mis ces derniers en post-installation, alors il vous faut faire :
# echo "dm-mod" >> /etc/modprobe.preload
Tout ce qui précède a été fait, mais un reboot de la machine n'active pas les Volumes logiques de mes espaces de stockage et donc ne les monte pas comme indiqué dans /etc/fstab !.
Ce qui inquiète sur le coup, c'est que même un vgdisplay ne renvoie rien !
En fait, on retrouve les volumes logiques avec un :
# vgscan
et on les réactive avec un :
# vgchange -a y
Mais, bien sûr, là ils ne sont pas montés et il faut le faire manuellement pour tous les LV. Ce n'est pas des plus pratiques. Alors comment faire ?
2 - Lancer au démarrage (boot) un script d'activation et de montage des LV
L'idée est donc de mettre dans un script toutes les commandes utiles pour détecter, activer et monter les Volumes Logiques, et de lancer ce script au démarrage.
Pour lancer un script au démarrage, il y a plusieurs possibilités, mais la plus simple et "prévue pour" c'est d'écrire le script dans /etc/rc.d/rc.local. En effet ce "rc.local" se lance une fois que tous les autres (init.d, rc.sysinit, rc.x.d) sont terminés, on est sûr ainsi qu'il ne nous manque pas un service quelconque pour faire exécuter ce que l'on veut.
Si ce fichier n'existe pas vous pouvez le créer. Cette solution marche pour toutes les distributions "classiques".
Cependant, selon les distributions les scripts et leur emplacement pourront être différents. Si vous ne savez pas jetez un œil sur le "chapitre 6 Boot time scripts" de ce HOWTO sur les LVM (en anglais).
Pour la Mandriva 2010 rc.local existe, il y a même un lien /etc/rc.local qui renvoie sur le vrai fichier /etc/rc.d/rc.local (pour créer un lien comme celui-ci #ln -s /etc/rc.d/rc.local /etc/rc.local).
Voici le script que j'ai ajouté dans mon rc.local :
# La detection et le montage de mon vg_user if [ -x /sbin/lvm ]; then printf "Setting up LV Users :" /sbin/lvm vgscan && /sbin/lvm vgchange -a y if [ $? ] ; then printf "Montage de lv_archives :\n" /bin/mount -t ext4 /dev/vg_user_data/lv_archives /mnt/archives printf "Montage de lv_media :\n" /bin/mount /dev/vg_user_data/lv_media /mnt/media printf "Montage de lv_famille :\n" mount /dev/vg_user_data/lv_famille /mnt/famille printf "Montage de lv_freecrazy :\n" mount /dev/vg_user_data/lv_freecrazy /home/freecrazy printf "Montage de lv_autre_user :\n" mount /dev/vg_user_data/lv_autre_user /home/autre_user else printf "Oups ! il y a un probleme avec LV Users" ; exit $? fi fi exit $?
Quelques éléments d'explication :
- [ -x /sbin/lvm ] teste si lvm est bien exécutable (et du coup présent) si oui on peut lancer vgscan et vgchange, si non (else) "ben y a un os" et on sort. Ce n'est pas absolument utile car vous savez qu'il existe, mais cela permet de faire un peut de programmation shell.
- [ $? ] teste si la valeur de retour de vgchange est bien à 0, c.a.d tout s'est bien passé. Si c'est le cas on peut procéder à nos montages (mount) . Pour l'utilité, idem que précédemment.
- Je ne suis pas sûr que les printf servent à quelque chose, car lors du démarrage cela va trop vite pour que j'ai le temps de lire quoi que ce soit.
- bien évidemment les noms du VG (vg_user_data) et des LV (lv_xxx) ainsi que ceux des points de montage sont à modifier en fonction de vos choix.
Voilà avec ce script, vos LV seront détectés, activés (activated) et montés systématiquement au démarrage (boot)