Du¿e dyski Andries Brouwer, aeb@cwi.nl <mailto:aeb@cwi.nl> v1.0, 960626 wweerrssjjaa ppoollsskkaa ppiioottrr..ppooggoorrzzeellsskkii@@iipppptt..ggoovv..ppll <<mailto:piotr.pogorzelski@ippt.gov.pl> wersja 1.0, 5 marca 1997 Wszystko na temat geometrii dysków i granicy 1024 cylindrów. ______________________________________________________________________ Spis tre¶ci 1. Postawienie problemu 2. £adowanie systemu (Booting) 3. Geometria dysku i partycje 4. Translacja i Disk Managery 5. Translacja wykonywana przez j±dro dla dysków IDE 5.1 EZD 5.2 DM6:DDO 5.3 DM6:AUX 5.4 DM6:MBR 5.5 PTBL 6. Konsekwencje 6.1 Szczególy IDE 6.2 Szczegó³y SCSI 7. Od t³umacza ______________________________________________________________________ 11.. PPoossttaawwiieenniiee pprroobblleemmuu Za³ó¿my, ¿e posiadasz dysk z wiêcej ni¿ 1024 cylindrami. Co wiêcej za³ó¿my, ¿e posiadasz system który korzysta z BIOSu. Wtedy masz problem. Masz problem poniewa¿ zwyk³y interfejs We/Wy twojego dysku realizowany przez przerwanie BIOSu INT13, które do przekazywania numeru cylindra, na którym ma zostaæ wykonana operacja We/Wy korzysta z 10-cio bitowego pola, przez co cylindry o numerze 1024 i wiekszym s± niedostêpne. Na szczê¶cie Linux nie korzysta z BIOSu, wiêc nie ma tego problemu. No prawie, poza dwoma przypadkami: (1) Kiedy uruchamiasz swój system, Linux jeszcze nie dzia³a i nie potrafi uchroniæ ciê przed k³opotami z BIOSem. Ma to wp³yw na pracê LILO i innych ³adowaczy systemów (boot loaders). (2) Wszystkie systemy operacyjne korzystaj±ce z tego samego dysku musz± zgadzaæ siê co do po³o¿enia poszczególnych partycji. Innymi s³owy, je¶li korzystasz na jednym dysku z Linuxa i powiedzmy DOSu, wtedy oba musz± interpretowaæ tabelê partycji w ten sam sposób. Ma to wp³yw na sposób zachownia j±dra i programu fdisk. Poni¿ej znajdziesz sczegó³owy opis wszelkich istotnych szczegó³ów. Zauwa¿, ¿e wszelkie informacje odnosz± siê do j±dra w wersji 2.0.8. Inne wersje j±dra mog± zachowywaæ siê troszkê inaczej. 22.. ££aaddoowwaanniiee ssyysstteemmuu ((BBoooottiinngg)) Podczas ³adowania systemu, BIOS odczytuje z pierwszego dysku twardego (lub z dyskietki) sektor 0 (znany jako g³ówny sektor startowy (Master Boto Record, MBR)) i wykonuje skok do znalezionego tam kodu - zwykle do programu ³adowania pocz±tkowego. Te ma³e programy ³aduj±ce (³adowacze) jakie siê tam znajduj±, nie posiadaj± wlasnych drajwerów dyskowych i korzystaj± z funkcji BIOSu. To znaczy, ¿e j±dro Linuxa mo¿e zostaæ za³adowane, tylko wtedy gdy w ca³o¶ci znajduje siê poni¿ej 1024 cylindra. Ten problem mo¿na bardzo ³atwo rozwi±zaæ. Upewnij siê, ¿e j±dro (i byæ mo¿e inne pliki wykorzystywane do startu systemu, np. pliki odzworowañ programu LILO) znajduj± siê na partycji, która w ca³o¶ci zawiera siê w obszrze ponizej 1024 cylindra dysku, do którego BIOS ma dostêp - zwykle pierwszy lub drugi dysk twojego komputera. Poza tym ³adowacz i BIOS musz± siê zgadzaæ w sprawie geometrii dysku. Tutaj mo¿e okazaæ siê pomocne skorzystanie w konfiguracji LILO z opcji _l_i_n_e_a_r. Wiêcej szczegó³ów pó¼niej. 33.. GGeeoommeettrriiaa ddyysskkuu ii ppaarrttyyccjjee Je¶li posiadasz na jednym dysku kilka systemów operacyjnych, wtedy ka¿dy z nich u¿ywa jednej lub wiêcej partycji. Niezgodno¶æ w ocenie, gdzie te partycje siê dok³adnie znajduj± mo¿e mieæ katastrofalne konsekwencje. Rekord MBR zawiera _t_a_b_e_l_ê _p_a_r_t_y_c_j_i okre¶laj±c±, gdzie znajduj± siê partycje (podstawowe). Tabela zawiera 4 pozycje (dla 4 partycji) i wygl±da mniej wiêcej tak: struct partition { char active; /* 0x80: startowa, 0: nie strtowa */ char begin[3]; /* CHS pierwszego sektora partycji */ char type; char end[3]; /* CHS ostatniego sektora partycji */ int start; /* 32 bitowy numer sektora (licz±c od 0) */ int length; /* 32 bitowa liczba sektorów */ }; (gdzie CHS oznacza numer cylindra/g³owicy/sektora). Jak widaæ informacja jest nadmiarowa: lokalizacja partycji jest podana zarówno w 24-ro bitowych polach begin i end, oraz w 32-dwu bitowych polach start i length. Linux korzysta jedynie z pól start i length, dlatego potrafi obs³u¿yæ partycje o liczbie sektorów nie przekraczaj±cej 2^32 tzn. partycje o rozmiarze nie wiêkszym ni¿ 2 TB. Czyli dwie¶cie razy wiêksz± od dysków obecnie dostêpnych na rynku. Mo¿emy mieæ nadzieje, ¿e bêdzie to wystarczaj±ce na najbli¿sze 10 lat, a mo¿e wiêcej. Niestety, funkcja BIOSu INT13 korzysta z inforamacij CHS zakodowanych w polach 3bajtowych, przy czym na numer cylindra przeznaczonych jest 10 bitów, 8 bitów na numer g³owicy i 6 bitów na numer sektora na ¶cie¿ce. Dozwolone numery cylindrów to 0-1023, g³owic 0-255 i dozwolona liczba sektorów na ¶cie¿ce wynosi 1-63 (tak, sektory na ¶cie¿ce s± liczone od 1, a nie od 0). Na tych 24 bitach mo¿na zaadresowaæ nie wiêcej ni¿ 8455716864 bajtów (7.875 GB), dwie¶cie razy wiêcej ni¿ rozmiar dysków dostêpnych w roku 1983. Kolejne, wa¿niejsze (gro¼niejsze) ograniczenie polega na tym, ¿e standard interfejsu IDE pozwala jedynie na: 256 sektorów na ¶cie¿ce, 65536 cylindrów i 16 g³owic. Sam w sobie pozwala na dostêp do 2^37 = 137438953472 bajtów (128 GB), lecz w po³±czeniu z ograniczeniami na³o¿onymi przez BIOS, faktycznie umo¿liwia na dostêp tylko do 528482304 bajtów (504 MB). Nie jest to wystarczaj±ce dla dostêpnych obecnie dysków i ludzie s± zmuszeni do stosowania ró¿nego rodzaju sztuczek, zarówno sprzêtowych, jak i programowych. 44.. TTrraannssllaaccjjaa ii DDiisskk MMaannaaggeerryy Nikogo nie interesuje jaka jest `rzeczywista' geometria dysku. Tak na prawdê, liczba sektorów na ¶cie¿ce czêsto jest zmienna - wiêcej na ¶cie¿kach zewnêtrznych i mniej na ¶cie¿kach wewnêtrznych - nie ma tak na prawdê `rzeczywstej' liczby sektorów na ¶cie¿ce. Dla u¿ytkownika najwygodniej jest traktowaæ dysk jako liniow± tablicê sektorów, ponumerowanych 0,1 ... i pozostawiæ sterownikowi zadanie odnalezienia po³o¿enia danego sektora na dysku. To numerownie liniwe znane jest pod skrótem LBA. Adres liniowy nale¿acy do sektora (c,h,s) dla dysku o geometrii (C,H,S) jest równy c*H*S+h*S+(s-1). Wszystkie sterowniki SCSI porozumiewaj± siê wed³ug standardu LBA, niektóre sterowniki IDE równie¿. BIOS zamienia 24-bitowe pole (c,h,s) na adres LBA i przekazuje to sterownikowi, który rozumie co to jest LBA. Dziêki temu ponownie mamy dostêp do 7.785 GB. Nie jest to wystarczaj±ce dla wszystkich dysków, lecz jest to lepsze ni¿ to co by³o. Zauwa¿, ¿e CHS wykorzystywane przez BIOS nie ma ¿adnego zwi±zku z rzeczywisto¶ci±. Co¶ poddobnego dzieje siê w sytuacji, gdy sterownik nie rozumie adresów LBA, lecz BIOS wie o translacji (w Setupie BIOSu jest to zwykle oznaczane jako `Large'). Teraz BIOS prezentuje systemowi operacyjnemu geometriê (C',H',S') i u¿ywa geometrii (C,H,S) do komunikacji ze sterownikiem. Zwykle S=S' C'=C/N i H'=H*N, gdzie N jest najmniejsz± potêg± 2, zapewniaj±c± spe³nienie warunku ' <= 1024 (w celu zminimalizowania marnuj±cej siê przestrzeni przez zaokr±glenie w dó³ C'=C/N). Ta metoda równie¿ pozwala uzyskaæ dostêp do 7.875 GB. Je¶li BIOS nic nie wie na tema `Large' lub LBA, wtedy pozostaj± rozwi±zania oparte na odpowiednich drajwerach. Takie programy, jak OnTrack lub Ez-Drive zamieniaj± programy obs³ugi dysku nale¿±ce do BIOSu na w³asne. Czêsto jest to realizowane, przez umieszenie kodu nale¿acego do Disk Managera w rekordzie MBR i kolejnych sektorach dysku (OnTrack nazywa to DDO: Dynamic Drive Overlay) aby by³ on uruchamiany przed za³adowniem jakiegokolwiek systemu operacyjnego. To wyja¶nia k³opoty zwi±zane ze startowniem systemu z dyskietki, dla dysków z zainstalowanym programem Disk Manager. Efekt ca³ego tego zamieszania jest mniej wiêcej taki sam, jak w przypadku translacji przez BIOS - lecz w sytuacjach, gdy na jednym dysku znajduje siê wiele systemów operacyjnych programy typu Disk Manager mog± sprawiaæ wiele k³opotów. Linux od wersji 1.3.14 rozpoznaje istnienie programu Boot Manager firmy OnTrack i od wersji 1.3.29 firmy EZ-Drive. Wiêcej szczegó³ów znajdziesz dalej. 55.. TTrraannssllaaccjjaa wwyykkoonnyywwaannaa pprrzzeezz jj±±ddrroo ddllaa ddyysskkóóww IIDDEE Je¶li j±dro Linuxa rozpozna istnienie na dysku IDE programu typu disk manager, spróbuje przeprowadziæ identyczn± translacjê jak± robi ten w³a¶nie program, tak aby widzieæ te same partycje co np. MS-DOS z programe OnTrack lub EZ-Drive. Je¶li jednak w parametrach startowych zostanie przekazana geometria dysku, nie jest wykonywana ¿adna translacja. Tak wiêc opcja startowa `hd=_c_y_l_s,_h_e_a_d_s,_s_e_c_s' mo¿e zniszczyæ zgodno¶æ z programem typu disk manager. Translacja wykonywana przez j±dro polega na wypróbowaniu kolejno liczby g³owic równej 4, 8 ,16, 32, 128, 255 (utrzymuj±c sta³± warto¶æ H*C) a¿ do spe³nienia warunku C <= 1024 lub H = 255. Trochê uwag na temat tekstu poni¿ej - nag³ówki podrozdzia³ów s± identyczne z pojawiaj±cymu siê w komunikatach startowych. Tutaj i w ca³ym tekscie typy partycji podane s± szesnastkowo. 55..11.. EEZZDD Rozpoznano drajwer EZ-Drive poniwa¿ pierwsza partycja podstawowa jest typu 55. Geometria dysku podlega opisanej powy¿ej translacji i tabela partycji z sektora 0 zostaje pominiêta - zmiast tego korzystamy z tabeli partycji znajduj±cej siê w sektorze 1. Numery bloków dyskowych pozostaj± niezmienione, lecz zapis sektora 0 zostaje przekierowany do sektora 1. To zachownie mo¿e zostaæ zmienione przez ponowne skompilowanie j±dra przy zdefiniowaniu w pliku _i_d_e_._c #define FAKE_FDISK_FOR_EZDRIVE 0 . 55..22.. DDMM66::DDDDOO Rozpoznano drajwer OnTrack Manager (na pierwszym dysku) poniewa¿ pierwsza partycja podstawowa jest typu 54. Geometria dysku podlega opisanej powy¿ej translacji i ca³y dysk zostaje przesuniêty o 63 sektory (tak wiêc stary sektor 63 staje siê sektorem 0). Nastêpnie nowy rekord MBR (z tabel± partycji) zostaje odczytany z nowego sektora 0. To przesuniêcie oczywi¶cie ma na celu zrobienie miejsca dla DDO - dlatego nie jest wykonywane dla innych dysków. 55..33.. DDMM66::AAUUXX Rozpoznano drajwer OnTrack Manager (na innych dyskach) poniewa¿ pierwsza partycja podstawowa jest typu 51 lub 53. Geometria dysku podlega opisanej powy¿ej translacji. 55..44.. DDMM66::MMBBRR Rozpoznano starsz± wersjê drajwera OnTrack Manager poniwa¿ znaleziono podpis drajwera (sprawdzono, ¿e przesuniêcie znalezione w 2-gim i 3-cim bajcie rekordu MBR nie jest wiêksze od 430, i zmienna typu short znaleziona pod tym adresem jest równa 0x55AA, po której wystêpuje bajt nieparzysty). Geometria dysku podlega opisanej powu¿ej translacji. 55..55.. PPTTBBLL Na koñcu wykonywany jest test próbuj±cy wydedukowaæ istnienie translacji na podstawie warto¶ci pól start i end partycji podstawowej: Je¶li cylinder pocz±tkowy i koñcowy jednej z partycji jest mniejszy od 256, a sektory pocz±tkowy i koñcowy maj± numery odpowiednio 1, i 63, a koñcowe numery g³owic s± równe 31, 63 lub 127, wtedy wnioskujemy, ¿e translacja dysku jest aktywna, i wykorzystujemy liczbê g³owic równ± odpowiednio 32, 64 i 127 (poniewa¿ zwykle partycja koñczy siê na granicy cylindra i interfejs IDE nie pozawala na wiêcej ni¿ 16 g³owic). Byæ mo¿e jest tu b³±d i _g_e_n_h_d_._c nie powinien sprawdzaæ dwóch najwy¿szych bitów zmiennej przechowuj±cej numer cylindra? Jednak¿e nie wykonuje siê ¿adej translacji, jesli aktualny pogl±d na istniej±c± geometriê ju¿ zak³ada 63 sektory na ¶cie¿ce i co najmniej tyle samo g³owic (poniewa¿ to prawdopodownie oznacza, ze translacja ju¿ zosta³a dokonana). 66.. KKoonnsseekkwweennccjjee Jakie to wszystko ma znaczenie? Dla u¿ytkowników Linuxa tylko jedno: musz± siê upewniæ, ¿e LILO i fdisk u¿ywaj± `poprawnej' geometrii, gdzie `poprawna' w przypadku fdiska jest rozumiana jako geometria u¿ywana przez inne systemy operacyjne znajduj±ce sie na tym samym dysku, a w przypadku LILO, ¿e jest to geometria pozwalaj±ca na poprawn± wspó³pracê z BIOSem podczas ³adowania systemu. Jak fdisk dowiaduje siê o geometrii? Pyta siê j±dra przy pomocy funkcji ioctl HDIO_GETGEO. Lecz u¿ytkownik mo¿e podaæ dowoln± geometriê dysku przez parametry w wierszu poleceñ lub pó¼niej w samym programie. Jak LILO dowiaduje siê o geometrii dysku? Pyta siê j±dra przy pomocy funkcji ioctl HDIO_GETGEO. Lecz u¿ytkownik mo¿e podaæ ³asne inforamacje z pomoc± opcji `disk='. Mo¿na równie¿ skorzystac z opcji linear, co spowoduje, ¿e LILO zachowa w pliku odwzorwania (map file) adres LBA, zamiast CHS i podczas ³adowania sytemu odczyta geometriê dysku (wykorzystujêc funkcjê nr 8 przerwania INT 13). Sk±d j±dro wie co odpowiedzieæ? Ha!, po pierwsze u¿ytkownik mo¿e przekazæ mu odpowiednie informacje jako parametr wiersza zachêty startowej: `hd=_c_y_l_s,_h_e_a_d_s,_s_e_c_s'. W innym przypadku j±dro przepyta na ten temat sprzêt. 66..11.. SSzzcczzeeggóóllyy IIDDEE Trochê szczegó³ów. Drajwer IDE posiada cztery ¼ród³a informacji o geometrii dysku. Pierwsze (G_user) to dane podane przez u¿ytkwonika w wierszu zachety. Drugie (G_bios) to inforamcje BIOSu (tylko dla pierwszego i drugiego dysku), które s± odczytywana podczas uruchamiania systemu, przed prze³±czeniem siê w tryb 32-bitowy. Trzecie (G_phys) i czwarte (G_log) s± przekazywane przez sterownik IDE jako odpowied¼ na polecenie IDENTIFY - s± to `fizyczna' i aktualna `logiczna' geometria dysku. Z drugiej strony, sterownik potrzebuje dwóch informacji o geometrii dysku: lecz posiada z jednej strony G_fdisk, przekazywane przez funkcjê ioctl HDIO_GETGEO, a z drugiej strony G_used, które jest naprawdê wykorzystywane do wykonywania operacji We/Wy. Zarówno G_fdisk, jak i G_used s± inicjowane: warto¶ciami G_user je¶li s± podane, G_bios je¶li ta inforamcja jest dostepna wg. CMOS, lub G_phys w przeciwnym wypadku. Jesli G_log wygl±da rozs±dnie to G_used przybiera tê w³asnie warto¶æ. W przeciwnym wypadku, je¶li G_used nie ma wiêkszego sensu i G_phys wygl±da OK, wtedy G_used przyjmuje warto¶æ G_phys. W tym przypadku `rozs±dnie' oznacza, ¿e liczba g³owic jest w zakresie 1-16. Innymi s³owy parametry wiersza zachêty s± wa¿niejsze od informacji pobranych z BIOSu i okre¶laj± jak± geometriê widzi fdisk, lecz je¶li podane informacje odpowiadaj± geometri poddanej translacji (wiecej ni¿ 16 g³owic), wtedy operacje We/wy j±dra zostan± zast±pione odpowiedzi± sterownika na polecenie IDENTIFY. 66..22.. SSzzcczzeeggóó³³yy SSCCSSII Sytuacja w przypadku SCSI jest trochê inna, poniewa¿ polecenia SCSI u¿ywaj± logicznych numerów bloków, tak wiêc geometria dysku nie ma absolutnie ¿adnego znaczenia dla operacjami We/Wy. Jednak¿e format tabeli partycji jest ci±gle ten sam, wiêc fdisk musi wymy¶leæ jak±¶ geometriê i równie¿ w tym przypadku korzysta z funkcji HDIO_GETGEO - w rzeczywisto¶ci fdisk nie rozró¿nia dysków IDE i SCSI. Jak ka¿dy mo¿e siê sam przekonaæ (na podstawie szczegó³owego omówienia poni¿ej) poszcególne drajwery wymy¶laj± ró¿ne geometriê. Rzeczywi¶cie jeden wielki balagan. Je¶li nie korzystasz DOSu, to unikaj wszelkich ustawieñ rozszerzonych translacji i je¶li to mo¿liwe, u¿ywaj ustawieñ 64 g³owice, 32 sektory na ¶cie¿ce (wtedy jeden cylinder ma ³adny rozmiar 1MB). Unikniesz problemów, gdy przeniesiesz dysk z jednego sterownika do innego. Niektóre dyski SCSI (aha152x, pas16, ppa, qlogicfas, qlogicisp) s± tak nerwowe w sprawach zgodno¶ci z MS-DOSem, ¿e nie pozwol± systemowi z zainstalowanym wy³±cznie systemem Linux na wykorzystanie wiêcej ni¿ 8GB. To jest b³±d. Jaka jest rzeczywista geometria? Najprostsza odpowied¼ mówi, ¿e nie ma czego¶ takiego. I gdyby by³a, to nie chcia³by¶ wiedzieæ, i na pewno NIGDY, ale to PRZENIGDY nie mów o tym fdiskowi, LILO lub j±dru. To jest po prostu sprawa pomiêdzy dyskiem i sterownikiem SCSI. Pozwolisz, ¿e powtórzê: tylko g³upcy mówi± fdiskowi/LILO/j±dru o rzeczywistej geometrii dysków SCSI. Lecz je¶li jeste¶ ciekaw i nalegasz, mo¿esz spytaæ o to sam dysk. Istnieje bardzo wa¿ne polecenie READ CAPACITY, które przekazuje ca³kowi± objêto¶æ dysku, a drugie polecenie MODE SENSE (patrz Rigid Disk Drive Geometry Page (strona 04)) pozwala odczytaæ liczbê cylindrów i g³owic (ta informacje nie mo¿e byæ zmieniona), natomiast w Format Page (strona 03) podaje liczbê bajów w sektorze i liczbê sektorów w ¶cie¿ce. Ta ostania liczba jest zwykle zale¿na od wyciêcia (notch) i liczba sektorów na ¶cie¿ce jest zmienna - ¶cie¿ki zewnêtrzne posiadaj± wiêcej sektorów, wewnêtrzne mniej. Program pracuj±cy pod Linuxem o nazwie scsiinfo poda ci te wszystkie informacje. Jest wiele szcegó³ów i komplikacji, i jest jasne, ¿e nikt (prawdopodobnie nawet sam system operacyjny) nie chce wykorzystywaæ tej informacji. Co wiêcej, tak d³ugo jak martwimy siê tylko o fdisk i LILO, zwykle otrzymuje siê odpowiedz typu C/H.S=4476/27/171 - warto¶ci, które nie mog± byæ wykorzystane przez fdisk, poniewa¿ tabela partycji rezerwuje jedynie dla C/H/S odpowiednio 10/8/6 bitów. To sk±d na ten temat bierze informacjê funkcja HDIO_GETGEO ? Cóz, albo ze sterownika SCSI lub zgaduje. Wygl±da, ¿e niektóre dyski mysl±, ¿e interesuje nas `rzeczywisto¶æ', lecz nas oczywi¶cie interesuje jedynie jakie parametry bêd± u¿ywane przez FDISK pod DOSem czy OS/2 (lub AFDISK Adapteca). Pamiêtaj, ¿e fdisk Linuxa potrzebuje znaæ liczbê g³owic H i sektorów na ¶cie¿ce S, aby móc zamieniæ numer sektora w foramcjie LBA na adres c/h/s, lecz liczba cylindrów C nie ma znaczenia w tej konwersji. Niektóre dyski u¿ywaj± (C,H,S)=(1032,255,63) w celu zasygnalizowania, ¿e dysk ma co najmniej 1023*255*63 sektorów. Niestety to nie ujawnia aktualnego rozmiaru dysku i bêdzie ogranicza³o u¿ytkowników wiêkszo¶ci wersji programu fdisk do wykorzstania tylko oko³o 8GB ich dysków - w dzisiejszych czasach jest to powa¿ne ograniczenie. W opisie przedstawionym poni¿ej, M oznacza ca³kowit± pojemno¶æ dysku, a C,H i S liczbê cylindrów, g³owic i sektorów na ¶cie¿ce. Je¶li traktujemy C jako wynik dzia³ania C = M / (H*S), wtedy wystarczy podaæ H i S. Domy¶lnie H=63,S=32. aahhaa11774400,, ddttcc,, gg__NNCCRR55338800,, tt112288,, wwdd77000000:: H=64, S=32. aahhaa115522xx,, ppaass1166,, ppppaa,, qqllooggiiccffaass,, qqllooggiicciisspp:: H=64, S=32 unless C > 1024, W takim przypadku H=255, S=63, C = min(1023, M/(H*S)). (Tak wiêc C jest obciête i h*s*C nie jest aproksymacj± rozmiaru dysku M. Taka sytuacja potrafi og³upiæ wiêkszo¶æ wersji programu fdsik.) Kod w pliku _p_p_a_._c wykorzystuje M+1 zamiast M i twierdzi, ¿e to z poowdu b³êdu w _s_d_._c M jest przesuniête o 1. aaddvvaannssyyss:: H=64, S=32 chyba, ¿e C > 1024 i co wiêcej przy w³±czonej opcji BIOSu `> 1 GB', co w takim przypadku daje H=255, S=63. aahhaa11554422:: Spytaj sterownika, który z mo¿liwych dwóch schematów translacji jest w u¿yciu, i u¿yj albo H=255, S=63 lub H=64, S=32. W ostanim przypadku wy¶wietlany jest komunikat startowy "aha1542.c: Using extended bios translation". aaiicc77xxxxxx:: H=64, S=32 chyba, ¿e C > 1024, i co wiêcej je¶li przekazano parametr startowy (boot) "extended", lub je¶li w pamiêci SEEPROM, lub BIOSie by³ ustawiony bit `extended', to w takim przypadku przyjmuje siê H=255, S=63. bbuussllooggiicc:: H=64, S=32 chyba, ¿e C >= 1024, i co wiêcej na sterwoniku zosta³a w³±czona translacja rozszerzona, co w takim pryzpadku powoduje przyjêceie parametrów H=128, S=32 je¶li M < 2^22 lub H=255, S=63 w przeciwnym wypadku. Jednak¿e po dokonaniu wyboru (C,H,S) odczytywana jest tabela partycji i je¶li dla jednej z trzech mo¿liwo¶ci (H,S) = (64,32), (128,32), (255,63) gdziekolwiek zgadza siê równo¶æ endH=H-1, wtedy stosowana jest dana para (H,S) i wy¶wietlany jest komunikat "Adopting Geometry from Partition Table". ffddoommaaiinn:: Znajduje parametry w tabeli parametrów dysku BIOSu, lub odczytuje tabelê partycji i u¿ywa translacji H=endH+1, S=endS w przypadku pierwszej partycji (pod warunkiem, ¿e nie jest pusta), lub u¿ywa H=64, S=32 w przypadku gdy M < 2^21 (1 GB), lub H=128, S=63 je¶li M < 63*2^17 (3.9 GB) w przeciwnym wypadku. H=255, S=63. iinn22000000:: U¿yj pierwszej pary (H,S) = (64,32), (64,63), (128,63), (255,63), dla której zajdzie nierówno¶æ C <= 1024. W przeciwnym wypadku skróæ C do 1023. sseeaaggaattee:: Odczytuje C,H,S z dysku. (Horror!) Je¶li C lub S jest zbyt du¿e wtedy przyjmuje S=17,H=2 i podwaja H a¿ V <<;= 1024. To znaczy, ¿e H bêdzie mia³o warto¶æ 0, je¶liM > 128*1024*17 (1.1 GB). To jest b³±d. uullttrraassttoorr aanndd uu1144__3344ff:: W zale¿no¶ci o trybu sterownika wykorzystywane jest jedno z nastêpuj±cych odwzoroañ:((H,S) = (16,63), (64,32), (64,63)) Je¶li drajwer nie poda geometrii dysku, powracamy do metody pole gaj±cej na zgadywaniu na podstawie zawarto¶ci tabeli partycji, lub ca³kowitej pojemno¶ci dysku. Zobacz tabelê partycji. Poniewa¿ powszechnie partycja koñczy siê na granicy cylindra, znaj±c dla ka¿dej partycji end = (endC,endH,endS) mo¿emy po prostu przyj±æ H = endH+1 and S = endS. (Przypomnij sobie, ¿e sektory liczy siê od 1.) A dok³adniej wykonywana jest nastêpuj±ca operacja. Je¶li istnieje niepusta partycja, odczytaj tê o najwiêkszej warto¶ci beginC. Dla tej partycji sprawd¼ end+1, obliczone przez dodanie start i length przy za³o¿eniu, ¿e ta partycja koñczy siê na granicy sektorów. Je¶li obie warto¶ci siê zgadzaj± lub je¶li endC = 1023 i start+length jest ca³kowit± wielokrotno¶ci± (endH+1)*endS, wtedy mo¿emy za³o¿yæ, ¿e ta partycj± rzeczywi¶cie by³a wyrównana do granicy cylindra i przyj±æ H = endH+1 i S = endS. Je¶li jednak tak nie jest, a to dlatego, ¿e nie ma ¿adnej partycji, lub dlatego, ¿e partycje maj± dziwne rozmiary wtedy spróbuj wykorzystaæ pojemno¶æ dysku M. Algorytm: przyjmij H=M/(62*1024) (zaokr±glone w górê), S = M/(1024*H) (zaokr±glone w gorê), C = M/(H*S) (zaokr±glone w dó³). W ten sposób otrzymamy geometriê (C,H,S), prz czym C nie przekroczy 1024, a S 62. 77.. OOdd tt³³uummaacczzaa Wszelkie uwagi na temat t³umaczenia mile widziane. Uwagi merytoryczne prosze kierowaæ do autora tekstu angielskiego, chyba ¿e podej¿ewasz, ¿e s± one wynikiem b³êdnego t³umaczenia. Inne dokumenty HOWTO przet³umaczone na jêzyk polski znajdziesz tutaj: http://www.ippt.gov.pl/~ppogorze/Linux/JTZ/. Wersje txt i html lepiej nadajace sie do druku sa tutaj: ftp://www.ippt.gov.pl/pub/Linux/JTZ/.