Mandriva Linux 2007 sur disque USB

Le présent article décrit pas à pas comment j’ai installé mandriva linux 2007 sur un disque dur usb et créé un CD de boot pour les PC qui ne savent pas démarrer un disque USB.

Cet article donne une méthode pour installer la Mandriva Linux 2007 sur un disque dur USB. Cette méthode n’est probablement pas la meilleure car mes connaissances sont parcellaires. Elle se base sur des tests empiriques (ça veut dire que j’ai fait plein d’essais qui n’ont pas fonctionné et que je n’ai pas pris le temps de lire l’encyclopédie en 35 volumes du noyau linux).

Le matériel

Pour notre recette, nous avons besoin d’un disque dur USB, d’un CDR vierge, d’une mandriva 2007 et d’un PC avec un graveur de CD. Il faudra avoir un "linux en état de marche" donc soit un liveCD de type Mandriva One, soit avoir un linux qui va bien installé sur le PC.

Ici, j’ai utilisé un boitier USB 3,5 pouces (alimenté par 1 ou 2 ports USB) dans lequel j’ai glissé un vieux disque dur IDE de portable de 10 Go. Le DVD est une mandriva 2007. Mon CDROM de boot est un mini cd-rw de 80 Mo, dont la petite taille permet de le glisser dans la pochette du disque dur.

Le principe

On va installer la mandriva linux sur le disque dur USB à partir d’un PC. Peu nous importe le contenu de ce PC car on ne touchera pas à son propre disque dur. Dans un second temps, nous allons adapter le noyau de démarrage pour tenir compte de la spécificité "USB" du disque dur. La troisième très courte étape consistera à s’intéresser aux PC capables de démarrer sur disque USB. La dernière étape consistera à faire un CD de démarrage spécial pour pouvoir démarrer notre disque USB sur des PC qui ne peuvent pas le faire.

Installation de la Mandriva 2007

Branchez le disque USB sur votre PC, mettez le DVD Mandriva (ou le CD1) dans son lecteur et allumez votre PC. S’il ne démarre pas sur le CDROM, vérifiez dans le bios la séquence de démarrage. "CD-ROM" doit être en premier.

L’installation de la Mandriva se fait de façon tout à fait traditionnelle SAUF l’étape du choix de la partition où installer votre Mandriva. Sélectionnez "partitionnement personnalisé" et prenez bien soin de sélectionner le bon disque dur.

Vous devez voir plusieurs onglets dénommés hda, hdb, sda, sdb... Tous ceux qui commencent par hd sont des disques durs internes IDE. On n’y touche pas ! Pour les sd, ce sont soit des disques SATA, soit votre disque dur USB (ou votre clef usb). Soyez sûr de prendre le bon pour ne pas risquer d’écraser les données de votre disque dur interne SATA. Si vous ne savez pas le reconnaitre, si vous avez un doute, arrêtez-là ! Dans tous les cas, c’est le moment de vous dire que je (l’auteur de ces lignes) ne suis pas responsable des dégâts : vous avez fait vos sauvegardes et pris toutes les précautions !

Dans le partitionnement automatisé, si votre disque n’était pas partitionné, choisissez "partitionnement automatique". S’il reste d’anciennes partitions sans intérêt, supprimez-les d’abord. Si par contre, vous avez des partitions linux existantes à conserver, renseignez simplement leur point de montage. Si vous avez une partition windows, vous pouvez aussi essayer de la réduire pour faire un partitionnement automatique sur la place ainsi libérée.

Le reste de l’installation se fait normalement : Il faut lire ce que Mandriva vous écrit, faire vos choix et cliquer...

Attention : Au moment du choix de l’emplacement du secteur de démarrage, c’est comme pour le partitionnement : Ne vous trompez pas, il faut le mettre sur le MBR (Master Boot Record) du disque usb. Si vous n’avez pas de disque interne SATA, votre disque USB s’appelait SDA (à l’étape "partitionnement") et donc vous choisirez d’installer LILO sur /dev/sda

On refait le démarrage

Arrivé à ce stade, cela ne roulera pas. En effet, Lilo va charger deux fichiers ("initrd" et "vmlinuz") en mémoire vive et "leur donner le volant". Le rôle de Lilo est terminé, à eux de se débrouiller maintenant pour conduire ce PC. Ici, il va y avoir une série de tests, initialisations et autres préparatifs. Parmi ceux-ci, il va falloir accéder au disque dur donc lire la partition et le système de fichier (appelé ext3). Oui mais voilà avant de pouvoir lire le système de fichier, il faudrait déjà qu’il puisse accéder à l’USB et pour cela il a un driver (pilote logiciel) USB sous la forme d’un fichier... qui se trouve sur le disque dur USB. Hé, hé, hé ! Dit plus clairement, vous avez fermé les portes de la bagnole en laissant les clefs à l’intérieur : plus moyen d’y entrer !

Nous allons donc ajouter dans initrd les drivers USB et les charger en tout premier. Pour cela, vous avez besoin d’accéder à la partition à partir d’un autre linux. Donc lancez votre Mandriva One, votre liveCD ou votre linux qui va bien sur vote disque IDE.

