/usr/share/doc/HOWTO/pl-html/Large-Disk-HOWTO.pl.html is in doc-linux-pl-html 2002.06.14-2.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 | <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<HTML>
<HEAD>
<META NAME="GENERATOR" CONTENT="SGML-Tools 1.0.9">
<META HTTP-EQUIV="content-type" content="text/html; charset=iso-8859-2">
<TITLE>Du¿e dyski </TITLE>
</HEAD>
<BODY>
<H1>Du¿e dyski </H1>
<H2>Andries Brouwer,
<A HREF="mailto:aeb@cwi.nl">aeb@cwi.nl</A><BR>
v1.0, 960626<BR>
<B>wersja polska
<A HREF="mailto:piotr.pogorzelski@ippt.gov.pl">piotr.pogorzelski@ippt.gov.pl</A><BR>
wersja 1.0, 5 marca 1997 </B></H2>
<P><HR>
<EM>Wszystko na temat geometrii dysków i granicy 1024 cylindrów.</EM>
<HR>
<H2><A NAME="s1">1. Postawienie problemu</A></H2>
<P>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.
<P>Na szczê¶cie Linux nie korzysta z BIOSu, wiêc nie ma tego problemu.
<P>No prawie, poza dwoma przypadkami:
<P>(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).
<P>(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.
<P>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.
<P>
<P>
<H2><A NAME="s2">2. £adowanie systemu (Booting)</A></H2>
<P>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.
<P>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.
<P>Poza tym ³adowacz i BIOS musz± siê zgadzaæ w sprawie geometrii
dysku. Tutaj mo¿e okazaæ siê pomocne skorzystanie w konfiguracji LILO
z opcji <EM>linear</EM>. Wiêcej szczegó³ów pó¼niej.
<P>
<P>
<H2><A NAME="s3">3. Geometria dysku i partycje</A></H2>
<P>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.
<P>Rekord MBR zawiera <I>tabelê partycji</I> okre¶laj±c±, gdzie znajduj± siê
partycje (podstawowe). Tabela zawiera 4 pozycje (dla 4 partycji) i
wygl±da mniej wiêcej tak:
<BLOCKQUOTE><CODE>
<PRE>
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 */
};
</PRE>
</CODE></BLOCKQUOTE>
(gdzie CHS oznacza numer cylindra/g³owicy/sektora).
<P>Jak widaæ informacja jest nadmiarowa: lokalizacja partycji jest podana
zarówno w 24-ro bitowych polach <CODE>begin</CODE> i <CODE>end</CODE>, oraz w 32-dwu
bitowych polach <CODE>start</CODE> i <CODE>length</CODE>.
<P>Linux korzysta jedynie z pól <CODE>start</CODE> i <CODE>length</CODE>, 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.
<P>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.
<P>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).
<P>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.
<P>
<P>
<H2><A NAME="s4">4. Translacja i Disk Managery</A></H2>
<P>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.
<P>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¿.
<P>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±.
<P>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.
<P>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.
<P>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.
<P>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.
<P>
<P>
<H2><A NAME="s5">5. Translacja wykonywana przez j±dro dla dysków IDE</A></H2>
<P>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
`<CODE>hd=</CODE><I>cyls</I><CODE>,</CODE><I>heads</I><CODE>,</CODE><I>secs</I>' mo¿e zniszczyæ
zgodno¶æ z programem typu disk manager.
<P>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.
<P>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.
<P>
<H2>5.1 EZD</H2>
<P>
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>ide.c</I> <CODE>#define FAKE_FDISK_FOR_EZDRIVE 0 </CODE>.
<P>
<H2>5.2 DM6:DDO</H2>
<P>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.
<P>
<H2>5.3 DM6:AUX</H2>
<P>Rozpoznano drajwer OnTrack Manager (na innych dyskach) poniewa¿
pierwsza partycja podstawowa jest typu 51 lub 53. Geometria dysku
podlega opisanej powy¿ej translacji.
<P>
<H2>5.4 DM6:MBR</H2>
<P>
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.
<P>
<H2>5.5 PTBL</H2>
<P>Na koñcu wykonywany jest test próbuj±cy wydedukowaæ istnienie
translacji na podstawie warto¶ci pól <CODE>start</CODE> i <CODE>end</CODE> 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 <I>genhd.c</I> 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).
<P>
<H2><A NAME="s6">6. Konsekwencje</A></H2>
<P>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.
<P>Jak fdisk dowiaduje siê o geometrii?
Pyta siê j±dra przy pomocy funkcji ioctl <CODE>HDIO_GETGEO</CODE>.
Lecz u¿ytkownik mo¿e podaæ dowoln± geometriê dysku przez parametry w
wierszu poleceñ lub pó¼niej w samym programie.
<P>Jak LILO dowiaduje siê o geometrii dysku? Pyta siê j±dra przy pomocy
funkcji ioctl <CODE>HDIO_GETGEO</CODE>. Lecz u¿ytkownik mo¿e podaæ ³asne
inforamacje z pomoc± opcji `<CODE>disk=</CODE>'. Mo¿na równie¿ skorzystac z
opcji <CODE>linear</CODE>, 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).
<P>Sk±d j±dro wie co odpowiedzieæ?
Ha!, po pierwsze u¿ytkownik mo¿e przekazæ mu odpowiednie informacje
jako parametr wiersza zachêty startowej:
`<CODE>hd=</CODE><I>cyls</I><CODE>,</CODE><I>heads</I><CODE>,</CODE><I>secs</I>'.
W innym przypadku j±dro przepyta na ten temat sprzêt.
<P>
<H2>6.1 Szczególy IDE</H2>
<P>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.
<P>Z drugiej strony, sterownik potrzebuje dwóch informacji o geometrii
dysku: lecz posiada z jednej strony G_fdisk, przekazywane przez funkcjê ioctl
<CODE>HDIO_GETGEO</CODE>, 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.
<P>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.
<P>
<H2>6.2 Szczegó³y SCSI</H2>
<P>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
<CODE>HDIO_GETGEO</CODE> - 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.
<P>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.
<P>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.
<P>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.
<P>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.
<P>To sk±d na ten temat bierze informacjê funkcja <CODE>HDIO_GETGEO</CODE> ?
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).
<P>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.
<P>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.
<P>Domy¶lnie H=63,S=32.
<P>
<DL>
<DT><B>aha1740, dtc, g_NCR5380, t128, wd7000:</B><DD><P>H=64, S=32.
<P>
<DT><B>aha152x, pas16, ppa, qlogicfas, qlogicisp:</B><DD><P>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 <I>ppa.c</I> wykorzystuje M+1 zamiast M i twierdzi, ¿e to z poowdu
b³êdu w <I>sd.c</I> M jest przesuniête o 1.
<P>
<DT><B>advansys:</B><DD><P>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.
<P>
<DT><B>aha1542:</B><DD><P>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".
<P>
<DT><B>aic7xxx:</B><DD><P>
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.
<P>
<DT><B>buslogic:</B><DD><P>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".
<P>
<DT><B>fdomain:</B><DD><P>
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.
<P>
<DT><B>in2000:</B><DD><P>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.
<P>
<DT><B>seagate:</B><DD><P>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.
<P>
<DT><B>ultrastor and u14_34f:</B><DD><P>W zale¿no¶ci o trybu sterownika wykorzystywane jest jedno z
nastêpuj±cych odwzoroañ:((H,S) = (16,63), (64,32), (64,63))
<P>
</DL>
Je¶li drajwer nie poda geometrii dysku, powracamy do metody polegaj±cej
na zgadywaniu na podstawie zawarto¶ci tabeli partycji, lub ca³kowitej
pojemno¶ci dysku.
<P>Zobacz tabelê partycji. Poniewa¿ powszechnie partycja koñczy siê na
granicy cylindra, znaj±c dla ka¿dej partycji <CODE>end =
(endC,endH,endS)</CODE> mo¿emy po prostu przyj±æ H = <CODE>endH+1</CODE> and S =
<CODE>endS</CODE>. (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
<CODE>beginC</CODE>. Dla tej partycji sprawd¼ <CODE>end+1</CODE>, obliczone przez
dodanie <CODE>start</CODE> i <CODE>length</CODE> przy za³o¿eniu, ¿e ta partycja koñczy
siê na granicy sektorów. Je¶li obie warto¶ci siê zgadzaj± lub je¶li
<CODE>endC</CODE> = 1023 i <CODE>start+length</CODE> jest ca³kowit± wielokrotno¶ci±
<CODE>(endH+1)*endS</CODE>, wtedy mo¿emy za³o¿yæ, ¿e ta partycj± rzeczywi¶cie
by³a wyrównana do granicy cylindra i przyj±æ H = <CODE>endH+1</CODE> i S =
<CODE>endS</CODE>.
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.
<P>
<H2><A NAME="s7">7. Od t³umacza</A></H2>
<P>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.
<P>Inne dokumenty HOWTO przet³umaczone na jêzyk polski znajdziesz tutaj:
<A HREF="http://www.ippt.gov.pl/~ppogorze/Linux/JTZ/">http://www.ippt.gov.pl/~ppogorze/Linux/JTZ/</A>.
<P>Wersje txt i html lepiej nadajace sie do druku sa tutaj:
<A HREF="ftp://www.ippt.gov.pl/pub/Linux/JTZ/">ftp://www.ippt.gov.pl/pub/Linux/JTZ/</A>.
<P>
</BODY>
</HTML>
|