Léa-Linux & amis :   LinuxFR   GCU-Squad   GNU
Partition racine LVM et noyaux sans supports de modules
Envoyé par: cedrx

Salut à tous.
Je me posais une question:

J'ai essayé en vain de booter un linux (debian etch) dont la partition racine se trouve sur un volume logique LVM avec un noyau sans le support des modules activé (donc sans image initrd)

Voilà le genre de message d'erreur que j'obtiens:
VFS: Cannot open root device "mapper/vgvm-lvracine" or unknown-block(0,0)
Please append a correct "root=" boot option
Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(0,0)

(Bien sûr le support LVM / RAID est inclus dans le noyau...)

Est ce que quelqu'un a déjà réussi ce genre d'opérations?

Ce même noyau boote parfaitement ma debian et trouve tous les volumes group existants lorsque ceux ci ne se situent pas à la racine.
Ce sont d'ailleurs les scripts placés dans /etc/rc2.d/S20lvm qui se chargent de détecter les volumes group lvm.
Malheureusement dans mon cas il me faudrait un script qui détecte mes volume group avant même que le noyau essaye de monter la partition racine du système... :-/

J'ai pensé donc à une image initrd sans modules mais juste avec les scripts qui permettraient de détecter les volume group.
Mais
1) Est cez que ça existe?
2) Comment on fabrique ces initrd?

Bref je suis un peu perdu là j'avoue.

Si quelqu'un à des infos...
D'avance Merci

CedrX (qui a mal à la tête)


Poste le Thursday 1 March 2007 17:10:28
Répondre     Citer    
Re: Partition racine LVM et noyaux sans supports de modules
Envoyé par: ankou29666

Salut

