Démarrer GNU/Linux sur un média amovible
Le 25 octobre 2008, à 2:16 par Ulhume...

Le but est ici de démarrer notre GNU/Linux préfére sur des médias "exotiques", en l'occurence CD-ROM, Carte Compact Flash et clef USB. Les cas d'utilisation sont multiples allant de la transformation d'un live CD en disque USB bootable au démarrage d'une machine sur le réseau via NFS.

Historique (tout afficher)
  • v2 - Mise à jour (2008-10-25 15:06)

La source

La source que vous utilisez dépendent des usages. Il peut s'agir d'un petit kernel monolithique qui ne connait que NFS pour démarrer sur un partage réseau, un live CD que l'on veut transformer en clef USB, ou encore un clef ou un CD d'installation par internet.

Pour faire simple nous allons utiliser ce tutoriel pour créer un dossier contenant un linux complet. Ce dossier va service de source à notre média, car une fois qu'il saura booter, il faut bien lancer quelque chose. Dans ce qui suit, ce dossier sera ~/faux_linux.

Utilisation du CD-ROM

Pour créer un CD-ROM bootable, nous allons utiliser ISOLinux disponible en installant le paquet syslinux. Cette boite à outil va nous permettre de créer l'image iso à graver.

Commençons par fabriquer notre dossier "à graver" :

root#mkdir -p ~/bootstrap/isolinux
root#cd ~/bootstrap/isolinux
 
# copie du nouveau kernel
root#cp ~/faux_linux/* bootstrap/isolinux/
 
# copie du bin d'isolinux
root#cp /usr/lib/syslinux/isolinux.bin bootstrap/isolinux
root# 

Ensuite il faut créer le fichier de configuration du bootloader bootstrap/isolinux/isolinux.cfg

bootstrap/isolinux/isolinux.cfg" nolines="true">
  default linux
  prompt 0

  label linux
  KERNEL boot/vmlinuz-2.6.27
  append initrd=boot/initrd-2.6.27 vga=788

en spécifiant les options root=/dev/nfs rw ip=dhcp nfsroot=IP_SERVEUR:/machine_lointaine et en utilisant un kernel monolithique, il est possible de démarrer sur un epartage NFS qui serait par exemple le dossier ~/faux_linux.

Ensuite ne reste plus qu'à générer l'ISO et graver le tout :

root#mkisofs -o ~/mon_micro_linux.iso -b isolinux/isolinux.bin -c isolinux/boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table bootstrap
root#cdrecord -driveropts=burnfree ~/mon_micro_linux.iso
root# 

Lorsque cdrecord a terminé, le CD est prêt à booter. Pensez à utilisez un CD réinscriptible car ça va sûrement pas marcher du premier coup Wink

Compact-Flash ou clef USB

Cette approche peut se révéler pratique si vous utilisez la machine comme lecteur multimédia. Cela évite de faire le grille-pain avec un CD de démarrage. Il nous faut du coup un adaptateur CompactFlash/IDE et une carte de très petite capacité, ou une simple clef USB.

La première étape consiste à utiliser fdisk ou parted pour supprimer les partitions existantes et en créer une nouvelle, positionné en FAT16 et avec le fanion de démarrage.

Ceci fait il faut formater en FAT16 avec mkdosfs. A noter que j'ai eu pas mal d'essais infructueux en FAT32.

root#mkdosfs -F 16 /dev/sdb1
root# 

Notre disque ayant été correctement préparée, partitionnée, reste à lui coller un MBR. Le bon outil que j'ai trouvé pour cette tâche est ms-sys. Pour l'utiliser, procédez comme suit :

root#tar -zxvf ms-sys-2.1.0.tgz
root#cd ms-sys-2.1.0
root#make
root#cd bin
root#./ms-sys -d /dev/sdb
DOS/Windows NT master boot record successfully written to /dev/sda
 
root#./ms-sys /dev/sdb
/dev/sdd has an x86 boot sector,
it is a Microsoft DOS/NT/95A master boot record, like the one this
program creates with the switch -d on a hard disk device.
 
root#sync
root# 

Voilà, le disque est correctement préparé, nous devons encore installer SYSLinux :

