acassaigne

Informations sur Python, KVM, d'Oracle, xml, extrem programming, Apple, linux, debian, KDE, Amarok, de romans, de BD, musique, d'Actualités...

22 février 2008

boot debian on USB disk

http://www.linux.com/feature/125625

Posté par acassaigne à 10:17 - Linux en poche... - Commentaires [0] - Rétroliens [0] - Permalien [#]


10 août 2007

Comment installer une distribution Debian/Etch sur disque USB

Linux en poche : emporter votre bureau linux avec vous (Debian/Etch).

Le but de ce document est de fournir les éléments nécessaires à l'installation sur disque externe USB d'une distribution Debian Testing/Etch afin de disposer en tout lieu de son bureau informatique personalisé et préféré. Il sera possible de démarrer directement sur le disque dur USB si le BIOS de votre machine le permet ou alors de démarrer via un mini CD de boot.

La distribution retenue ici est la "Debian/Etch" mais les principes restent sinon identiques, similaires pour toute autre distribution.

La machine doit disposer d'un lecteur de CD-ROM et d'une interface USB2.
Techniquement l'USB1.1 peut fonctionner mais en pratique est beaucoup trop lente.

Ce document se compose de deux parties. Une partie, très succincte concernant l'installation de la distribution sur le disque dur externe. L'autre, objet principal de ce document, explique comment adapter le processus de boot (notamment le initrd) afin de permettre la reconnaissance du disque USB au cours de la phase de démarrage. Nous aborderons également au cours de cette partie la création d'un mini CD-ROM de boot.

Etape 1 : Préparation à installation

Télécharger le cd-rom d'installation de la Debian Testing/Etch disponible à l'adresse suivante :cd net-install www.debian.org Testing/Etc. Graver l'image iso téléchargée.

Etape 2 : Installation sur le disque USB
Cette étape consiste simplement à installer la distribution de manière tout à fait classique, exactement comme si on avait affaire à l'installation sur le disque interne d'une machine.

En général il faut sélectionner le disque "/dev/sda" plutôt que le "/dev/hda" pendant l'installation. Le disque externe USB est en effet reconnu comme une unité SCSI (émulation de l'usb en bus SCSI par le module sd_mod).

Le découpage (partitionnement) du disque est laissé à la discrétion de l'utilisateur.

Recommandons simplement au minimum :

- de réserver entre 2 et 4Go pour le "/"
- de mettre une zone de swap égale à la mémoire RAM disponible au minimum (plus si on utilise le "suspend to disk")
- de mettre le "/home" sur une partition indépendante

Démarrer sur le cd-rom d'installation Debian Testing/Etch. Attendre l'écran d'accueil. Brancher votre disque dur USB et poursuivre l'installation de façon standard.

Etape 3 : Boot loader

La distribution Debian vous propose par défaut grub, personnellement je préfère lilo. J'ai donc fait le choix d'installer lilo au niveau de la MBR et non pas au sein de la partition root (/) (qui correspond sur mon disque USB à "/dev/sda1").

Vous pouvez tenter un reboot, si votre PC vous permez de booter sur un périphérique USB.
Mais vous aurez certainement (cela dépend de votre disque dur USB et du bios de votre machine) la désagréable surprise d'obtenir l'erreur suivante
mounting /root/dev on /dev/.static/dev failed: No such file or directory Done.
La première phase de boot s'exécute jusqu'au montage du filesystem root et là c'est l'echec (cela dépend du disque USB et du BIOS de votre PC, ce n'est pas systématiquement l'echec). La cause est dûe au fait que le noyau n'a pas toujours eu le temps nécessaire pour reconnaitre le disque USB. Le système lui a demandé de monter votre partition root (/) présente sur le disque USB alors que ce même disque n'avait pas encore était identifié par le noyau. C'est donc tout simplement une question de timing. Nous allons adapter le initrd (initial ram disk) afin d'inclure un delai d'attente.
Etape 4 : Générer le initrd afin de disposer d'un delai d'attente suffisant
Pour cela il nous faut un système linux opérationel de préférence une debian en version Testing/Etch et être dans la même configuration de noyau. Bootez sur ce système Debian opérationel et connectez vous avec l'utilisateur root
Branchez votre disque USB, et montez la partition root de votre disque USB pour moi :
mount /dev/sda1 /mnt/disk_usb
Monter le system de fichier des processus sur le disque usb et réaliser le chroot afin de travailler sur le disque USB
mount -t proc proc /mnt/disk_usb/proc
chroot /mnt/disk_usb
cd /etc/mkinitramfs/scripts/local-top