J'ai effectué l'installation de la etch sur mon pc, avec partition racine sur lvm et ça boote au poil ... Par contre c'est dès que j'essaye de compiler mon propre noyau (afin d'y rajouter le support reiser4) que ça se gâte ... Il m'est impossible de booter sur le nouveau noyau ...

Voici ma config (du moins l'essentiel pour ce problème) :
- AMD Opteron 64 double coeur, avec distribution 64 bits
- 3 disques durs maxtor diamondmax10 SATA (sda=300G, sd[bc]=320G)
sd[abc]1 => raid5 => volume physique => volumes logiques /, /home et swap
sd[bc]2 => raid1 => /boot

En gros j'ai suivi à peu près ce tutoriel (la 2e méthode facile) qui est destiné à Gentoo mais je ne pensais pas que ça poserait problème avec ma debian : [gentoo-wiki.com] ...
Pour ce qui est du script lvm2create_initrd, tu le trouveras compressé en .gz dans le répertoire /usr/share/doc/lvm2 ...
J'ai donc tapé : ./lvm2create_initrd -M debian -c /etc/lvm/lvm.conf -r /dev/md0 -R /etc/mdadm/mdadm.conf 2.6.19, et je récupère donc un joli fichier initrd-lvm2-2.6.19.gz dans /boot ...

Pour ce qui est du menu.lst de grub, j'ai d'abord laissé la configuration pour mon nouveau telle qu'elle est pour le noyau debian, à savoir
title		Debian GNU/Linux, kernel 2.6.18-4-amd64
root		(hd1,1)
kernel		/vmlinuz-2.6.18-4-amd64 root=/dev/mapper/raid_vg-system_lv ro 
initrd		/initrd.img-2.6.18-4-amd64
savedefault
ça boote avec le noyau debian d'origine mais pas avec mon nouveau noyau ...

J'ai donc suivi le conseil du tuto (lvm2create_initrd te donne le même) à savoir
title		Debian GNU/Linux, kernel 2.6.19.7
root		(hd1,1)
kernel		/vmlinuz-2.6.19.7 root=/dev/ram0 lvm2root=/dev/mapper/raid_vg-system_lv ro 
initrd		/initrd-lvm2-2.6.19.gz
savedefault
et ça ne boote toujours pas ...

Mais à comprendre le tuto j'aurais peut-être bien du faire
title		Debian GNU/Linux, kernel 2.6.19.7
root		(hd1,1)
kernel		/vmlinuz-2.6.19.7 root=/dev/ram0 lvm2root=/dev/raid_vg/system_lv ro 
initrd		/initrd-lvm2-2.6.19.gz
savedefault
que je compte essayer dès que je pourrais redémarrer ma machine, je te tiens au jus pour savoir si ça marche ou pas ...


Citation
cedrx
(Bien sûr le support LVM / RAID est inclus dans le noyau...)

RAID est en effet intégralement supporté dans le noyau. Pour LVM c'est différent, seul DM (qui est utilisé par LVM) est inclu dans le noyau ... Le problème c'est que LVM, tout comme EVMS souffrent d'un gros défaut de conception, qui est d'ailleurs délibéré de la part des concepteurs d'EVMS : ils sont entièrement écrit en espace utilisateur !!! Par contre je ne parviens pas à retrouver la citation exacte sur le site d'EVMS (evms.sourceforge.net), mais à mon avis c'est du même tonneau pour LVM, la raison pour laquelle ils ont choisi de sortir EVMS/LVM du noyau c'est parce qu'ils ont préféré adopter la méthode microsoft qui consiste à privilégier la simplicité à l'efficacité et à la propreté ... En gros l'un comme l'autre ressemblent plus à un driver d'abord écrit pour windows qu'à un truc conçu exclusivement pour linux/unix ...

Impossible donc de booter directement sur un LVM, il faut pour celà contourner le problème en utilisant une image initrd incluant un module LVM afin de pouvoir ramener celui-ci en espace noyau le temps du démarrage ...

Poste le Tuesday 27 March 2007 20:04:58
Répondre     Citer    
Re: Partition racine LVM et noyaux sans supports de modules
Envoyé par: ankou29666

Bon et bien rien à faire, je n'arrive toujours pas à booter sur mon nouveau noyau ...

Voici la fin du fichier menu.lst de grub :
title		kernel 2.6.19.7 root=/dev/mapper/raid_vg-system_lv
root		(hd1,1)
kernel		/vmlinuz-2.6.19.7 root=/dev/mapper/raid_vg-system_lv ro 
initrd		/initrd-lvm2-2.6.19.7.gz
savedefault

title		kernel 2.6.19.7 root=/dev/ram0 lvm2root=/dev/mapper
root		(hd1,1)
kernel		/vmlinuz-2.6.19.7 root=/dev/ram0 lvm2root=/dev/mapper/raid_vg-system_lv ro 
initrd		/initrd-lvm2-2.6.19.7.gz
savedefault

title		kernel 2.6.19.7 root=/dev/ram0 lvm2root=/dev/raid_vg/system_lv
root		(hd1,1)
kernel		/vmlinuz-2.6.19.7 root=/dev/ram0 lvm2root=/dev/raid_vg/system_lv ro 
initrd		/initrd-lvm2-2.6.19.7.gz
savedefault

title		Debian GNU/Linux, kernel 2.6.18-4-amd64
root		(hd1,1)
kernel		/vmlinuz-2.6.18-4-amd64 root=/dev/mapper/raid_vg-system_lv ro 
initrd		/initrd.img-2.6.18-4-amd64
savedefault

Aucune des trois options du 2.6.19 sauce Ankou ne veut démarrer ... Par contre le 2.6.18 sauce Debian lui boote sans aucun problème ... Mais :

- Je me suis rendu compte par la suite que j'avais oublié les sections "system side" et "cleanup" qui sont a exécuté quelle que soit la méthode choisie ... J'ai bien essayé de corriger cette erreur mais
# vgchange -a n
Can't deactivate volume group "raid_vg" with 2 open logical volume(s)
...

- Je viens également de me rendre compte que le script lvm2create_initrd proposé par le tuto est différent de celui proposé dans le paquet lvm2 de debian ... Je vais donc tester cette 2e solution dès que j'aurais un créneau pour rebooter mon pc ...

Poste le Friday 30 March 2007 12:36:18
Répondre     Citer    
Re(solu): Partition racine LVM et noyaux sans supports de modules
Envoyé par: ankou29666

Problème résolu

J'ai continué à fouiner un peu sur le net avant de tomber sur ce tuto, qui lui fonctionne et en plus est destiné à Debian avec création d'un noyau en paquet .deb : [lists.debian.org]

Pour résumer rapidement, j'essayerais de pondre un tutoriel dès que j'aurais un peu de temps, il faut créer les fichiers suivants

/etc/mkinitrd/exe
/bin/cp
/sbin/lvmiopversion
/sbin/vgscan
/sbin/vgchange
/lib/lvm-10/vgscan
/lib/lvm-10/vgchange
/lib/lvm-default/vgscan
/lib/lvm-default/vgchange

/etc/mkinitrd/files
/dev/lvm

/etc/mkinitrd/mkinitrd.conf
# /etc/mkinitrd/mkinitrd.conf:
#  Configuration file for mkinitrd(8).  See mkinitrd.conf(5).
#
# This file is meant to be parsed as a shell script.


# What modules to install.
MODULES=most


# The length (in seconds) of the startup delay during which linuxrc may be
# interrupted.
DELAY=0


# If this is set to probe mkinitrd will try to figure out what's needed to
# mount the root file system. This is equivalent to the old PROBE=on setting.
ROOT=/dev/md1

# This controls the permission of the resulting initrd image.
UMASK=022


# Command to generate the initrd image.
MKIMAGE='mkcramfs %s %s > /dev/null'


/etc/mkinitrd/scripts/00rootlvm
#!/bin/sh


exec >> $INITRDDIR/script

cat << "EOF"
mount_lvm_root() {
        unset flags fstype rootdev
        set -f
        set +f $(cat /proc/cmdline)
        for i; do
                case "$i" in
                rootflags=*)
                        flags=${i#rootflags=}
                        ;;
                rootfstype=*)
                        fstype=${i#rootfstype=}
                        ;;
                root=*)
                        rootdev=${i#root=}
                        ;;
                esac
        done
        if [ -n "$fstype" ]; then
                mount -nrt "$fstype" ${flags:+-o "$flags"} $rootdev /mnt
                return
        fi
        IFS=,
        set -f
        set +f -- $FSTYPES
        unset IFS
        for i; do
                mount -nrt "$i" ${flags:+-o "$flags"} $rootdev /mnt &&
                        break
        done
}


cd /
mount -nt proc proc proc
mount -nt tmpfs tmpfs etc
mount -nt tmpfs tmpfs dev2
cp -a dev/* dev2/
mount --bind dev2 dev
vgscan
vgchange -ay
mount_lvm_root


# Uncomment sh command below to allow manual debugging at boot-time.
# If you can mount root on /mnt, exit the shell and the system will boot
# normally, allowing you to fix whatever was wrong with this script.
# If you can't mount root, boot a working kernel/initrd and try again.
# sh


cd /
echo 256 > proc/sys/kernel/real-root-dev
umount dev
umount dev2
umount etc
umount proc
cd mnt
[ $DEVFS ] && mount -nt devfs devfs dev
pivot_root . initrd
EOF

et si nécessaire rajouter dans /etc/mkinitrd/modules tout élément nécessaire au démarage qui sera compilé en tant que module ... Dans mon cas, ce fichier ne contient que des lignes de commentaires, en gros il est vide quoi ...



Puis il faut compiler le noyau, soit avec
make && make modules_install && make install
et si besoin exécuter mkinitrd pour créer l'image initrd (à priori pas besoin puisque à l'époque où j'étais sous mandriva la création de l'initrd devait se faire automatiquement lors du "make install", je n'avais jamais réussi à y compiler un noyau propre sans initrd, maintenant je comprends pourquoi)
ou
make-kpkg --initrd --revision=ankou kernel-image
et là tu récupèreras ton noyau sous forme d'un joli paquet .deb, qui créera l'initrd lors de son installation ...

Juste à titre indicatif, si tu souhaites installer ton paquet sur plusieurs machines, il faudra que tu configures initrd sur TOUTES tes machines ...




J'ai appliqué ce tuto avec les sources du 2.6.18, patchs 2.6.19, 2.6.19.7 et reiser4-2.6.19-3, ça a marché :-)):-)):-))

Poste le Thursday 5 April 2007 21:47:36
Répondre     Citer    

Veuillez vous authentifier auparavant pour commenter.

 

Ce forum !
Partition racine LVM et noyaux sans supports de modules
Un problème avec une commande du shell ? Comment utiliser la crontab ? Vous avez des soucis pour la gestion réseau sous Linux ? Pour vous la gestion des utilisateurs/groupes est du chinois ? Etc... Posez donc vos questions ici.

Sauf mention contraire, les documentations publiées sont sous licence Creative-Commons