Diszk geometria

A merevlemezek (Hard disk, Winchester, stb.) olyan eszközök, amikben (a porosodás ellen hermetikusan lezárva) egymás alatt több - mágneses réteggel ellátott - korong és hozzájuk tartozó olvasó-író fejek (valamint léptetőmotor és sok minden más) találhatóak. A korongokon koncentrikus körökben felírva található az információ. Egy ilyen kört sávnak (track) nevezünk, az egymás alatti korongok azonos sugarú sávjait pedig együttesen cilindernek. Egy sáv tovább van szeletelve szektorokra, ez a lemez hozzáférés alapegysége. Egy szektor általában 512 byte "hasznos" adatot tartalmaz. (A szektoron belüli adattárolás részletei most nem érdekesek.) Egy koronghoz 2 olvasó-író fej (head) tartozik, a korong mindkét oldalához egy. Néha e miatt fej helyett oldalt (side) szoktak emlegetni.

Egy szektorhoz úgy férünk hozzá (úgy címezzük meg), hogy megadjuk, melyik cilinderen (milyen sugarú körön), melyik fejjel olvasva/írva, a sáv hányadik szektorában van az adat. Ezt a címzést C/F/S (angol rövidítéssel C/H/S) címzésnek nevezzük. A cilinder és a fej cím 0 kezdetű, míg a szektor cím 1-től indul. A lemezek ilyen (C/F/S) mértékegységben megadott méretét lemez geometriának nevezzük. Ezt az értéket (illetve - mint majd később látni fogjuk - valami hasonlót) a szoftver (például diszk partícionáló szoftver) a BIOS-tól tudhatja meg.

AT buszos lemezek

A kezdeti MFM (Modified Frequency Modulation) illetve RLL (Run Length Limited) lemezek is, valamint illesztőkártyáik is egyszerű felépítésűek voltak. Az illesztőkártya és a lemez között soros vonalon közlekedtek az adatok, azokat az illesztőkártya szedte össze byte-okba. (Ez nagy gátja volt a sebességnövekedésnek is.) Az illesztőkártya néhány parancsot ismert, ezekben a szektor címzését 10 bites cilinder, 4 bites fej, és 6 bites szektor cím adta.

Az IBM-PC és klónjainak BIOS-a ezért (int 13h-s hívások, Disk I/O) egy szavas regisztert (CX) használ a cilinder+szektor cím megadására (10 bites cilinder és 6 bites szektorcímek), és egy byte-os regisztert (DH) a fej címzésére (mivel kisebb nem volt :). Ez, mint látni fogjuk, sok problémához vezetett a későbbiekben.

Az adatátviteli sebesség növelése érdekében később az IDE (Integrated Device Equipment, mások szerint Integrated Drive Electronics) más néve ATA (AT bus Attachment) meghajtókat kezdték alkalmazni. Ezekben már egy beépített processzor végzi a feladatok nagy részét, az egyszerű felépítésű illesztőkártya felé 16 bites párhuzamos adatvonalakon megy az információ. Így még nagyobb kábelhosszak (kisebb kábelsebesség) esetén is jóval nagyobb sebesség érhető el, mint az MFM lemezek soros átvitele esetében.

Az IDE lemezek illesztőkártyája a számítógép (a szoftver) felől nézve kompatibilis maradt a korábbi MFM kártyákkal. A lemez mellé épített processzor viszont egyéb dolgokra is használhatóvá vált, pl. eltakarhatja a lemez fizikai kezelését: A lemezen belül változó szektorszámmal dolgozhat a kapacitás növelése érdekében (a külső, nagyobb kerületű sávokban több információ fér el ugyanis, mint amit a belső, rövidebb sávokra megállapított szektorszám lehetővé tenne), a külvilág felé viszont mondhat egy állandó szektorszámot. Az újabb lemezeknél szokás az is, hogy a lemezterület egy részét fenntartják hibajavításra, és amikor egy szektor bizonytalankodni kezd, a beépített processzor automatikusan lecseréli egy jóra. Így a korábbi szoftverekkel való kompatibilitás megtartásával lehetett a biztonság növelése mellett még tárolókapacitást és átviteli sebességet is növelni.

