GRUB Error 18 Error 18 Error 18: Selected cylinder exceeds maximum supported by BIOS COSA SIGNIFICA QUESTO ERRORE? Spesso e volentieri si installa Linux in dual boot con Windows e siccome Windows è di norma già presente, lo spazio dedicato a Linux si trova a fine disco. Succede in questi casi di trovarsi davanti un bel “Error 18” di GRUB e non riuscire quindi ad avviare né Linux né Windows. Questo è dovuto al fatto che non semrpe il BIOS è in grado di leggere l’intero disco e di conseguenza non riesce a caricare il kernel e proseguire nel processo di boot. Il problema quindi non è correlato a Linux.; sarebbe successa la stessa cosa con qualsiasi altro sistema operativo se installato nella stessa posizione. GRUB non riesce a leggere il suo file di configurazione e di conseguenza non si riesce ad avviare nessun sistema operativo installato. La soluzione veloce per rendere Windows avviabile è inserire il disco di installazione di Windows XP, entrare nella console di ripristino e digitare “fixmbr”. Linux resta comunque installato e noi lo vogliamo usare. COME AVVIARE IL NOSTRO SISTEMA GNU/LINUX. Dobbiamo creare una partizione di boot all’inizio del disco in modo che il BIOS riesca a caricare il kernel. Una volta caricato il kernel, il processo di boot può continuare poiché il kernel riesce a leggere l’intero disco. In realtà è probabile che non possiamo liberare spazio all’inizio del disco poiché vi sono già altri dati o sistemi operativi. L’escamotage è quello di usare una chiavetta usb con una piccola partizione di boot e avviare quindi il computer da usb. L’articolo si applica ad entrambi i casi ma prendiamo in esame quello della chiavetta usb che è un po’ più complesso. L’unica differenza tra i due è che la partizione di boot si trova su un device diverso (sdb) da quello della partizione di sistema (sda). IMPORTANTE: Si presuppone che la situazione di partenza sia una distribuzione linux installata a fine disco avendo /dev/sda5 come partizione di swap e /dev/sda6 come partizione di root (/). PROCESSO: 1. 2. 3. 4. 5. 6. Verificare il BIOS Preparare la flash memory Configurare GRUB (/boot/GRUB/menu.lst) Configurare /etc/fstab Installiamo GRUB sull’MBR della chiavetta Avviamo Linux! NOTA: Il nodo della questione sta nel capire i punti di vista di GRUB e del kernel. 1. VERIFICARE IL BIOS Non tutte le schede madri supportano il boot da usb, specialmente quelle datate. Impostar la sequenza di boot in modo che parta prima da cdrom, poi da usb ed in fine da disco rigido. 2. PREPARARE LA FLASH MEMORY Eseguiamo il boot da un CD live (la chiavetta può essere già presente o inserita dopo il boot, non fa differenza). Il disco fisso interno si chiamerà /dev/sda e la chiavetta /dev/sdb. Tramite un programma di partizionamento (es: cfdisk) creiamo una partizione primaria di tipo ext3 all’inizio della chiavetta (bastano 50Mb ma potete farla più grande se avete diversi kernel). Nota: Ricordatevi che, quando si creano le partizioni, i device devono essere smontati! Una volta creata la partizione la dobbiamo formattare per renderla scrivibile: mkfs.ext3 /dev/sdb1 Ora che la nostra nuova partizione è pronta, la montiamo e montiamo anche la partizione di Linux. mkdir mkdir mount mount /mnt/sda6 /mnt/sdb1 /dev/sda6 /mnt/sda6 –t ext3 /dev/sdb1 /mnt/sdb1 –t ext3 Copiamo il contenuto della cartella di boot sulla chiavetta cp –a /mnt/sda6/boot/* /mnt/sdb1 Sulla partizione di Linux, teniamo come backup la vecchia cartella di boot semplicemente rinominandola e creaimo una nuova cartella vuota da usare come punto di montaggio mv /mnt/sda6/boot /mnt/sda6/boot.old mkdir /mnt/sda6/boot #(successivamente la potremo eliminare) 3. CONFIGURARE GRUB Attenzione: è facile fare confusione d’ora in vanti! Dal momento che il sistema si avvia da chiavetta usb, essa sarà SEMPRE riconosciuta DA GRUB (ripeto, da GRUB, non da linux) come primo device: (hd0). Una volta che grub si sarà avviato, caricherà il kernel. Il kernel vede come primo disco il disco interno (non la flash memory come fa GRUB). Questo è molto importante poichè nelle opzioni di boot del kernel dobbiamo passare il nome della partizione di sistema con la nomenclatura dell kernel. Se sbagliamo questo parametro, vedremo GRUB avviarsi ma finire in una busy box (una shell di emergenza) poichè Linux non riesce a caricare il resto del sistema operativo. Veniamo alla configurazione Attualmente nel nostro /boot/GRUB/menu.lst troveremo qualcosa come questo title GNU/Linux root (hd0,5) kernel /boot/vmlinuz-2.6.26-6-686 root=/dev/sda6 ro quiet splash initrd /boot/initrd.img-2.6.26-6-686 boot che va modificato in questo modo per usare la nuova partizione di boot title GNU/Linux root (hd0,0) kernel (hd0,0)/vmlinuz-2.6.26-6-686 root=/dev/sda6 ro quiet splash initrd (hd0,0)/initrd.img-2.6.26-6-686 boot Spiegazione Ricordiamo che l'istruzione root (hdx,x) indica dove è installato grub, cioè la partizione di boot). root=/dev/sdxy è il parametro che dice al kernel dove di trova la partizione di sistema. (hd0,0) è la prima prima partizione del primo device (secondo grub), cioè la nostra partizione di boot. E’ necessario anteporla al nome del kernel, proprio per istruire GRUB sulla sua posizione. Non si scrive “/ boot/vmlinuz…” perché la partizione NON contiene la cartella boot ma il suo contenuto. Notare che root=/dev/sda6 era già corretto e non va quindi modificato. Il kernel chiama i device sempre allo stesso modo indipendentemente da dove esso venga caricato. 4. CONFIGURIAMO LINUX PER RICONOSCERE LA NUOVA PARTIZIONE DI BOOT (/etc/fstab) La nostra partizione di boot non si trova sul disco fisso sda ma sdb, nella prima partizione primaria (sdb1). Dobbiamo informare Linux di questo aggiungendo la riga /dev/sdb1 /boot ext3 defaults 0 0 nel file /etc/fstab 5. INSTALLIAMO GRUB SULL’MBR DELLA CHIAVETTA Per rendere la chiavetta avviabile, è necessario installare il boot loader (lo stage 1) sul suo MBR. Apriamo una console e digitiamo: grub > root (hd1,0) > setup (hd1) > quit le istruzioni root e setup indicano rispettivamente: dove si trova la partizione di boot dove va installato lo stage 1 nota: stiamo dando i comandi dal live cd quindi la chiavetta è vista come secondo disco (hd1). 6. AVVIAMO LINUX Entriamo nel BIOS e verifichiamo la sequenza di boot impostando usb come primo device. Verifichiamo che la chiavetta sia inserita e avviamo il computer. Dovrebbe presentarsi GRUB che ci permette di lanciare Linux e, se configurati in menu.lst, anche gli altri sistemi operativi prensenti. Se la chiavetta non è inserita, partirà Winsows. Preso spunto dall'articolo http://wiki.Linuxquestions.org/wiki/GRUB#Errors_and_solutions