création du script wait_usb_disk.sh
echo "echo I'm waiting usb disk 5s" > wait_usb_disk.sh
echo "sleep 5" >> wait_usb_disk.sh


rendre exécutable le script
chmod u+x wait_usb_disk.sh

Générer le initial ram disk (initrd).
mkinitramfs -o /boot/initrd_wait_usb.gz /lib/modules/2.6.15-1-486

Le chemin des modules est à adapter en fonction de la version du noyau que vous utilisez.

Note : comment vérifier que votre image initrd contient effectivement le script souhaité, c'est assez facile depuis la version 2.6.?? le noyau utilise une image initrd au format cpio (voir man initramfs-tools). Pour en visualiser le contenu il suffit d'executer les commandes suivantes :
mkdir /tmp/my_initrd
cd /tmp/my_initrd
gunzip -9 -c /boot/initrd_wait_usb.gz | cpio -i -d -H newc --no-absolute-filenames

Si vous souhaitez tester ce initrd en bootant directement sur le disque USB alors éditer le fichier /etc/lilo.conf et ajouter les lignes suivantes :
image=/vmlinuz
        label=Linux_wait_usb
        read-only
        root=/dev/sda1
        initrd=/boot/initrd_wait_usb.gz

Exécuter lilo pour mettre à jour votre MBR.
Rebootez et testez, c'est gagné !
Bien sur vous devez disposer d'un PC capable de démarrer sur un port USB. Pour les PC ne disposant de cette posibilité nous allons maintenant réaliser un cd de boot.

Etape 5 : Réaliser un cd bootable
L'objectif est de réaliser un cd bootable sur lequel on place uniquement le noyau et le initrd précédemment généré. Cela permet de démarrer sur le cd afin de charger le noyau et d'engager le processus de reconnaissance du disque USB, ensuite le boot se poursuit sur le disque USB. Pour réaliser un cd de boot vous avez besoin des outils suivants : syslinux (disponible ici syslinux) , mkisofs et cdrecord
Sous debian utiliser les commandes suivantes :
apt-get install syslinux
apt-get install mkisofs
apt-get install cdrecord

Après installation du package syslinux vérifier la présence du fichier : /usr/lib/syslinux/isolinux.bin (le bootloader pour cd-rom)
Ensuite nous allons constituer notre cd-rom (dans le répertoire my_cd)

cd /tmp
mkdir my_cd
mkdir my_cd/isolinux
cp -p /usr/lib/syslinux/isolinux.bin my_cd/isolinux
monter le disque usb pour récupérer le noyau et le initrd_wait_usb.gz
mount /dev/sda1 /mnt/usb_disk
cp -p /mnt/usb_disk/boot/initrd_wait_usb.gz my_cd/isolinux
cp -p /mnt/usb_disk/vmlinuz my_cd/isolinux

Configurer le menu de boot du cd-rom (l'équivalent du fichier lilo.conf) :

vi my_cd/isolinux/isolinux.cfg
default usb
display bootmsg.txt
prompt 1
label usb
kernel vmlinuz
append root=/dev/sda1 initrd=initrd_wait_usb.gz

Nous souhaitons afficher un message lors du démarrage du cd-rom de boot.
Pour cela réalisons ce fichier bootmsg.txt
vi my_cd/isolinux/bootmsg.txt
Linux en poche.
Boot debian on USB disk
Press enter to boot.

Il ne reste plus que la dernière étape, la génération de l'image iso (script create_usb_iso.sh).
export LANG=C
mkisofs -o usb_bootcd.iso -b isolinux/isolinux.bin -c isolinux/boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table -r -l /tmp/my_cd/

Vous souhaitez vérifier le contenu de votre cd, montons l'image iso avec les commandes suivantes :

mkdir /mnt/my_cd_usb_boot
mount -o loop usb_bootcd.iso /mnt/my_cd_usb_boot

Il suffit de graver cette image iso avec cdrecord ou k3b et de booter sur ce mini-cd.

Auteur : A. Cassaigne
Version : 0.04
Date : 2006-04-13

Posté par acassaigne à 16:12 - Linux en poche... - Commentaires [0] - Rétroliens [0] - Permalien [#]
« Accueil  1