This file is indexed.

/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 ' &lt;= 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 &lt;= 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 &gt; 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 &gt; 1024 i co wiêcej przy w³±czonej opcji
BIOSu `&gt; 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 &gt; 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 &gt;= 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 &lt; 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 &lt; 2^21 (1 GB), lub H=128, S=63
je¶li M &lt; 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 &lt;= 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 &lt;&lt;;= 1024. To znaczy, ¿e H
bêdzie mia³o warto¶æ 0, je¶liM &gt; 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>