13/01/2011

File Grub danneggiato ubuntu non parte, ecco come ripristinare Grub da LiveCD con grub-install

grub.jpgNormalmente GRUB è già installato. Può accadere però che se viene installato per ultimo un sistema operativo che come windows ignora la presenza di altri sistemi sul disco (andando a sovrascrivere il MBR), e vuole monopolizzare il vostro pc, ci si ritrovi nella necessità di dover installare nuovamente GRUB. Oppure semplicemente è capitato di voler provare un altro boot loader e di voler poi ritornare a GRUB. Cmq la procedura da seguire per entambi i casi è la stessa. Utilizzate un liveCD per avviare il sistema e dopo l’avvio monteremo la partizione di root del sistema Linux installato sull’hard disk.

mkdir /mnt/root

mount /dev/sda3 /mnt/root

mount –bind /dev/ /mnt/root/dev/

mount -t proc none /mnt/root /proc

Ora con chroot si può cambiare al volo la partizione di root del nostro livecd:

chroot /mnt/root /bin/bash

Per usare Grub è necessario installarlo nel MBR con il seguente comando:

grub-install –no-floppy  /dev/sda

In questo modo ogni altro boot loader verrà sovrascritto e all’avvio apparirà grub che permetterà di avviare ogni sistema presente su hard disk.

Per chi è alle prime armi ecco cosa può essere utile sapere per comprendere meglio quanto scritto sopra:
Innanzi tutto cerchiamo di capire come un sistema GNU/Linux assegna i nomi ai propri device (ad es. hard disk, unità rimovibili USB, …). Un device è rappresentato come un file sotto la directory /dev .
Se si tratta di un hard disk IDE ATA il nome del dispositivo è /dev/hdXn, mentre se si tratta di un hard disk SATA o SCSI il nome del dispositivo è /dev/sdXn. Dove X sarà sempre una lettera minuscola dell’alfabeto: hda per indicare il primo disco rilevato, hdb il secondo, hdc il terzo e cosi via. Mentre n è un numero intero che a partire da 1 identifica la partizione nel disco: hda1 hda2 sono rispettivamente la prima e la seconda partizione del primo disco.
Se sapete qual’è la partizione semplicemente montatela così (supponiamo che sia /dev/sda3 ):

mkdir /mnt/root

mount /dev/sda3 /mnt/root

Se non vi dice nulla il montaggio è avvenuto e potete vedere l’elenco di file nella directory “/mnt/root” che avete appena creato…

ls /mnt/root

la directory root di linux ha (più o meno) questo contenuto:
————————————————————————————————————–

 bin    etc         initrd.img.old  mnt   sbin     tmp      vmlinuz.old boot   home        lib             opt   selinux  usr cdrom  initrd      lost+found      proc  srv      var dev    initrd.img  media           root  sys      vmlinuz  

—————————————————————————————————————

se invece siete arrivati a questo punto avendo ancora dei dubbi su quale partizione sia quella corretta, o vi rendete conto di aver sbagliato partizione date il comando:

umount /mnt/root

e riprovate a montare un altra partizione

mount /dev/sdb2 /mnt/root

ls /mnt/root

il secondo comando vi mostrerà il contenuto della directory /mnt/root

quindi se volete potete trovare il disco corretto procedendo per tentativi, montando e smontando via via le partizioni che pensate essere la partizione di root. Io in genere non mi metto a fare i calcoli che ho spiegato sopra.. Se non ricordo più qual’è la partizione di root provo a montare quelle Linux finché la trovo.

Per aiutarci nell’individuazione delle partizioni possiamo usare il comando fdisk:

fdisk -l

che produrra un output del genere (nell’esempio è presente un solo disco):