Ouvrez une console d’administrateur (root) par le menu système->terminaux->konsole ou mieux quittez le mode graphique par l’appui simultané sur CTRL+ALT+F2 (vous y reviendrez par CTRL+ALT+F7.

Voici les instructions à lancer et leur explication (précédé d’un # signalant un commentaire) :

mkdir /mnt/toto
# on crée un dossier toto dans mnt
mount /dev/sda5 /mnt/toto
# on en fait un point d'accès vers notre partition USB racine
# Attention, pour vous ce peut être /dev/sda1 ou /dev/sdb1...
# Vous vous en souvenez on l'a vu plus haut
chroot /mnt/toto
# maintenant on travaille sur notre disque USB exclusivement
# Bref, on en prend les commandes

Maintenant que nous avons "ouvert la bagnole sans la clef", nous allons construire notre nouveau initrd pour ne plus nous faire avoir.

cd /boot
ls
mkinitrd -v --force-usb --preload=ohci-hcd --preload=uhci-hcd --preload=ehci-hdc --preload=usb-storage --preload=sd_scsi --preload=sd_mod /boot/usbinitrd.img 2.6.17-5mdv

Quelques explications :
cd /boot permet d’aller dans le dossier de démarrage.
ls permet de voir ce qu’il y a dedans. C’est là que vous vérifiez le numéro de noyau qui doit être 2.6.17-5mdv. Si ce n’est pas le bon, changez le dernier paramètre de la ligne mkinitrd.
mkinitrd va créer le démarrage du noyau avec les options demandées, à savoir que tous les drivers usb sont préchargés ainsi que les modules qui en dépendent (usb-storage, scsi...). le fichier résultant s’appelle usbinitrd.img et se trouve dans le dossier /boot. Vous pouvez vérifier sa présence par un nouveau ls

les bios capable de démarrer un système sur disque USB

Nous allons ajouter dans /etc/lilo.conf une nouvelle entrée ainsi :

image=/boot/vmlinuz
        label="USB"
        root=/dev/sda5
        initrd=/boot/usbinitrd.img
        append=" splash=silent"
        vga=788

pour faire cela, tapez simplement :
mcedit /etc/lilo.conf

Attention remplacez /dev/sda5 par votre propre valeur (/dev/sda1 ou /dev/sdb1 etc)

Une fois que c’est fait, nous allons mettre à jour le MBR en tapant simplement la commande lilo

Pour sortir de cette console, tapez exit. Si vous aviez fait CTRL+ALT+F2, c’est le moment de faire CTRL+ALT+F7.

Dans le BIOS de votre PC, pensez à mettre HDD-USB en premier dans la séquence de démarrage (BOOT ORDER).

les bios qui ne démarrent pas sur disque USB

Pour ceux-là, nous allons créer une image iso de CD qui va contenir vmlinuz, usbinitrd.img et ce qu’il faut pour les lancer : isolinux. Cette image ISO devrait faire moins de 3 Mo et pourtant ça devrait suffire à contourner les bios récalcitrants.

Vous êtes maintenant revenu sur votre distribution qui marche bien. Créez un dossier "moncd" sur votre disque USB et un sous-dossier "noyau". En console, cela se fait ainsi :

mkdir /mnt/toto/isolinux
mkdir /mnt/toto/isolinux/noyau

Vous allez mettre dans /mnt/toto les fichiers isolinux.bin et fr-latin1.klt. Ces fichiers se trouvent sur le CD1 de votre Mandriva ou sur le DVD dans un dossier nommé isolinux.
De plus vous allez y ajouter les fichiers vmlinuz et usbinitrd.img qui se trouvent dans le dossier /boot du disque USB.

Utilisez votre explorateur de fichiers habituel ou en console :

cp /mnt/cdrom/isolinux/isolinux.bin /mnt/toto/isolinux/
#le binaire isolinux.bin va démarrer le CD et lancer votre initrd
cp /mnt/toto/boot/usbinitrd.img /mnt/toto/isolinux/noyau/
# notre fameux usbinitrd.img que nous avions créé tantôt
cp /mnt/toto/boot/vmlinuz-2.6.17-5mdv /mnt/toto/isolinux/noyau/vmlinuz
#le vmlinuz. Notez bien que l'on prend dans /boot le vmlinuz avec 
#son numéro derrière (donc le vrai fichier, pas un lien)
# et on le renomme en vmlinuz sans numéro

Notre futur CD commence à prendre forme. Il ne reste plus qu’à y ajouter deux fichiers texte que vous allez créer avec votre éditeur de texte préféré : kwrite, mcedit, gedit, vim, emacs...

Le premier : isolinux.cfg

default usb
prompt 1
timeout 150
display boot.msg
label usb
  kernel noyau/vmlinuz
  append initrd=noyau/usbinitrd.img ro root=/dev/sda5

Le second : boot.msg

Bienvenue sur le CD de lancement du disque dur USB

Tapez sur la touche ENTREE en croisant les doigts

C’est prêt ! Créons maintenant l’image ISO de notre CD :

cd /mnt/toto
mkisofs -o /mnt/toto/bootcd.iso -b isolinux.bin -c boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table -r -l isolinux

Voilà, vous devriez trouver dans la racine de votre disque USB un fichier nommé bootcd.iso à graver avec K3B (menu Outil -> Graver une image de CD) sur votre cd vierge.

améliorations possibles

Dans la génération du usbinitrd, on précharge les 3 drivers possibles : uhci, ohci et ehci. Si vous savez quel driver utilise votre PC et que votre disque n’ira pas sur d’autres PC, vous pouvez ne précharger qu’un des 3 drivers.

Dans le /etc/lilo.conf, on pourra ensuite changer la ligne "defaut" pour qu’elle lance l’entrée "usb" et non plus "linux".

Le boot.msg peut être graphique mais cela semble assez délicat à faire.

Le CD contient plein de place disponible qu’on aurait pu remplir avec des outils de secours.

Sur le CDROM que j’ai créé, j’ai mis une entrée pour chaque sdX au cas où : sda1 sda2 sda5 sdb1 sdb2 sdb5