Tehát IDE lemezek esetében már eléggé bizonytalan dolog geometriáról beszélni, ennek ellenére a lemezek szimulálnak kifelé ilyen adatot. Sőt, lekérdezhető a lemezek geometriája. Az IDE vezérlő kicsit meg is növelte a lehetséges kezelhető lemezméretet: 16 biten címzi a cilindert, továbbra is csak 4 biten a fejet, és 8 bitre nőtt a szektorok címe is.

Ezek szerint IDE lemez esetében a lehetséges maximális kapacitás (16 bit + 4 bit + 8 bit = ) 65536 cilinder * 16 fej * 255 szektor * 512 byte = 127.5 GigaByte, a címzés néhány évig még elegendőnek tűnik :-) (Megj: a szektor cím 1-től indul, ezért 8 bitből csak 255 lehetőség lesz.)

Amennyiben BIOS-t használ az operációs rendszer, akkor annak korlátait is figyelembe kell venni ilyen maximumok számításánál: (10 bit + 8 bit + 6 bit = ) 1024 cilinder * 255 fej * 63 szektor * 512 byte = 7.8 GigaByte, ez sem olyan rossz méret azért, bár lesznek sokan, akiknek jövőre már szűk lesz. (Megj: a fej cím 0..254 lehet csak, ez 255 lehetőség, a szektorcím 1-ről indul, ez 63 lehetőség.)

Ha viszont összevonjuk a kétféle geometriát, abból maximális kapacitásként 10 bit cilinder, 4 bit fej és 6 bit szektorcím adódik, ez viszont csak 1024 * 16 * 63 * 512 byte = 504 MegaByte, ami már ma mindenkinek szűk keresztmetszet! Ennek feloldására tett lépésekről kicsit később lesz még szó.

Megjegyzés: Van, aki 528 mega / 8.4 giga / 136.9 gigáról beszél 504 mega / 7.8 giga / 127.5 giga helyett: attól lett "nagyobb" a kapacitás, mert megelégedett kilobyte-onként 1000 byte-tal 1024 helyett, és hasonlóképpen kerekített a mega illetve giga váltáskor is. Ilyen könnyű a semmiből néhány tíz/száz/ezer MegaByte-ot csinálni! :)))

SCSI buszos lemezek

SCSI busz esetébe első közelítésben nincsenek ilyen problémák, mert nem C/F/S rendszerben, hanem egyetlen lineáris szektorcímként kell címezni a lemezt. Mégis, BIOS-t használva (tehát boot-oláskor illetve DOS alatt végig) az int13 paraméterei továbbra is C/F/S adatokat várnak, így valamit mégiscsak tudnunk kell a geometriáról (és mellesleg a 7.8 GigaByte-os korlát így ide is bejön).

A lemez fizikai geometriáját le lehet kérdezni a SCSI buszon keresztül, viszont nem igazán ez az adat az, ami a BIOS szempontjából érdekes (mert így gyakran 1024-nél jóval több cilinder jönne ki). A geometria itt teljesen a BIOS belügye (itt BIOS alatt az illesztőkártyán lévő BIOS bővítést kell érteni, amennyiben nem alaplapra integrált SCSI meghajtóról van szó), hiszen az int13-ba bejövő C/F/S címet a BIOS maga átalakítja lineáris szektorcímmé és már csak azt küldi tovább a lemezegység felé. Ezért gyakran 64 fejjel és 32 szektorral számolnak a BIOS-ok. Ennek "szépészeti" előnye van, ugyanis így egy cilinder mérete kereken 1 MegaByte, így a partíciós táblában a partíció annyi megabyte-os, ahány cilindert lefoglal. Hátránya viszont, hogy csak 1 GigaByte-ig használható. Ennél nagyobb kapacitású lemezeknél gyakori választás a 255 fej és 63 szektor, amikkel a BIOS által elérhető majd 8 GigaByte-os teljes kapacitás kezelhető. Néhány SCSI csatolónál (pontosabban az abban lévő BIOS bővítésnél) engedélyezni kell, hogy hajlandó legyen 1024 MegaByte fölé menni, vagyis max1024/255/63-as geometriát szimulálni.

Nagy kapacitású AT buszos lemezek