—————————————————————————————————————–

 Disk /dev/hda: 203.9 GB, 203928109056 bytes 255 heads, 63 sectors/track, 24792 cylinders Units = cilindri of 16065 * 512 = 8225280 bytes  Dispositivo Boot      Start         End      Blocks   Id  System /dev/hda1               1        7182    57688711    7  HPFS/NTFS /dev/hda2           13710       19126    43512052+  83  Linux /dev/hda3           19253       24792    44500050   83  Linux /dev/hda4            7182       13709    52428769    5  Esteso /dev/hda5            7182       13504    50781433+  83  Linux /dev/hda6           13504       13709     1647303+  82  Linux swap / Solaris  Partition table entries are not in disk order 

——————————————————————————————————————-

se ne avete uno solo (di disco) allora è quello che avete usato prima per montare la partizione. Semplicemente usatelo SENZA IL NUMERINO FINALE (questo è importante)— /dev/sda3 NO!!, /dev/sda SI!!

Altrimenti cercate di capire qual’è il disco che si avvia… “il primario”. In genere è quello che finisce con la lettera “a” (es. /dev/sda o /dev/hda).
grub-install /dev/sda (–no-floppy è opzionale)

questo comando dovrebbe riuscire automaticamente a installare grub…
ora potete riavviare la live ed estrarre il CD… se volete invece lavorare ancora potete uscire dall’ambiente di chroot
exit
e smontare la partizione procedendo a ritroso…
umount /mnt/root /proc
umount /mnt/root /dev
umount /mnt/root

Comando: grub-install
Path: /sbin/grub-install

SINTASSI
# grub-install [option] device
DESCRIZIONE

  • option indica la modalità di funzionamento di grub-install. Può assumere i seguenti valori:
    • -h | –help visualizza un aiuto sommario di grub-install;
    • -v | –version visulizza la verione di grub-install;
    • –root-directory=dir indica di installare i file di GRUB nella directory dir (per default vengono installati in ‘/’). Tale opzione è utilizzata quando si vuol installare i file in una specifica partizione (diversa da ‘/’) o in un disco rimovibile;
    • –grub-shell=file indica quale è il file eseguibile che deve fungere da shell per GRUB;
    • –force-lba indica di utilizzare la modalità LBA anche se il BIOS sembra non supportarla;
    • –recheck indica di eseguire un controllo dei dischi per ricreare il file device.map;
  • device specifica il dispositivo nel quale installare il boot loader GRUB (può essere specificato un file di dispositivo oppure un disco, o partizione, nella sintassi di GRUB);

04/03/2009

Contenuto grub

Qui sotto potete vedere la configurazione abbastanza standard del file di configurazione di grub, il file si chiama menu.lst e si trova dentro a /boot/grub/menu.lst ). Grub è il programma che consente a ubuntu di avviarsi, di default il sistema da avviare è 0 cioè il primo nell' elenco più sotto nei tilte evidenziati in grassetto , di fianco ai title ho messo fra parentesi il valore che sarebbe da asseggnare alla voce default evidenziata in grassetto, per avviare in automantico il sistema, e il timeout è settato a tre, se volete più tempo per selezionare in che modalità partire potete aumentare questo valore.

In questo caso c' è installato solo ubuntu, se ci fosse stato anche windows alla fine del file nei title ci sarebbe stata anche la voce di windows.

Per modificare questo file dovete aprirlo con i permessi d' amministratore potete usare questo comando da terminale, da applicazioni accessori terminale e digitate:

sudo gedit  /boot/grub/menu.lst

 

# menu.lst - See: grub(8), info grub, update-grub(8)
#            grub-install(8), grub-floppy(8),
#            grub-md5-crypt, /usr/share/doc/grub
#            and /usr/share/doc/grub-doc/.

## default num
# Set the default entry to the entry number NUM. Numbering starts from 0, and
# the entry number 0 is the default if the command is not used.
#
# You can specify 'saved' instead of a number. In this case, the default entry
# is the entry saved with the command 'savedefault'.
# WARNING: If you are using dmraid do not use 'savedefault' or your
# array will desync and will not let you boot your system.
default        0

