Repository 32bit  Forum
Repository 64bit  Wiki

Linux su unita' usb nei pc con bios privi di "boot from usb".

Da Slacky.eu.
Versione delle 13:15, 20 ott 2007, autore: Legionario (Discussione | contributi)

(diff) ← Versione meno recente | Versione attuale (diff) | Versione più recente → (diff)


Indice

Introduzione

Le istruzioni contenute in questo tutorial ci consentiranno di installare e di utilizzare una distribuzione Linux Slackware su una periferica usb anche se il nostro pc è privo del riconoscimento, in fase di boot, di tali unità.

Può risultare utile nei seguenti casi:

  • computer piuttosto datati e privi di unità floppy;
  • computer aziendali sui quali è vietato montare sistemi operativi diversi da quelli pre-installati;
  • computer che perdono la garanzia se si modifica la tabella delle partizioni degli hard disk;
  • computer con hard disk pieni;
  • computer con settori dell'hard disk corrotto tranne quelli riservati al Master Boot Record (MBR);
  • nel caso si voglia utilizzare un'unità esterna per non rischiare di compromettere i dati dell'hard disk interno;
  • per avere comunque massima portabilità della propria linux box.

Questo tutorial è stato testato su un hard disk esterno da 360Gb con una Slackware 12.0.

Requisiti

  1. Dvd o cd di installazione di Slackware (nel mio caso ho utilizzato la versione 12 ma vanno bene anche quelle precedenti)
  2. Periferica di archiviazione di massa usb - di seguito indicata come /dev/sda
  3. Hard disk interno con almeno il settore MBR funzionante (sto lavorando anche per una configurazione priva di hard disk interno) - di seguito indicato come /dev/hda
  4. Corno rosso e collana d'aglio al collo! :-)

Passaggi

  1. Installazione Slackware 12
  2. Ricompilazione kernel
  3. Creazione initial ram disk
  4. Modifica e caricamento lilo nell'mbr

Installazione

