Booter de n'importe où un linux sur clé usb

Le
fdelente
Bonsoir.

Maintenant que j'ai réussi à installer et booter une SlAMD64 d'une clé USB,
je vais pouvoir me promener partout avec :^).

Le problème est que, suivant les machines, il y a déjà un, deux voire trois
disques SATA déjà présents dans l'ordinateur.

Donc par exemple, si je mets ma clé dans une machine qui a deux disques SATA,
elle sera reconnue comme /dev/sdc; par contre si il n'y a qu'un disque SATA,
elle sera reconnue comme /dev/sdb.

Le problème est que, dans le script init de mon initrd, le rootdev est codé
en dur:

ROOTDEV=`cat /rootdev`
ROOTFS=`cat /rootfs`
.
mount -t $ROOTFS $ROOTDEV /mnt

Je voudrais que ROOTDEV soit défini soit de manière automatique (y a-t-il
une variable d'environnement qui me dit sur quel device se trouve la racine
?), soit lors du prompt boot: de lilo (si je donne à lilo root=/dev/sdc1,
comment récupérer ce paramètre ?)

Est-ce possible ? Car sinon, cela m'impose de booter d'abord sur un CD
rescue, puis d'aller modifier mon initrd sur ma clé avant de booter
dessus c'est contraignant :^)

À bientôt.

--
Fabrice DELENTE

SVP, ne m'envoyez pas de pièces jointes aux formats Word, PowerPoint, RTF
(formats propriétaires). Utilisez des formats libres comme txt, html,
OpenOffice.Org ou PDF. Merci. Voir
http://www.gnu.org/philosophy/no-word-attachments.fr.html
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
batyann811
Le #1912815
Bonsoir.

Maintenant que j'ai réussi à installer et booter une SlAMD64 d'une clé USB,
je vais pouvoir me promener partout avec :^).


Partout avec une distrib 64 bits... Pas certain. En tout cas pas chez moi.


Je voudrais que ROOTDEV soit défini soit de manière automatique (y a-t-il
une variable d'environnement qui me dit sur quel device se trouve la racine
?), soit lors du prompt boot: de lilo (si je donne à lilo root=/dev/sdc1,
comment récupérer ce paramètre ?)

Tu peux récuperer les paramètres passé à lilo dans /proc/cmdline .


D'ailleurs quand je regarde le contenu de ce fichier j'y vois un
"root01" qui correspond peut être au /dev/hda1 qui me sert de racine ?

Kevin Denis
Le #1912810
Le 2008-01-24, ecrivit:
Maintenant que j'ai réussi à installer et booter une SlAMD64 d'une clé USB,
je vais pouvoir me promener partout avec :^).

Le problème est que, suivant les machines, il y a déjà un, deux voire trois
disques SATA déjà présents dans l'ordinateur.

Donc par exemple, si je mets ma clé dans une machine qui a deux disques SATA,
elle sera reconnue comme /dev/sdc; par contre si il n'y a qu'un disque SATA,
elle sera reconnue comme /dev/sdb.

Le problème est que, dans le script init de mon initrd, le rootdev est codé
en dur:

ROOTDEV=`cat /rootdev`
ROOTFS=`cat /rootfs`
....
mount -t $ROOTFS $ROOTDEV /mnt

Je voudrais que ROOTDEV soit défini soit de manière automatique (y a-t-il
une variable d'environnement qui me dit sur quel device se trouve la racine
?),


utiliser udev dans l'initramfs, mais ca peut devenir complique.
sinon, tester tes differents peripheriques.
Genre, juste avant le mount -t $ROOTFS $ROOTDEV:

mount -t ext3 /dev/sda1 /mnt
if [ $? = 0 ]
then
[ -f /mnt/sbin/init ] && ROOTDEV=/dev/sda1
fi

mount -t ext3 /dev/sdb1 /mnt
if [ etc... ROOTDEV=/dev/sdb1

Je pense que ca peut etre enormement ameliore, mais l'idee est la.

soit lors du prompt boot: de lilo (si je donne à lilo root=/dev/sdc1,
comment récupérer ce paramètre ?)

cat /proc/cmdline


Est-ce possible ?

Oui.

--
Kevin

fdelente
Le #1912806
Kevin Denis
utiliser udev dans l'initramfs, mais ca peut devenir complique.
sinon, tester tes differents peripheriques.
Genre, juste avant le mount -t $ROOTFS $ROOTDEV:

mount -t ext3 /dev/sda1 /mnt
if [ $? = 0 ]
then
[ -f /mnt/sbin/init ] && ROOTDEV=/dev/sda1
fi

mount -t ext3 /dev/sdb1 /mnt
if [ etc... ROOTDEV=/dev/sdb1

Je pense que ca peut etre enormement ameliore, mais l'idee est la.


J'ai trouvé une autre méthode : j'ai créé deux initrd, l'un dont le script
init contient ROOTDEV=/dev/sdb1, et l'autre ROOTDEV=/dev/sdc1

J'ai modifié lilo.conf pour qu'au boot, le menu me permette de choisir entre
ces deux initrd; par contre, le problème qui s'est posé est que, dans
/etc/fstab, j'ai de toute façon /dev/sdc1 qui est monté sur /, même si ma
racine est /dev/sdb1... du coup il faut que je puisse modifier /etc/fstab
avant la fin de init.

Or, pour l'e2fsck, la racine est montée read-only. Donc, j'ai modifié encore
le script init pour monter la racine read-write sur /mnt, modifier /etc/fstab,
demonter la racine et la remonter read-only sur /mnt pour que e2fsck ne
proteste pas.

Je crains que ça ne crée des problèmes d'écrire sur un filesystem qui
n'aurait pas été démonté proprement (coupure de courant) mais comment faire
autrement ?

À bientôt.

--
Fabrice DELENTE

SVP, ne m'envoyez pas de pièces jointes aux formats Word, PowerPoint, RTF
(formats propriétaires). Utilisez des formats libres comme txt, html,
OpenOffice.Org ou PDF. Merci. Voir
http://www.gnu.org/philosophy/no-word-attachments.fr.html

jerome-o
Le #6774711
Il faut utiliser les labels dans grub et dans fstab
Publicité
Poster une réponse
Anonyme