## timeout sec
# Set a timeout, in SEC seconds, before automatically booting the default entry
# (normally the first entry defined).
timeout        3

## hiddenmenu
# Hides the menu by default (press ESC to see the menu)
hiddenmenu

# Pretty colours
#color cyan/blue white/blue

## password ['--md5'] passwd
# If used in the first section of a menu file, disable all interactive editing
# control (menu entry editor and command-line)  and entries protected by the
# command 'lock'
# e.g. password topsecret
#      password --md5 $1$gLhU0/$aW78kHK1QfV3P2b2znUoe/
# password topsecret

#
# examples
#
# title        Windows 95/98/NT/2000
# root        (hd0,0)
# makeactive
# chainloader    +1
#
# title        Linux
# root        (hd0,1)
# kernel    /vmlinuz root=/dev/hda2 ro
#

#
# Put static boot stanzas before and/or after AUTOMAGIC KERNEL LIST

### BEGIN AUTOMAGIC KERNELS LIST
## lines between the AUTOMAGIC KERNELS LIST markers will be modified
## by the debian update-grub script except for the default options below

## DO NOT UNCOMMENT THEM, Just edit them to your needs

## ## Start Default Options ##
## default kernel options
## default kernel options for automagic boot options
## If you want special options for specific kernels use kopt_x_y_z
## where x.y.z is kernel version. Minor versions can be omitted.
## e.g. kopt=root=/dev/hda1 ro
##      kopt_2_6_8=root=/dev/hdc1 ro
##      kopt_2_6_8_2_686=root=/dev/hdc2 ro
# kopt=root=UUID=219f497e-993d-4c93-8c16-8a0376d23a58 ro

## default grub root device
## e.g. groot=(hd0,0)
# groot=219f497e-993d-4c93-8c16-8a0376d23a58

## should update-grub create alternative automagic boot options
## e.g. alternative=true
##      alternative=false
# alternative=true

## should update-grub lock alternative automagic boot options
## e.g. lockalternative=true
##      lockalternative=false
# lockalternative=false

## additional options to use with the default boot option, but not with the
## alternatives
## e.g. defoptions=vga=791 resume=/dev/hda5
# defoptions=quiet splash

## should update-grub lock old automagic boot options
## e.g. lockold=false
##      lockold=true
# lockold=false

## Xen hypervisor options to use with the default Xen boot option
# xenhopt=

## Xen Linux kernel options to use with the default Xen boot option
# xenkopt=console=tty0

## altoption boot targets option
## multiple altoptions lines are allowed
## e.g. altoptions=(extra menu suffix) extra boot options
##      altoptions=(recovery) single
# altoptions=(recovery mode) single

## controls how many kernels should be put into the menu.lst
## only counts the first occurence of a kernel, not the
## alternative kernel options
## e.g. howmany=all
##      howmany=7
# howmany=all

## should update-grub create memtest86 boot option
## e.g. memtest86=true
##      memtest86=false
# memtest86=true

## should update-grub adjust the value of the default booted system
## can be true or false
# updatedefaultentry=false

## should update-grub add savedefault to the default options
## can be true or false
# savedefault=false

## ## End Default Options ##

title        Ubuntu 8.10, kernel 2.6.27-11-generic  (0)
uuid        219f497e-993d-4c93-8c16-8a0376d23a58
kernel        /boot/vmlinuz-2.6.27-11-generic root=UUID=219f497e-993d-4c93-8c16-8a0376d23a58 ro quiet splash
initrd        /boot/initrd.img-2.6.27-11-generic
quiet

title        Ubuntu 8.10, kernel 2.6.27-11-generic (recovery mode) (1)
uuid        219f497e-993d-4c93-8c16-8a0376d23a58
kernel        /boot/vmlinuz-2.6.27-11-generic root=UUID=219f497e-993d-4c93-8c16-8a0376d23a58 ro  single
initrd        /boot/initrd.img-2.6.27-11-generic