syslinux /dev/sdb1

Dernière étape, il nous faut recopier les fichiers de ~/faux_linux et créer à la racine un fichier syslinux.cfg, le même que pour le CD-ROM.

Voilà, c'est terminé, il ne reste plus qu'à redémarrer pour vérifier que tout se passe sans problèmes.

Commentaires

Jérôme, le 28 July, 2008 - 15:32

Salut,

Article très intéressant, comme à l'accoutumée, d'autant plus que c'est un sujet que j'ai récemment abordé dans mon entreprise.

Apparemment, une solution alternative (si c'est la non-gestion du PXE qui est bloquante) est d'utiliser un binaire gérant ce dernier (http://etherboot.org/wiki/index.php).

Après bien sûr, il faut que le serveur soit compatible derrière, et il faut bien stocker ce binaire quelque part, sur un CD, ou tout autre support bootable (géré par le BIOS).

Bien sûr, dans un environnement sans PXE, sans disque, ta solution est la seule existante...

Ulhume, le 28 July, 2008 - 15:41

PXE est pas mal, il m'a même bien aidé pour installer Mandriva sur certaines machines (genre l'U810) mais le soucis est qu'il faut aussi une infrastructure PXE en face et surtout un BIOS qui gère le PXE si l'on n'a pas de carte magique Smiling Sur la carte mini-itx que j'utilise ici, le boot PXE n'est pas dispo, donc je ne peux pas l'utiliser de manière directe. Ma seule solution qui me reste est de mettre un boot PXE sur une flash ou sur un CD Smiling

rodhia, le 25 October, 2008 - 11:24

Bonjour,
Je bloquais sur la "bootabilisation" de la clé USB, peut être parce que j'étais en FAT32? Enfin bon j'essaie ta méthode, merci ! Big grin

Ulhume, le 25 October, 2008 - 12:43

@rodhia je n'ai jamais réussi à faire fonctionner cette manipulation en fat32, avec USB ou flash. Avec une petite flash j'utilise FAT12 et sinon fat16.

Dab, le 25 October, 2008 - 14:02

Ton pb de FAT32 ne serait pas lié à l'initrd ? Celui ci contient bien le module vfat ?
gunzip < ton_initrd.gz | cpio -i --make-directories

Ulhume, le 25 October, 2008 - 14:49

@Dab non car je n'utilise pas initrd dans ce genre de cas de figure (kernel monolithique). En plus lorsque je dis que ça démarre pas, c'est au niveau du BIOS que ça coince. Linux n'est même pas encore arrivé.

tuxce , le 27 October, 2008 - 12:32

pour la clé usb/carte flash, grub peut aussi faire l'affaire ou si c'est une clé dédiée à cette usage et ne comportant qu'une seule partition, créer un systeme de fichier directement sur /dev/sdX permet de n'utiliser que syslinux pour la rendre bootable.

par contre pour les périphériques flash, le démarrage dépend du pc, sur le msi wind par exemple, le lecteur flash est connécté sur l'usb ce qui permet un démarrage dessus, alors que sur un dell xps, le lecteur est branché différemment (http://www.ideastorm.com/article/show/76005/Boot_from_SD_card_BIOS_option), le bios ne permet pas de démarrer dessus.

Ulhume, le 27 October, 2008 - 14:49

@tuxce l'idée est pas idiote en effet, c'est un peu moins "portable" que la solution classique mais pourquoi pas. Ceci dit, tu dois toujours résoudre le problème basique d'un boot sur USB/Flash.

Poster un nouveau commentaire

Le contenu de ce champ est gardé secret et ne sera pas montré publiquement.
  • Allowed HTML tags: <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd>
  • To highlight piece of code, just surround them with <code type="language"> Your code &tl;/code>>. Language can be java,c++,bash,etc... Everything Geshi support.
  • Les lignes et les paragraphes vont à la ligne automatiquement.
  • Textual smileys will be replaced with graphical ones.
  • Les adresses de pages web et de messagerie électronique sont transformées en liens automatiquement.

Plus d'informations sur les options de formatage

Connexion utilisateur
Les derniers bavardages...