Boot Copertina Indice |
Articoli
Come creare un disco di root
In questo articolo vi descriveró come creare un disco di boot e root. Il disco di boot contiene il kernel e il necessario per eseguire il boot del pc. Non c'è bisogno di avere un boot loader (come lilo) per avviare il pc, ma puó essere usato anche il kernel stesso, se si ha cura di copiarlo all'inizio del boot sector(settore 0 , cilindro 0) con il comando:
oppure usando il comando dd:
Nota: il dischetto non deve essere montato.
L'utilizzo più comune di un disco di boot e di root è per il ripristino di un sistema bloccato o per il test di un nuovo kernel; in questi casi non c'è bisogno di lilo. In questi casi si può dunque usare la procedura descritta qui sopra. Il kernel va configurato in modo che supporti tutto il vostro hardware e il ramdisk. Per fare questo bisogna configurare il kernel prima di compilarlo... ma questa è un'altra storia. L'opzione ramdisk serve per usare la memoria ram come disco di root. È utile perché, oltre a liberare il drive del floppy, il sistema diventa molto più veloce, dato che i file vengono caricati da ram e non da floppy, che è notoriamente lentissimo. Una volta che abbiamo disponibile un kernel configurato e compilato, bisogna settare il ROOT device a /dev/fd0, usando il comando rdev:
Vediamo ora come si crea un disco di root. Il disco di root contiene un filesystem (di tipo MINIX o ext2), che conterrà tutto il necessario per lavorare con un sistema Linux. Per creare un filesystem su un dischetto basta fare:
Vediamo ora quali file vanno copiati nel dischetto. Per prima cosa bisogna creare nel dischetto le directory: bin, etc, dev, lib, proc, sbin, usr, mnt. I programmi necessari per ripristinare il sistema (lilo, mkfs, tar, gzip, ftape, mount ecc.) andranno copiati in una delle directory bin o sbin. Nella directory dev andranno creati i vari devices, con mknod, se si conoscono i major e minor number di ogni device, o, più facilmente, con lo script di shell MAKDEV, che si trova in genere nella directory /dev. In ogni caso si consiglia la lettura della relativa man page. Un altro modo è copiare i file di device già esistenti nella directory /dev dell'hard disk, usando l'opzione -dpR, che copia i link simbolici e non i file a cui i link puntano. Fatto questo vanno copiati in etc i file ld.so.cache e ld.so.conf, i file di inizializzazione per la shell ed il comando ls (DIR_COLORS) ed il file fstab (opzionale). Vediamo adesso la dir lib/, che è la piu complicata. Da notare che quello che segue è valido per un sistema ELF. Saprete certamente che un programma linkato dinamicamente (la maggior parte dei programmi Unix) ha bisogno di librerie per funzionare. Per vedere quali librerie usa ogni programma si usa il comando
ldd programma
Bisognerà dunque copiare tutte le librerie usate dai programmi copiati nel dischetto, oltre a ld.so, ld-linux.so.1 ed il file a cui puntano. ld.so e ld-linux.so.1 sono dei link dinamici che servono per linkare dinamicamente gli eseguibili con le librerie necessarie. Per quanto riguarda la dir proc non c'è bisogno di copiarci nessun file; basta che esista e che venga montata con il comando:
mount /proc /proc -t proc Anche se non abbiamo usato init, risparmiando un po' di spazio, non sempre riusciamo a mettere nel dico di root tutti i comandi che ci servono. Si può ovviare a questo inconveniente comprimendo il disco. Vediamo come si fa. 1)Prima di tutto bisogna creare una directory sull hard disk, ad esempio pippo, all'interno della quale si creerà un'immagine fedele di tutto il disco di root. 2) Supponiamo che il vostro disco di root non compresso occupi 4Mb (4086 blochi). Dopo aver creato la directory, bisogna crearci dentro un filesystem ext2 da 4Mb. Senza dover ripartizionare il disco, basta dare i comandi
dd if=/dev/zero of=/dev/ram bs=1k cout=4096
mke2fs -vm0 /dev/ram 4096
Assicuratevi che il vostro kernel abbia il supporto per il ramdisk... ...quello che abbiamo fatto con questi comandi è creare un filesystem ext2 da 4Mb nel device /dev/ram, cioè nella memoria ram del vostro computer. Fatto ciò montate il device
mount /dev/ram /mnt/ -t ext2
e copiate la directory in cui avete l'immagine del disco di root in /mnt, poi smontatela:
cp pippo/* /mnt/ umount /mnt
Adesso bisogna comprimere il contenuto di /dev/ram e copiarlo sul dischetto: dd if=/dev/ram bs=1k count=4096|gzip -9v >file.gz
dd if=file.gz of=/dev/fd0 bs=1k
Va detto al kernel (del disco di boot) che il disco di root che verrà caricato in memoria sarà di 4Mb:
rdev -r /dev/fd0 49152
Attenzione: il comando con questa sintassi va bene se avet cominciato a scrivere sul disco di root dal settore 0, altrimenti a 49152 va aggiunto l'offset (cioè il settore da cui cominciare a scrivere). Questa attenzione è necessaria se avete intenzione di fare un solo disco di boot e root insieme: nel disco di boot c'è solo il kernel, che occupa circa 350Kb e va copiato dall'inizio del boot sector; sarà sufficiente quindi copiare il disco di root partendo da un offset di 400.
Per fare il reboot del sistema vanno smontati tutti i filesystem e si può premere Ctrl+Alt+Canc.
Questo è quello che ho messo nel mio disco di boot.
Boot Copertina Indice |