Ricerca tra la vecchia roba

Make Bootable device

Posted: Febbraio 6th, 2007 | Author: | Filed under: General | 3 Comments »

Scrivo il titolo in inglese per fare il figo, anche perché non so come scriverlo in italiano! Comunque questo post vuole descrivere come creare dei floppy disk (ma qualcuno li usa ancora?) o dei Cd che partano all'avvio del computer…Prima di tutto bisogna comprendere la procedura di avvio di un computer (certo non vuole essere una guida dal boot al prompt di bash ma qualcosina si può dire!): nella architettura PC IBM i primi 512Byte (il primo settore) di una memoria fisica (vuoi l'hard disk, vuoi un floppy) sono denominati Master Boot Record. Volendo fare un esempio pratico, eseguite un bel

dd count=1 if=/dev/hda  of=MBR_HD.img

(sostituite hda con il device del vostro disco fisso da cui il computer parte) e vi ritroverete con il vostro MBR nel file MBR_HD.img, poi eseguite

hexdump -C MBR_HD.img

e magicamente avrete un bel dump con la trascizione in ASCII laterale del suo contenuto: si riconosce il fatto che sia un MBR dalla presenza del "numero magico" negli ultimi due byte, cioé 0x55aa; beccatevi l'esempio del mio HD con in evidenza qualche stringa di GRUB:

00000000  eb 49 90 d0 bc 00 7c fb  50 07 50 1f fc be 1b 7c  |.I….|.P.P….||
00000010  bf 1b 06 50 57 b9 e5 01  f3 a4 cb bd be 07 b1 04  |…PW………..|
00000020  38 6e 00 7c 09 75 13 83  c5 10 e2 f4 cd 18 8b f5  |8n.|.u……….|
00000030  83 c6 10 49 74 19 38 2c  74 f6 a0 b5 07 b4 03 02  |…It.8,t…….|
00000040  ff 00 00 20 01 00 00 00  00 02 80 fa 80 ca 80 ea  |… …………|
00000050  54 7c 00 00 31 c0 8e d8  8e d0 bc 00 20 fb a0 40  |T|..1……. ..@|
00000060  7c 3c ff 74 02 88 c2 52  be 8a 7d e8 44 01 f6 c2  ||<.t…R..}.D…|
00000070  80 74 55 b4 41 bb aa 55  cd 13 5a 52 72 4a 81 fb  |.tU.A..U..ZRrJ..|
00000080  55 aa 75 44 a0 41 7c 84  c0 75 05 83 e1 01 74 38  |U.uD.A|..u….t8|
00000090  66 8b 4c 10 be 05 7c c6  44 ff 01 66 8b 1e 44 7c  |f.L…|.D..f..D||
000000a0  c7 04 10 00 c7 44 02 01  00 66 89 5c 08 c7 44 06  |…..D…f…D.|
000000b0  00 70 66 31 c0 89 44 04  66 89 44 0c b4 42 cd 13  |.pf1..D.f.D..B..|
000000c0  72 06 bb 00 70 e9 8c 00  b4 08 cd 13 73 19 f6 c2  |r…p…….s…|
000000d0  80 0f 84 ee 00 a0 4a 7c  3c ff 74 08 38 c2 74 04  |……J|<.t.8.t.|
000000e0  88 c2 eb 83 e9 8d 00 be  05 7c c6 44 ff 00 66 31  |………|.D..f1|
000000f0  c0 88 f0 40 66 89 44 04  31 d2 88 ca c1 e2 02 88  |…@f.D.1…….|
00000100  e8 88 f4 40 89 44 08 31  c0 88 d0 c0 e8 02 66 89  |…@.D.1……f.|
00000110  04 66 a1 44 7c 66 31 d2  66 f7 34 88 54 0a 66 31  |.f.D|f1.f.4.T.f1|
00000120  d2 66 f7 74 04 88 54 0b  89 44 0c 3b 44 08 7d 3c  |.f.t..T..D.;D.}<|
00000130  8a 54 0d c0 e2 06 8a 4c  0a fe c1 08 d1 8a 6c 0c  |.T…..L……l.|
00000140  5a 8a 74 0b bb 00 70 8e  c3 31 db b8 01 02 cd 13  |Z.t…p..1……|
00000150  72 2a 8c c3 8e 06 48 7c  60 1e b9 00 01 8e db 31  |r*….H|`……1|
00000160  f6 31 ff fc f3 a5 1f 61  ff 26 42 7c be 90 7d e8  |.1…..a.&B|..}.|
00000170  40 00 eb 0e be 95 7d e8  38 00 eb 06 be 9f 7d e8  |@…..}.8…..}.|
00000180  30 00 be a4 7d e8 2a 00  eb fe 47 52 55 42 20 00  |0…}.*…GRUB .|
00000190  47 65 6f 6d 00 48 61 72  64 20 44 69 73 6b 00 52  |Geom.Hard Disk.R|
000001a0  65 61 64 00 20 45 72 72  6f 72 00 bb 01 00 b4 0e  |ead. Error……|
000001b0  cd 10 ac 3c 00 75 f4 c3  16 23 ab 41 00 00 80 01  |…<.u…#.A….|
000001c0  01 00 83 fe ff ff 3f 00  00 00 7e 08 39 01 00 fe  |……?…~.9…|
000001d0  ff ff 83 fe ff ff bd 08  39 01 cc 97 96 05 00 fe  |……..9…….|
000001e0  ff ff 82 fe ff ff 89 a0  cf 06 f7 db 2c 00 00 00  |…………,…|
000001f0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 55 aa  |…………..U.|
00000200

 

Bene, questo primo settore dice al BIOS cosa deve fare appena il computer viene avviato e passa tutti i test preliminari (memoria, floppy etc…): qui ci troverà un programma, un kernel che avvierà il sistema operativo, oppure un cosidetto bootloader che si preoccuperà di andare ad eseguire il programma che a noi interessa. 

Se vogliamo creare un floppy di boot possiamo appoggiarci al programma grub-floppy che installerà una shell di GRUB nel floppy, ma a cui non è possibile aggiungere un kernel o qualsivoglia file, in quanto non è possibile montarlo successivamente; oppure possiamo eseguire le seguenti procedure (do per scontato che abbiate già GRUB installato nel computer di partenza e che siate in un sistema Debian dove le unità removibili si montino in media)

 

$ mkfs.ext3 /dev/fd0

$ mount /media/floppy 

$ mkdir -p /media/floppy0/boot/grub/

$ cp -v /usr/lib/grub/i386-pc/stage[1-2] /media/floppy0/boot/grub/

$ cp -v /boot/grub/menu.lst /media/floppy0/boot/grub/

$ cp -v <immagine del kernel voluto> /media/floppy/boot/

$ cp -v <eventuale initrd> /media/floppy0/boot/ 

$ umount /media/floppy0 

Successivamente entrate in grub ed eseguite dalla sua shell questi comandi

grub> root (fd0)

grub> setup (fd0)

ed avrete il vostro bel floppy pronto per l'uso. 

Nel caso abbiate compilato un kernel linux e pensate di farlo partire direttamente da floppy, sappiate che potete farlo solo con le versioni 2.4 o precedenti a causa di una scelta degli sviluppatori (per approfondimenti kernelnewbies).

Per quanto riguarda i CD, la procedura di avvio si basa sulla estensione del filesystem iso9660 (quella dei CDROM per intenderci) chiamata el torito (il nome lo avrebbe preso dal ristorante dove gli sviluppatori andavano a mangiare), estensione che permette di simulare l'avvio da HD o floppy; ma passiamo alla fase pratica: create in un posto scelto da voi le directory iso/boot/grub e copiate da /lib/grub/i386/ il file stage2_eltorito in grub/, eventualmente copiate menu.lst e poi, posizionandosi nella directory padre di iso, da linea di comando scrivete:

mkisofs -R -b boot/grub/stage2_eltorito -no-emul-boot -boot-load-size 4 -boot-info-table -o boot.iso iso

ed infine con cdrecord

cdrecord -v -eject -data boot.iso

. Se qualcuno conosce la procedura con K3b sarei lieto di apprenderla 😉 


3 Comments on “Make Bootable device”

  1. 1 ching said at 3:12 pm on Febbraio 7th, 2007:

    ma la vita è bootable?

  2. 2 packz said at 5:25 pm on Febbraio 7th, 2007:

    Intesa nel senso di software capace di “autoavviarsi” nella giusta predisposizione hardware potrei dire di si…

  3. 3 Motore dell'Econonia said at 12:12 pm on Febbraio 15th, 2007:

    dovrebbe tradursi con Dispositivo Stivalabile