Installare GRUB su supporto USB per renderlo avviabile.

Per quale motivo dovrei voler installare GRUB su di una chiavetta USB?
per renderla avviabile dal BIOS (bootable):

  • per installarci delle applicazione di diagnostica hardware
  • per installarci un sistema operativo completo (DamnSmallLinux, Ubuntu, ecc)
  • perché ho una vecchia chiave da 256M o 512M con cui ho voglia di fare esperimenti
  • perché ho un sistema multiboot con 3 o 4 sistemi operativi differenti e voglio che il boot manager non risieda sui dischi fissi

Ambiente: Ubuntu
File necessari: ISO di DamnSmallLinux, immagine BIN di MemTest86+
Risultato: Chiave USB avviabile con MemTest86 (diagnostica memoria RAM) e DamnSmallLinux (Sistema Operativo Linux completo)

  • ripartizionare la chiavetta USB utilizzando il gestore di partizione (SISTEMA > AMMINISTRAZIONE > EDITOR DI PARTIZIONI ) oppure fdisk; ci dev’essere un’unica partizione FAT sulla quale è stato attivato il flag BOOT.
  • dopo che la chiavetta è stata rimontata, anche manualmente, creare la struttura di cartelle visualizzate in figura. (NDT: ho preferito separare logicamente gli applicativi (contenuti in IMAGES) che GRUB proporra nel suo menu, ognuno la propria cartella)
  • installare GRUB sulla chiavetta e copiarvi sopra i files necessari al suo funzionamento:

Aprire un terminale e copiare alcuni file di GRUB necessari per l’avvio sulla chiavetta (es: /media/KINGSTON )

$ cd /boot/grub
$ cp stage1 stage2 fat_stage1_5 /media/KINGSTON/boot/grub/

Installare GRUB nel MBR della chiavetta:
$ sudo grub
grub> find /boot/grub/stage1
(hd0,0)
(hd2,0)

GRUB identifica gli hard disk secondo la sequenza logica di avvio del BIOS quindi (hd0,0) corrisponde al primo, a quello in cui è installata Ubuntu; il secondo che viene riportato è il supporto USB in cui è stato copiato il file stage1.

grub> root (hd2,0)
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)”… 16 sectors are embedded.
succeeded
Running “install /boot/grub/stage1 (hd2) (hd2)1+16 p (hd2,0)/boot/grub/stage2
/boot/grub/menu.lst”… succeeded
Done.
grub> quit

L’installazione di GRUB sul supporto USB lo rende, de facto, un boot manager pronto per essere configurato e quindi ideale per un sistema multi boot.

  • Copia delle immagini da caricare e relativa configurazione di GRUB

Per prima cosa copiare l’immagine di memtest sulla chiavetta.
Occorre la versione Pre-Compiled Bootable Binary:
$ cd ~/download
$ gunzip memtest86+-4.00.bin.gz
$ cp memtest86+-4.00.bin /media/KINGSTON/boot/images/memtest

Adesso occorre montare la ISO di DamnSmallLinux per estrarre i file che servono
$ mkdir dsl
$ sudo mount -t iso9660 -o loop dsl-4.4.10.iso dsl
$ cp dsl/KNOPPIX/KNOPPIX /media/KINGSTON/boot/images/dsl/dsl
$ cp dsl/boot/isolinux/linux24 /media/KINGSTON/boot/images/dsl/
$ cp dsl/boot/isolinux/minirt24.gz /media/KINGSTON/boot/images/dsl/
$ sync
$ sudo umount dsl && rmdir dsl

Ora che tutti i file necessari sono sul supporto rimovibile non resta che configurare /boot/grub/menu.lst ed istruire GRUB perché esegua queste immagini.
Con gedit, pico oppure nano si crea e, allo stesso tempo, edita il file menu.lst sulla chiavetta
$ gedit /media/KINGSTON/boot/grub/menu.lst
il contenuto del file menu.lst:
default 0
timeout 10
root (hd0,0)

title Damn Small Linux
kernel /boot/images/dsl/linux24 ramdisk_size=100000 init=/etc/init lang=us apm=power-off vga=791 toram nomce noapic quiet knoppix_dir=/boot/images/dsl knoppix_name=dsl
initrd /boot/images/dsl/minirt24.gz
quiet

title Memtest86 v4
kernel /boot/images/memtest/memtest86+-4.00.bin
quiet

Basato sull’articolo in inglese: http://www.freesoftwaremagazine.com/articles/grub_intro?page=0%2C1