Multiboot sur USB

Voici une méthode pour booter tour à tour plusieurs distributions GNU/Linux sur une clé usb. (Sous condition que la machine sur laquelle vous démarrerez le permette, et que vous ayez configuré le démarrage sur USB dans la section de boot du bios)

J’ai une clé usb de 4 Go, et je veux pouvoir démarrer une Ubuntu, une Slitaz, une PCLinuxOS, le tout avec simplicité si possible.

Pour faire les tests au fur et à mesure des essais, j’ai installé qemu et kqemu, j’ai chargé le module kqemu, et lancé cette commande:

qemu -usb /dev/sdc -kernel-kqemu

sachant que la clé usb est vue comme étant /dev/sdc, une fois celle-ci insérée dans le connecteur.

La clé est formattée en fat32 très classiquement et aucun flag n’y est mis au préalable.

Dans la clé, il y a:

boot/grub et dedans les fichiers fat_stage1_5 menu.lst  stage1  stage2

Quand on lance la commande « blkid », on peut lire:

/dev/sdc1: UUID= »4ECB-37F6″ TYPE= »vfat »

La partition contenant ce répertoire /boot/grub avec les fichiers dedans est donc vue comme /dev/sdc1

Le fichier menu.lst se compose comme suit:

title Ubuntu Netbook Remix
kernel /casper/vmlinuz boot=casper quiet splash —
initrd /casper/initrd.lz

title Ubuntu Netbook Remix Safemode
kernel /casper/vmlinuz boot=casper safemode quiet splash —
initrd /casper/initrd.lz

title Ubuntu Netbook Remix IDE Generic
kernel /casper/vmlinuz boot=casper quiet splash ide.all_generic.ide=1 —
initrd /casper/initrd.lz

title slitaz
kernel /boot/slitaz/bzImage
initrd /boot/slitaz/rootfs.gz
boot

title PCLxde
kernel (hd0,0)/isolinux/vmlinuz livecd=livecd root=/dev/rd/3 keyb=fr acpi=on vga=788 splash=silent fstab=rw,noauto —
initrd (hd0,0)/isolinux/initrd.gz

title PCLxde Video_SafeMode_FBDevice
kernel (hd0,0)/isolinux/vmlinuz livecd=livecd root=/dev/rd/3 keyb=fr acpi=on vga=788 splash=silent fstab=rw,noauto framebuffer —
initrd (hd0,0)/isolinux/initrd.gz

title PCLxde Video_SafeMode_Vesa
kernel (hd0,0)/isolinux/vmlinuz  livecd=livecd root=/dev/rd/3 keyb=fr acpi=on vga=788 splash=silent fstab=rw,noauto vesa —
initrd (hd0,0)/isolinux/initrd.gz

En effet, hormis Slitaz, les deux autres distributions se voient offrir trois menus de boot au choix, pour le cas où l’un échoue, selon les configurations rencontrées.

Si vous recopiez ceci directement depuis l’interface du blog, vous risquez de rencontrer des soucis dûs aux différences d’encodage.

J’ajouterai un fichier à télécharger à la fin de l’article.

Vous allez devoir repérer le nommage de votre clé USB, si vous voulez faire quelque chose d’identique. Si vous avez comme moi, deux disques durs dont un maitre et un slave, plus la clé usb, vous pourriez rencontrer ceci lorsque vous lancerez GRUB (en root dans une console) pour l’installer sur le MBR (premier secteur de disque) de la clé usb:

GNU GRUB  version 0.97  (640K lower / 3072K upper memory)

[ Minimal BASH-like line editing is supported.  For the first word, TAB
lists possible command completions.  Anywhere else TAB lists the possible
completions of a device/filename. ]

grub> root (hd
Possible disks are:  hd0 hd1 hd2

grub> root (hd2,0)
Filesystem type is fat, partition type 0xb

grub> setup (hd
Possible disks are:  hd0 hd1 hd2

grub> setup (hd2)
Checking if « /boot/grub/stage1 » exists… yes
Checking if « /boot/grub/stage2 » exists… yes
Checking if « /boot/grub/fat_stage1_5 » exists… yes
Running « embed /boot/grub/fat_stage1_5 (hd2) »…  15 sectors are embedded.
succeeded
Running « install /boot/grub/stage1 (hd2) (hd2)1+15 p (hd2,0)/boot/grub/stage2 /boot/grub/menu
.lst »… succeeded
Done.

grub>

Notez ces deux lignes au début:

grub> root (hd
Possible disks are:  hd0 hd1 hd2

Ci-dessus, après grub> root (hd j’ai juste appuyé sur la touche tab, qui a produit «Possible disks are:  hd0 hd1 hd2» en guise de complétion. Puis, lorsque j’ai inscrit à la ligne suivante:
grub> root (hd2,0)
Filesystem type is fat, partition type 0xb

«grub> root (hd2,0)» le shell de GRUB a répondu en précisant qu’il s’agit d’un système de type fat. Ce qui me confortait dans l’idée qu’il s’agissait bien du périphérique USB.

Une fois cela certain, la commande suivante, «setup (hd2)» est ok pour installer GRUB sur le MBR de la clé USB. (Et non pas sur un des disques durs déjà présents dans votre machine… au risque de mettre la pagaille dans le démarrage de vos partitions).

Ce qui va avec ce menu.lst, ce sont les répertoires suivants:

Pour Slitaz, sous le répertoire boot/ :

$  ls slitaz/
bzImage  rootfs.gz

Pour Ubuntu, sous la racine de la clé USB:

$ ls casper/
filesystem.manifest  filesystem.manifest-desktop  filesystem.squashfs  initrd.lz  vmlinuz

et puis aussi:

$ ls .disk/
base_installable  casper-uuid-generic  cd_type  info

Pour PCLinuxOS, tout le répertoire isolinux, avec son contenu complet et sous la racine de la clé USB, son fichier livecd.sqfs.

Enfin, pour chacune de ces isos, montond les isos en loop : ouvrez une console dans le répertoire où l’iso est située, et en mode administrateur:

mount -o loop image.iso /chemin/vers/point/de/montage

J’ai tenté quelques fois d’utiliser mc et d’entrer directement dans l’image iso, ça semble fonctionner, mais une vérification avec md5sum après la copie m’a montré que c’était une mauvaise idée.

Pour tester, relisez le début de ce billet.

Vous pouvez récupérer le fichier de configuration de Grub: menu.lst (clic-droit, Enregistrer la cible du lien sous )