Térjünk most vissza az IDE lemezekhez: Ha a BIOS-on keresztül érjük el a lemezt, 504 MegaByte-ra korlátozódik a címezhető kapacitás (emlékeztető kicsit korábban). Ennek feloldására kétféle megoldást találtak ki. Az egyik azonos a SCSI lemezeknél alkalmazottal: a modernebb IDE lemezeknél bevezettek új parancsokat, amikkel nem C/F/S rendszerben, hanem lineáris szektorcímmel érhető el a lemez. Ezt LBA-nak (Linear Block Addressing) szokás nevezni, 28 bites lineáris címekkel lehet így dolgozni, tehát 128 GigaByte-ot lehet kezelni. Persze itt is át kell alakítani ezt a lineáris címet C/F/S címzéssé akkor, amikor a BIOS int13 hívását kell használni (boot-oláskor illetve DOS alatt). Ilyenkor is a SCSI csatolóknál leírtak szerint járnak el a BIOS-ok, tehát szimulálnak valamilyen szimpatikus geometriát, és egyben lecsökkentik a használható méretet 7.8 GigaByte-ra :-(

A másik megoldásnál is azt használja ki a BIOS, hogy a fej címzésére a DH regiszterben 8 bit áll rendelkezésre 4 helyett: az eredeti C/F/S geometria helyett egy C'/F'/S geometriát szimulál a BIOS befelé (a szoftver felé), ahol C'=C/n és F'=F*n. Az n konstanst pedig úgy állapítja meg, hogy C' 1024-nél ne legyen nagyobb. (n elvileg bármilyen egész szám lehetne, de kettő hatványt szoktak csak használni a BIOS-ok, így szorzás helyett shift is elegendő.) Kifelé, a lemezegység felé természetesen a fizikai C/F/S-re alakít vissza mindent a BIOS. Ezzel a megoldással tehát nincs szükség arra, hogy a lemez tudja az LBA-t. Ilyenkor is 7.8 GigaByte a lehetséges maximális lemezméret.

A BIOS setup-ban általában az eredeti, tehát nem a szimulált geometriát kell beállítani, illetve automatikus lemez-felismeréskor is azt írja ki a BIOS. Azt, hogy melyik szimulációs megoldást használja a BIOS, tipikusan a setup-jában lehet beállítani "LBA" illetve "Large" néven. Mindkét esetben majdnem 8 GigaByte kapacitásig kezelhető így (tehát BIOS-on keresztül) egy lemez.

Régebbi BIOS-ok nem tudtak ilyen szimulálást, ezért léteznek olyan disk manager-ek (pl. OnTrack vagy EZ-Drive), amik a BIOS helyére lépnek már boot-oláskor, maguk kezelik a diszkeket és elvégzik ezt a geometria-átalakítást. Ezekről nem tudok sokat, de remélhetőleg ki is halnak idővel (ha ki nem haltak már:). Ha mégis ilyenekről akarsz olvasni, valamennyi információ van róluk a John Wehman és Peter den Haan által karbantartott ATA-FAQ-ban (magyarországon például az ftp.vein.hu/pc/doc/atafaq191.zip címen található).

Ugyanebben a FAQ-ban találtam két érdekes BIOS bug leírást:

Néhány régebbi (1996 előtti) BIOS rosszul kezeli a 4096 (mások a 8192) cilindernél (2016 illetve 4032 MByte-nál) nagyobb kapacitású lemezeket. Ezeknél meg lehet próbálni a BIOS setup-jában kézzel átállítani a lemez kapacitását 4095 (illetve 8191) cilinderre, a többi terület DOS számára elérhetetlen (Linuxból azért az is használható).

Más BIOS-ok 8192 cilindernél nagyobb kapacitás esetén n=16-tal (shift 4) számolnak, hogy a cilinderszám 1024 alá kerüljön (lásd néhány paragrafussal feljebb). Ez viszont az eredeti 16 fejből 16*16=256 fejet csinál, ami már nem ábrázolható 8 biten! Ha a BIOS-ban ilyen hiba van, azt lehet tenni, hogy a BIOS setup-jában kézzel átállítjuk a fejszámot 16-ról 15-re, a cilinderszámot pedig x-ről x*16/15-re (lefelé kerekítve). (Az ATA-FAQ szerint ilyen módosítást mindig megtehetünk, de nekem hiányzik egy közbülső lépés, hogy megértsem :-) Esetleg valaki ki tud segíteni?)

[Egy általam (is?) talált DOS-Boot hibáról, ami szintén 2GByte környékén jön elő, később lesz szó.]


Up Arrow
Tartalomjegyzék
Right Arrow Partícionálás