Avviare il sistema dal dvd della Slack12 e far partire il processo d'installazione nell'hard disk esterno (nel nostro caso effettueremo l'installazione nella partizione /dev/sda1) con

# setup /dev/sda1

Importante: accertatevi che non vi sia nessun'altra unità usb attaccata al computer!

Ricompilazione kernel

Al termine dell'installazione riavviare il sistema dal dvd di slack e al prompt di root montare la partizione linux dell'HD usb:

# mount -t ext3 /dev/sda1 /mnt -o rw

Se ricevete il seguente output

# mount: special device /dev/sda1 does not exist

Vorrà dire che il sistema ancora non ha riconosciuto l'HD usb, per cui digitate

# rescan-scsi-bus -l

e ripetete il montaggio. Se ancora non avete risolto inviate il seguente comando ripetutamente finchè non visualizzerete l'unità esterna:

# fdisk -l

Solo la seconda volta sono riuscito a visualizzare la periferica esterna. La prima visualizzavo questo:

Disk /dev/hda: 160.0 GB, 160000000000 bytes
255 heads, 63 sectors/track, 19452 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
  Device Boot      Start         End      Blocks   Id  System
/dev/hda1               1           7       56196   de  Dell Utility
/dev/hda2   *           8       19452   156191962+   7  HPFS/NTFS

La seconda finalmente è magicamente comparso il mio hd esterno:

Disk /dev/hda: 160.0 GB, 160000000000 bytes
255 heads, 63 sectors/track, 19452 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
  Device Boot      Start         End      Blocks   Id  System
/dev/hda1               1           7       56196   de  Dell Utility
/dev/hda2   *           8       19452   156191962+   7  HPFS/NTFS
Disk /dev/sda: 360.0 GB, 360080695296 bytes
255 heads, 63 sectors/track, 43777 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
  Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *           1       12450   100004593+  83  Linux
/dev/sda2           12451       12575     1004062+  82  Linux swap
/dev/sda3           12576       43777   250630065    c  W95 FAT32 (LBA)

Quindi ripetete il montaggio di cui sopra e fate un chroot in /mnt

# chroot /mnt

Procedete alla ricompilazione del kernel (per i dettagli vedi: Compilazione e ricompilazione Kernel su Slackware).

N.B.: attivate come built-in il file system della partizione linux. Se avete l'ext3, come nel mio caso, attivate anche il supporto per jbd!

N.B.: il CONFIG_PARTITION_ADVANCED potrebbe darvi dei problemi, per cui se proprio non potete farne a meno (nella maggioranza dei casi non serve) disattivatelo!

Creazione initial ram disk

L'initial RAM disk è un file system root temporaneo che viene caricato dal kernel prima che il "reale" root file system sia montato. Permette il montaggio di quest'ultimo grazie al precaricamento in memoria di alcuni eseguibili e drivers (moduli). Nel nostro caso serve a far riconoscere il file system e, prima di tutto, la periferica usb al sistema, in modo tale da aggirare il problema del mancato riconoscimento della stessa da parte del bios. Procediamo come segue.

Entriamo in /boot e creiamo l'initrd con mkinitrd:

/boot# mkinitrd -c -k 2.6.21.5 -m jbd:ext3:usbcore:scsi:ehci:uchi -f ext3 -r /dev/sda1

N.B.:l'esempio relativo a mkinitrd fatto da Patrick nel file README.initrd è errato perchè non vi ha incluso jbd.

Ecco il significato delle singole opzioni di mkinitrd:

-c 
cancella il ramo da precedenti eventuali creazioni dell'initrd.
-k 2.6.21.5 
specifica il kernel. N.B.: i più attenti potrebbero notare una differenza tra la versione del kernel appena specificato e quello risultante da "uname -r" (2.6.21.5-smp). Non fatevi ingannare perchè quest'ultima versione del kernel è quella caricata dal dvd di slack in fase di boot, mentre voi dovete specificare quella che avete effettivamente installato (2.6.21.5).
-m 
specifica i moduli da precaricare in fase di boot: ext3 non può MAI fare a meno di jbd; scsi perchè le unità esterne vengono viste come periferiche scsi; usbcore per il riconoscimento del bus usb; ehci e uchi servono per il riconoscimento delle porte usb 2.0. N.B.: se avete solo porte usb 1.1 dovete sostituire ehci con ohci, mentre se avete anche le porte usb 1.1 dovete aggiungere ohci;
-f 
specifica il file system.
-r 
specifica la root.

Ora in /boot entrate nella directory appena creata initrd-tree. Ignorate il contenuto di initrd-tree/lib/modules/2.6.21.5 e del file load_kernel_modules, potrebbero trarvi in inganno.

Apriamo il file init e inseriamo una pausa di 10 secondi (meglio stare larghi con i tempi, tanto potete modificarla in qualsiasi momento) necessaria per dare tempo al sistema di riconoscere con calma l'unità usb e caricarne i relativi moduli. Questo delay è, nella maggior parte dei casi, indispensabile!!

/boot/initrd-tree# vi init

inseriamo uno sleep 10 esattamente in questo punto:

.........
.........
#            There's an example in here.  To actually use it, you'll
#            need to make it executable:
#
#                chmod 755 load_kernel_modules
echo "Delay per il riconoscimento dell'unita' usb"
sleep 10
INITRD=`cat /initrd-name`
ROOTDEV=`cat /rootdev`
ROOTFS=`cat /rootfs`
LUKSDEV=`cat /luksdev`
.........
.........

Salvate, uscite da vi e tornate in /boot, quindi salvate la modifica dell'initrd dando semplicemente mkinitrd senza opzioni:

/boot/initrd-tree# cd ..
/boot# mkinitrd
1477 blocks
/boot/initrd.gz created.
Be sure to run lilo again if you use it.

Modifica e caricamento di lilo nell'MBR

A questo punto non vi resta che modificare il lilo.conf, specificando l'hard disk interno sul cui MBR vogliamo installare lilo (nel mio caso dev/hda) e inserendo il path dell'immagine di initrd (deve essere messo esattamente nel punto in cui l'ho messo io). Riporto qui di seguito il mio lilo.conf

/boot# vi /etc/lilo.conf
# LILO configuration file
# generated by 'liloconfig'
#
# Start LILO global section
boot = /dev/hda
prompt
lba32
menu-title = "Legionario di Fiume"
message=/boot/messaggio.txt
vga = 790
image = /boot/vmlinuz
 initrd = /boot/initrd.gz
 root = /dev/sda1
 label = slack12
 read-only  # Partitions should be mounted read-only for checking
# Linux bootable partition config ends

Salvate le modifiche e caricate lilo nell'MBR:

/boot# lilo -v

Ignorate i 'warnings' che vi compaiono nell'output.

Se avete messo aglio a sufficienza intorno al collo, al prossimo riavvio del sistema avrete la vostra cara Slack perfettamente funzionante sulla vostra unità usb!

Conclusioni

Questa guida non ha la presunzione di essere un punto di riferimento, ma, più semplicemente, ho riportato in essa la mia esperienza diretta.

Si ringrazia la comunità di Slacky.eu e, in particolare, luci0 per la sua disponibilità.

- Alessio Grillo

Strumenti personali
Namespace

Varianti