Verder Terug Inhoud

9. Consequenties

Wat betekent dit allemaal? Voor Linux gebruikers slechts één ding: dat ze ervoor moeten zorgen dat LILO en fdisk de juiste geometrie gebruiken waar met `juist' voor fdisk de gebruikte geometrie wordt bedoeld die door andere besturingssystemen op dezelfde disk worden gebruikt, en voor LILO de geometrie die tijdens het opstarten een succesvolle interactie met de BIOS activeert. (Gewoonlijk komen deze twee overeen.)

Hoe weet fdisk van de geometrie? Het vraagt het de kernel, door gebruik te maken van de HDIO_GETGEO ioctl. Maar de gebruiker kan de geometrie interactief of op de opdrachtregel overschrijven.

Hoe weet LILO van de geometrie? Het vraagt het de kernel, door gebruik te maken van de HDIO_GETGEO ioctl. Maar de gebruiker kan de geometrie overschrijven door gebruik te maken van de `disk=' optie in /etc/lilo.conf (zie lilo.conf(5)). Men kan ook de linear optie aan LILO opgeven, en het zal LBA adressen in zijn mapbestand opslaan in plaats van CHS adressen, en de te gebruiken geometrie tijdens het booten uitzoeken (door de INT 13 Functie 8 gebruiken om te vragen naar de geometrie).

Hoe weet de kernel wat te antwoorden? Als eerste kan de gebruiker een expliciete geometrie hebben opgegeven met een `hda=cyls,heads,secs' kernel opdrachtregeloptie (zie bootparam(7)), misschien handmatig, of door de bootloader te vragen een dergelijke optie aan de kernel te leveren. En anders zal de kernel ernaar raden, waarschijnlijk door waarden te verkrijgen van de BIOS of de hardware.

Het is (sinds Linux 2.1.79) mogelijk de ideeën van de kernel over de geometrie te wijzigen door gebruik te maken van het /proc bestandssysteem. Bijvoorbeeld

# sfdisk -g /dev/hdc
/dev/hdc: 4441 cylinders, 255 heads, 63 sectors/track
# cd /proc/ide/ide1/hdc
# echo bios_cyl:17418 bios_head:128 bios_sect:32 > settings
# sfdisk -g /dev/hdc
/dev/hdc: 17418 cylinders, 128 heads, 32 sectors/track
#

9.1 Berekenen van LILO parameters

Soms is het handig een bepaalde geometrie te forceren door op de kernel opdrachtregel `hda=cyls,heads,secs' toe te voegen. Men wil bijna altijd secs=63, en het doel van deze toevoeging is de heads te specificeren. (Tegenwoordig zijn redelijke waarden heads=16 en heads=255.) Wat zou men voor cyls op moeten geven? Precies dat aantal dat de juiste totale capaciteit van C*H*S sectoren oplevert. Voor een drive met bijvoorbeeld 71346240 sectoren (36529274880 bytes) zou men C kunnen berekenen als 71346240/(255*63)=4441 (bijvoorbeeld met behulp van het programma bc), en als bootparamter hdc=4441,255,63 op kunnen geven. Hoe weet men wat de juiste totale capaciteit is? Bijvoorbeeld,

# hdparm -g /dev/hdc | grep sectors
 geometry     = 4441/255/63, sectors = 71346240, start = 0
# hdparm -i /dev/hdc | grep LBAsects
 CurCHS=16383/16/63, CurSects=16514064, LBA=yes, LBAsects=71346240
geeft twee manieren waarop het totaal aantal sectoren van 71346240 kan worden gevonden. De kerneluitvoer
# dmesg | grep hdc
...
hdc: Maxtor 93652U8, 34837MB w/2048kB Cache, CHS=70780/16/63
 hdc: [PTBL] [4441/255/63] hdc1 hdc2 hdc3! hdc4 < hdc5 > ...
vertelt ons over (op z'n minst) 34837*2048=71346176 en over (op z'n minst) 70780*16*63=71346240 sectoren. In dit geval blijkt de tweede waarde exact correct te zijn, maar in het algemeen zijn beiden mogelijk naar beneden afgerond. Dit is een goede manier om de diskgrootte te benaderen wanneer hdparm niet beschikbaar is. Geef nooit een te grote waarde op voor cyls! In het geval van SCSI-disks wordt het precieze aantal sectoren gegeven in de kernel bootmeldingen:
SCSI device sda: hdwr sector= 512 bytes. Sectors= 17755792 [8669 MB] [8.7 GB]
(en MB, GB zijn naar afgerond, niet naar beneden afgerond, en `binary').
Verder Terug Inhoud