GRUB2 ed il boot delle immagini ISO

Ho utilizzato una vecchia pendrive da 2GB per poterci inserire un paio di ISO di CD che potrebbero servirmi.

  • Identificare qual’è il device che ubuntu associa al pendrive
  • $ sudo fdisk -l
  • la formattazione del pendrive non è obbligatoria; si può passare direttamente alla fase di installazione di GRUB2
  • formattare la pendrive con una etichetta e montarla per l’installazione di GRUB (le due variabili VOL (etichetta del volume sul pendrive) e DEV(device scoperto nel passo precedente) sono utilizzate per comodità
  • $ VOL=BOOTME
  • $ DEV=/dev/sdg
  • $ sudo mkfs.vfat -n ${VOL} ${DEV}1
  • se il filesystem su DEV è montato il comando genera un errore; una volta creato il filesystem col precedente comando la chiavetta USB si potrà montare tramite il menu Risorse dell’interfaccia grafica (che monterà il dispositivo sotto /media) oppure manualmente.
  • con grub-install si installa tutto il necessario per poter avviare la pendrive
  • $ sudo grub-install –no-floppy –root-directory=/media/${VOL} ${dev}

La chiavettà USB è pronta per essere scelta come boot device dal BIOS; Prima di poterla utilizzare si devono ricopiare le ISO che GRUB metterà a disposizione dal suo menu ed istruirlo tramite il grub.cfg .
Sul pendrive è presente la cartella /boot/grub con i moduli che grub può caricare per accedere ai diversi device e filesystems.
Il file per configurare GRUB2 (in GRUB v1.x si chiamava menu.lst) è /boot/grub/grub.cfg .
Le immagini ISO e BIN possono essere messe ovunque nella chiavetta; In questo caso risiederanno in /boot/images :
/boot/images/dsl-4.4.10.iso DamnSmalLinux
/boot/images/memtest86+-4.00.bin Memory Test
/boot/images/ubuntu-9.10-desktop-i386.iso Ubuntu Karmi Koala
Si apra /boot/grub/grub.cfg con un editor di testo.
Dato che questo particolare GRUB dovrà caricare file contenuti in un filesystem FAT come il suo stesso file di configurazione mi sono permesso di semplificare all’estremo la configurazione includendo solo quello che mi interessa:

menuentry “LINUX – Ubuntu 9.10 32bit Karmi Koala” {
loopback loop /boot/images/ubuntu-9.10-desktop-i386.iso
linux (loop)/casper/vmlinuz boot=casper iso-scan/filename=/boot/images/ubuntu-9.10-desktop-i386.iso noeject noprompt —
initrd (loop)/casper/initrd.lz
}

menuentry “LINUX – Damn Small Linux 4.4.10” {
loopback loop /boot/images/dsl-4.4.10.iso
linux (loop)/boot/isolinux/linux24 ramdisk_size=100000 init=/etc/init lang=us apm=power-off vga=791 toram nomce
initrd (loop)/boot/isolinux/minirt24.gz
}
menuentry “TEST – Memory test (memtest86+) v4.00” {
linux16 /boot/images/memtest86+-4.00.bin
}
menuentry “TEST / Memory test (memtest86+, serial console 115200n8)” {
linux16 /boot/images/memtest86+.bin console=ttyS0,115200n8
}

Il comando loopback permette di montare ed accedere al filesystem ISO9660 contenuto nei file ISO.
Non ho bisogno di caricare altri moduli tramite insmod per accedere a filesystems come ext3, ntfs o hpfs visto che ho tutto sulla chiavetta.