Non è un segreto che Grub2 potesse dare un po’ di grane nel riconoscimento automatico dei “cugini” kernel… Eh si, se installiamo Grub2 a partire già da Ubuntu Karmic, questo non si sognerà mai e poi mai di riconoscere da solo, ad esempio, il kernel di Mandriva 2010… perchè? Beh, gli sviluppatori non si pronunciano in merito.. ma sembra che stiano lavorando per ovviare al problema. Intanto voglio esservi utile, ed insegnarvi come aggiungere manualmente una distribuzione al menu di Grub2 (sollecitata, per la verità, anche da Giorgio Scubla che mi ha fatta appassionare al suo “caso”… :) :) )
Un brevissimo preambolo: dovete avere ben presente su quale disco rigido e su quale partizione avete installato il sistema operativo (o i sistemi operativi) che volete aggiungere, altrimenti Grub2 vi ripagherà con un antipaticissimo messaggio di errore “FILE NOT FOUND”. Tenete presente che il sistema di numerazione è leggermente cambiato rispetto a Grub : il numero associato al disco rigido parte sempre da 0, quello associato alla partizione però, questa volta, parte da 1. Quindi, se ad esempio abbiamo installato il sistema operativo da aggiungere sulla quinta partizione del primo disco rigido, andremo a dare in pasto a Grub2 (hd0,5). Poniamo per esempio di voler aggiungere proprio Mandriva 2010 alla lista dei sistemi operativi avviabili da grub2. Se sapete esattamente su quale partizione di quale disco rigido è installata,allora saltate tranquillamente al punto 2. Altrimenti, continuate a leggere.
Supponiamo di avere installate due distribuzioni di Linux : la nostra Ubuntu (quella che stiamo usando) e la Mandriva su un filesystem che però non conosciamo. Piccolo trucco : il comando da terminale
ls -hal /dev/disk/by-path
vi mostrerà la struttura ad albero di come sono organizzate le periferiche fisiche. Ecco un esempio della mia configurazione:
malefika@malefikapc:~$ ls -hal /dev/disk/by-path/
totale 0
drwxr-xr-x 2 root root 180 2010-01-21 02:14 .
drwxr-xr-x 5 root root 100 2010-01-21 03:14 ..
lrwxrwxrwx 1 root root 9 2010-01-21 02:14 pci-0000:00:1d.2-usb-0:1:1.0-scsi-0:0:0:0 -> ../../sdb
lrwxrwxrwx 1 root root 9 2010-01-21 03:14 pci-0000:00:1f.1-scsi-0:0:0:0 -> ../../sda
lrwxrwxrwx 1 root root 10 2010-01-21 03:14 pci-0000:00:1f.1-scsi-0:0:0:0-part1 -> ../../sda1
lrwxrwxrwx 1 root root 10 2010-01-21 03:14 pci-0000:00:1f.1-scsi-0:0:0:0-part2 -> ../../sda2
lrwxrwxrwx 1 root root 10 2010-01-21 03:14 pci-0000:00:1f.1-scsi-0:0:0:0-part5 -> ../../sda5
lrwxrwxrwx 1 root root 10 2010-01-21 03:14 pci-0000:00:1f.1-scsi-0:0:0:0-part6 -> ../../sda6
lrwxrwxrwx 1 root root 9 2010-01-21 03:14 pci-0000:00:1f.1-scsi-1:0:0:0 -> ../../sr0
Osservate che ../../sdb è solo (ed è associato ad un lettore usb, vi dico per certo che è il lettore di schede), e anche ../../sr0 è solo (questo,invece, è il cdrom). Guardate invece ../../sda : vi presento l’hard disk! Sotto di lui, tutti i nomi delle partizioni che gli appartengono. In generale, gli hard disk (se sono più di uno) vanno in ordine di lettera : sda sarà il primo, sdb nel mio caso è il cd-rom per cui va fuori conteggio, sdc sarà il secondo, sdd il terzo…e così via. In tutti i casi, se proprio non riusciste a capire quale potrebbe essere il vostro hard disk, prendete nota di tutte le periferiche di livello superiore (i “padri”) : nel mio caso sono sda, sdb e sr0. Adesso andiamo a vedere come sono fatti (in realtà ci interessa il filesystem) uno per volta, utilizzando cfdisk (sempre da terminale):
sudo cfdisk /dev/sda
sudo cfdisk /dev/sdb
sudo cfdisk /dev/sr0
Nel mio caso, sia su /dev/sdb che su /dev/sr0 (essendo periferiche esterne non presenti al momento) cfdisk mi restituirà un bell’errore (in tal caso, premiamo il tasto q per uscire da cfdisk), mentre per /dev/sda mi mostrerà la corretta tavola delle partizioni:
cfdisk (util-linux-ng 2.16)
Unità disco: /dev/sda
Dimensioni: 60011642880 byte, 60.0 GB
Testine: 255 Settori per traccia: 63 Cilindri: 7296Nome Flag Tipo part. Tipo FS [Etichetta] Dim. (MB)
——————————————————————————
sda1 Avvio Primaria NTFS [] 8389,79
sda5 Logica Linux swap / Solaris 1077,52
sda6 Logica Linux ext3 50544,35
Vedete quella sda6 che tipo di filesystem ha? Si, Linux ext3 è potenzialmente un filesystem su cui potrebbe essere installata la nostra Mandriva.Usciamo da cfdisk premendo “q” (attenzione a non toccare nulla lì dentro.. pena un inevitabile format totale!). Non ci resta che provare,no? Sempre da terminale,montiamo quella partizione su una cartella di prova e vediamo un po’ cosa succede:
mkdir prova
sudo mount -t ext3 /dev/sda6 prova
Ora possono succedere due cose : o stiamo cercando di montare la partizione che stiamo usando (mount ci avviserà con un messaggio di errore del tipo: mount: /dev/sda6 già montato o prova occupato; mount: secondo mtab, /dev/sda6 è montato su / )…oppure abbiamo indovinato, segnamoci /dev/sda6 (la sesta partizione del primo hard disk) e andiamo al passo successivo!
Siamo rimasti, dal passo precedente, ad aver montato la partizione in cui è installata Mandriva nella directory prova. Nel caso non lo abbiate fatto, fatelo ora da terminale:
mkdir prova
sudo mount -t tipo_file_system /dev/device_su_cui_avete_installato_Mandriva prova
Adesso andiamo a vedere un pochino che kernels abbiamo disponibili:
cd prova
ls boot/vmlinuz*
Scegliamone uno, ad esempio vmlinuz-2.6.31.6-desktop-1mnb , e prendiamone nota (di solito si tende a scegliere il più recente). Adesso andiamo a cercare il rispettivo initrd, e prendiamo nota anche di questo:
ls boot/initrd*
Chiaramente dovremo scegliere l’initrd corrispondente al kernel 2.6.31.6. Riassumendo, in questo punto abbiamo scelto kernel e initrd, che sono rispettivamente
/boot/vmlinuz-2.6.31.6-desktop-1mnb
/boot/initrd-2.6.31.6-desktop-1mnb.img
Andiamo al passo successivo!
Per tutelarci da eventuali kernel panic, in seguito ad un’aggiunta o una rimozione di dischi rigidi/partizioni dal nostro sistema, vi insegno un’altra cosa: una partizione può essere anche identificata, oltre che con il suo percorso (/dev/sda6), tramite una sequenza esadecimale chiamata UUID (che definisce i cluster racchiusi in una partizione)..in genere, l’UUID è univoco per ogni partizione. Andiamo a vedere l’UUID della nostra (sda6):
ls -hal /dev/disk/by-uuid/ | grep sda6
In output avrete una cosa del tutto simile a questa : lrwxrwxrwx 1 root root 10 2010-01-21 03:14 e9a6da1e-1a7e-4c1f-af4c-2ad965b67cb0 -> ../../sda6. Il e9a6da1e-1a7e-4c1f-af4c-2ad965b67cb0 è l’UUID della nostra partizione : prendiamone nota.
Abbiamo quasi finito. Un altro poco di pazienza e sarà fatta! Riassumendo, abbiamo capito dal punto uno che la partizione su cui è installata la nostra mandriva è /dev/sda6 (sesta partizione del primo disco rigido), e che quindi dovremo dare in pasto a Grub2 (hd0,6); nel punto due abbiamo selezionato Kernel e Initrd, e poc’anzi,nel punto 3 abbiamo ricavato l’UUID della partizione di sistema : ora mettiamo tutto insieme. Creiamo un nuovo file (facendo attenzione a mettere un numero più grande di 05 davanti, in quanto 00 e 05 devono essere sempre i primi)..chiamiamolo,ad esempio, 15_mandriva (numerandolo secondo il criterio che ho spiegato in questo articolo). Da terminale, digitiamo:
sudo gedit /etc/grub.d/15_mandriva
Inseriamo quanto segue:
#!/bin/sh
cat << EOF
echo "Inserisco Mandriva alla lista di Grub2" >&2
menuentry "Mandriva 2010 (su /dev/sda6) " {
insmod ext2
set root=(hd0,6)
search --no-floppy --fs-uuid --set e9a6da1e-1a7e-4c1f-af4c-2ad965b67cb0
linux /boot/vmlinuz-2.6.31.6-desktop-1mnb
root=UUID=e9a6da1e-1a7e-4c1f-af4c-2ad965b67cb0 ro quiet splash
initrd /boot/initrd-2.6.31.6-desktop-1mnb.img
}
Vi spiego linea per linea cosa c’è tra le parentesi graffe:
insmod ext2: dovrebbe essere il filesystem con cui è stata formattata la partizione (anche se la mia è ext4, e funziona tranquillamente anche facendo mangiare ext2 a grub)..consiglio di prenderlo per buono e lasciarlo così come è;set root=(hd0,6) : la posizione della partizione che abbiamo trovato al punto 1; linux /boot/vmlinuz-2.6.31.6-desktop-1mnb: il kernel che abbiamo scelto per l’avvio al punto 2;search --no-floppy --fs-uuid --set e9a6da1e-1a7e-4c1f-af4c-2ad965b67cb0 : ricerca della periferica (qualora dovesse fallire prima) tramite l’UUID che abbiamo ricavato al punto 3;root=UUID=e9a6da1e-1a7e-4c1f-af4c-2ad965b67cb0 ro quiet splash : ancora direttive sulla partizione e sull’UUID (sempre quello che abbiamo ricavato al punto 3);initrd /boot/initrd-2.6.31.6-desktop-1mnb.img:l’initrd corrispondente al kernel scelto (ricavato anch’esso al punto 2);Ora salviamo il file, chiudiamo gedit e, da terminale, diamo i seguenti comandi:
sudo chmod a+x /etc/grub.d/15_mandriva
sudo update-grub2
Abbiamo finito! Quando riavvierete la macchina, dovreste avere una voce in più in grub2 relativa a Mandriva 2010, perfettamente funzionante!
Ho cercato di tenermi sul più generale possibile: questo procedimento dovrebbe funzionare, oltre che con Mandriva, anche con tutte le altre distribuzioni! In caso di problemi o chiarimenti, come al solito,non esitate a lasciare un commento.
Commenti Lasciati