title        Ubuntu 8.10, kernel 2.6.27-9-generic (2)
uuid        219f497e-993d-4c93-8c16-8a0376d23a58
kernel        /boot/vmlinuz-2.6.27-9-generic root=UUID=219f497e-993d-4c93-8c16-8a0376d23a58 ro quiet splash
initrd        /boot/initrd.img-2.6.27-9-generic
quiet

title        Ubuntu 8.10, kernel 2.6.27-9-generic (recovery mode) (3)
uuid        219f497e-993d-4c93-8c16-8a0376d23a58
kernel        /boot/vmlinuz-2.6.27-9-generic root=UUID=219f497e-993d-4c93-8c16-8a0376d23a58 ro  single
initrd        /boot/initrd.img-2.6.27-9-generic

title        Ubuntu 8.10, kernel 2.6.27-7-generic (4)
uuid        219f497e-993d-4c93-8c16-8a0376d23a58
kernel        /boot/vmlinuz-2.6.27-7-generic root=UUID=219f497e-993d-4c93-8c16-8a0376d23a58 ro quiet splash
initrd        /boot/initrd.img-2.6.27-7-generic
quiet

title        Ubuntu 8.10, kernel 2.6.27-7-generic (recovery mode) (5)
uuid        219f497e-993d-4c93-8c16-8a0376d23a58
kernel        /boot/vmlinuz-2.6.27-7-generic root=UUID=219f497e-993d-4c93-8c16-8a0376d23a58 ro  single
initrd        /boot/initrd.img-2.6.27-7-generic

title        Ubuntu 8.10, memtest86+ (6)
uuid        219f497e-993d-4c93-8c16-8a0376d23a58
kernel        /boot/memtest86+.bin
quiet

### END DEBIAN AUTOMAGIC KERNELS LIST

 

tux-news-thumb.png

02/03/2009

Grub

 

Grub

 

Grub sta per (grand unified bootloader) ed è il boot loader predefinito di Ubuntu, cioè il programma che permette a ubuntu di caricarsi.

Molto semplice da utilizzare, perchè configurato attraverso un normale file di configurazione.

Questo file lo si può tovare dentro la cartella /boot/grub/menu.lst

 

default: specifica quale sistema operativo lanciare in maniera predefinita al momento del boot;

 

timeout: specifica per quanto tempo il menù della scelta del sistema operativo da lanciare debba essere mostrato all'utente prima che venga lanciato il sistema operativo di default;

 

hiddenmenu: significa che non viene mostrato il menu di GRUB ma viene eseguita una scelta, predefinita, senza chiamare in causa l'utente;

 

title: è il nome del sistema operativo. Il nome con cui viene visualizzato all'interno del menù del boot loader;

root: informa GRUB su quale dispositivo e quale partizione può essere trovato il kernel di un determinato sistema operativo;

 

kernel: specifica quale kernel deve essere lanciato nel caso in cui venisse scelta la voce di menù ad esso relativa. Le opzioni dopo la locazione sono poi passate al kernel. Nel nostro caso ro signfica read-only, e che il kernel non deve permettere una eventuale scrittura durante il processo di boot, con quiet evitiamo di mostrare a video eventuali informazioni di debug ed infine con splash mostriamo uno splash screen, come quello di Ubuntu, durante il processo di boot di un determinato sistema operativo.

 

initrd: la seguente direttiva dice a GRUB cosa fare dopo che il kernel selezionato è stato lanciato.

 

 

Questi sono solo alcuni parametri che si possono configurare.

Nella voce dafault normalmente è impostato il valore 0, quindi in automatico il sistema si avvia con il primo sistema operativo indicato nell' elenco, se mettete una partizione con windows e volete che parta in automatico, dovete contare quanti title ci sono e partendo da zero, vedere in che posizione è quella di windows, per esempio se ci sono solamente ubuntu e windows il valore da mettere è 1 visto che con lo 0 partirà ubuntu.

The_GNU_logo.png