This file is indexed.

/usr/share/doc/HOWTO/fr-html/Large-Disk-HOWTO.html is in doc-linux-fr-html 2013.01-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
 430
 431
 432
 433
 434
 435
 436
 437
 438
 439
 440
 441
 442
 443
 444
 445
 446
 447
 448
 449
 450
 451
 452
 453
 454
 455
 456
 457
 458
 459
 460
 461
 462
 463
 464
 465
 466
 467
 468
 469
 470
 471
 472
 473
 474
 475
 476
 477
 478
 479
 480
 481
 482
 483
 484
 485
 486
 487
 488
 489
 490
 491
 492
 493
 494
 495
 496
 497
 498
 499
 500
 501
 502
 503
 504
 505
 506
 507
 508
 509
 510
 511
 512
 513
 514
 515
 516
 517
 518
 519
 520
 521
 522
 523
 524
 525
 526
 527
 528
 529
 530
 531
 532
 533
 534
 535
 536
 537
 538
 539
 540
 541
 542
 543
 544
 545
 546
 547
 548
 549
 550
 551
 552
 553
 554
 555
 556
 557
 558
 559
 560
 561
 562
 563
 564
 565
 566
 567
 568
 569
 570
 571
 572
 573
 574
 575
 576
 577
 578
 579
 580
 581
 582
 583
 584
 585
 586
 587
 588
 589
 590
 591
 592
 593
 594
 595
 596
 597
 598
 599
 600
 601
 602
 603
 604
 605
 606
 607
 608
 609
 610
 611
 612
 613
 614
 615
 616
 617
 618
 619
 620
 621
 622
 623
 624
 625
 626
 627
 628
 629
 630
 631
 632
 633
 634
 635
 636
 637
 638
 639
 640
 641
 642
 643
 644
 645
 646
 647
 648
 649
 650
 651
 652
 653
 654
 655
 656
 657
 658
 659
 660
 661
 662
 663
 664
 665
 666
 667
 668
 669
 670
 671
 672
 673
 674
 675
 676
 677
 678
 679
 680
 681
 682
 683
 684
 685
 686
 687
 688
 689
 690
 691
 692
 693
 694
 695
 696
 697
 698
 699
 700
 701
 702
 703
 704
 705
 706
 707
 708
 709
 710
 711
 712
 713
 714
 715
 716
 717
 718
 719
 720
 721
 722
 723
 724
 725
 726
 727
 728
 729
 730
 731
 732
 733
 734
 735
 736
 737
 738
 739
 740
 741
 742
 743
 744
 745
 746
 747
 748
 749
 750
 751
 752
 753
 754
 755
 756
 757
 758
 759
 760
 761
 762
 763
 764
 765
 766
 767
 768
 769
 770
 771
 772
 773
 774
 775
 776
 777
 778
 779
 780
 781
 782
 783
 784
 785
 786
 787
 788
 789
 790
 791
 792
 793
 794
 795
 796
 797
 798
 799
 800
 801
 802
 803
 804
 805
 806
 807
 808
 809
 810
 811
 812
 813
 814
 815
 816
 817
 818
 819
 820
 821
 822
 823
 824
 825
 826
 827
 828
 829
 830
 831
 832
 833
 834
 835
 836
 837
 838
 839
 840
 841
 842
 843
 844
 845
 846
 847
 848
 849
 850
 851
 852
 853
 854
 855
 856
 857
 858
 859
 860
 861
 862
 863
 864
 865
 866
 867
 868
 869
 870
 871
 872
 873
 874
 875
 876
 877
 878
 879
 880
 881
 882
 883
 884
 885
 886
 887
 888
 889
 890
 891
 892
 893
 894
 895
 896
 897
 898
 899
 900
 901
 902
 903
 904
 905
 906
 907
 908
 909
 910
 911
 912
 913
 914
 915
 916
 917
 918
 919
 920
 921
 922
 923
 924
 925
 926
 927
 928
 929
 930
 931
 932
 933
 934
 935
 936
 937
 938
 939
 940
 941
 942
 943
 944
 945
 946
 947
 948
 949
 950
 951
 952
 953
 954
 955
 956
 957
 958
 959
 960
 961
 962
 963
 964
 965
 966
 967
 968
 969
 970
 971
 972
 973
 974
 975
 976
 977
 978
 979
 980
 981
 982
 983
 984
 985
 986
 987
 988
 989
 990
 991
 992
 993
 994
 995
 996
 997
 998
 999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279
1280
1281
1282
1283
1284
1285
1286
1287
1288
1289
1290
1291
1292
1293
1294
1295
1296
1297
1298
1299
1300
1301
1302
1303
1304
1305
1306
1307
1308
1309
1310
1311
1312
1313
1314
1315
1316
1317
1318
1319
1320
1321
1322
1323
1324
1325
1326
1327
1328
1329
1330
1331
1332
1333
1334
1335
1336
1337
1338
1339
1340
1341
1342
1343
1344
1345
1346
1347
1348
1349
1350
1351
1352
1353
1354
1355
1356
1357
1358
1359
1360
1361
1362
1363
1364
1365
1366
1367
1368
1369
1370
1371
1372
1373
1374
1375
1376
1377
1378
1379
1380
1381
1382
1383
1384
1385
1386
1387
1388
1389
1390
1391
1392
1393
1394
1395
1396
1397
1398
1399
1400
1401
1402
1403
1404
1405
1406
1407
1408
1409
1410
1411
1412
1413
1414
1415
1416
1417
1418
1419
1420
1421
1422
1423
1424
1425
1426
1427
1428
1429
1430
1431
1432
1433
1434
1435
1436
1437
1438
1439
1440
1441
1442
1443
1444
1445
1446
1447
1448
1449
1450
1451
1452
1453
1454
1455
1456
1457
1458
1459
1460
1461
1462
1463
1464
1465
1466
1467
1468
1469
1470
1471
1472
1473
1474
1475
1476
1477
1478
1479
1480
1481
1482
1483
1484
1485
1486
1487
1488
1489
1490
1491
1492
1493
1494
1495
1496
1497
1498
1499
1500
1501
1502
1503
1504
1505
1506
1507
1508
1509
1510
1511
1512
1513
1514
1515
1516
1517
1518
1519
1520
1521
1522
1523
1524
1525
1526
1527
1528
1529
1530
1531
1532
1533
1534
1535
1536
1537
1538
1539
1540
1541
1542
1543
1544
1545
1546
1547
1548
1549
1550
1551
1552
1553
1554
1555
1556
1557
1558
1559
1560
1561
1562
1563
1564
1565
1566
1567
1568
1569
1570
1571
1572
1573
1574
1575
1576
1577
1578
1579
1580
1581
1582
1583
1584
1585
1586
1587
1588
1589
1590
1591
1592
1593
1594
1595
1596
1597
1598
1599
1600
1601
1602
1603
1604
1605
1606
1607
1608
1609
1610
1611
1612
1613
1614
1615
1616
1617
1618
1619
1620
1621
1622
1623
1624
1625
1626
1627
1628
1629
1630
1631
1632
1633
1634
1635
1636
1637
1638
1639
1640
1641
1642
1643
1644
1645
1646
1647
1648
1649
1650
1651
1652
1653
1654
1655
1656
1657
1658
1659
1660
1661
1662
1663
1664
1665
1666
1667
1668
1669
1670
1671
1672
1673
1674
1675
1676
1677
1678
1679
1680
1681
1682
1683
1684
1685
1686
1687
1688
1689
1690
1691
1692
1693
1694
1695
1696
1697
1698
1699
1700
1701
1702
1703
1704
1705
1706
1707
1708
1709
1710
1711
1712
1713
1714
1715
1716
1717
1718
1719
1720
1721
1722
1723
1724
1725
1726
1727
1728
1729
1730
1731
1732
1733
1734
1735
1736
1737
1738
1739
1740
1741
1742
1743
1744
1745
1746
1747
1748
1749
1750
1751
1752
1753
1754
1755
1756
1757
1758
1759
1760
1761
1762
1763
1764
1765
1766
1767
1768
1769
1770
1771
1772
1773
1774
1775
1776
1777
1778
1779
1780
1781
1782
1783
1784
1785
1786
1787
1788
1789
1790
1791
1792
1793
1794
1795
1796
1797
1798
1799
1800
1801
1802
1803
1804
1805
1806
1807
1808
1809
1810
1811
1812
1813
1814
1815
1816
1817
1818
1819
1820
1821
1822
1823
1824
1825
1826
1827
1828
1829
1830
1831
1832
1833
1834
1835
1836
1837
1838
1839
1840
1841
1842
1843
1844
1845
1846
1847
1848
1849
1850
1851
1852
1853
1854
1855
1856
1857
1858
1859
1860
1861
1862
1863
1864
1865
1866
1867
1868
1869
1870
1871
1872
1873
1874
1875
1876
1877
1878
1879
1880
1881
1882
1883
1884
1885
1886
1887
1888
1889
1890
1891
1892
1893
1894
1895
1896
1897
1898
1899
1900
1901
1902
1903
1904
1905
1906
1907
1908
1909
1910
1911
1912
1913
1914
1915
1916
1917
1918
1919
1920
1921
1922
1923
1924
1925
1926
1927
1928
1929
1930
1931
1932
1933
1934
1935
1936
1937
1938
1939
1940
1941
1942
1943
1944
1945
1946
1947
1948
1949
1950
1951
1952
1953
1954
1955
1956
1957
1958
1959
1960
1961
1962
1963
1964
1965
1966
1967
1968
1969
1970
1971
1972
1973
1974
1975
1976
1977
1978
1979
1980
1981
1982
1983
1984
1985
1986
1987
1988
1989
1990
1991
1992
1993
1994
1995
1996
1997
1998
1999
2000
2001
2002
2003
2004
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
2025
2026
2027
2028
2029
2030
2031
2032
2033
2034
2035
2036
2037
2038
2039
2040
2041
2042
2043
2044
2045
2046
2047
2048
2049
2050
2051
2052
2053
2054
2055
2056
2057
2058
2059
2060
2061
2062
2063
2064
2065
2066
2067
2068
2069
2070
2071
2072
2073
2074
2075
2076
2077
2078
2079
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
<html>
<head>
<meta name="generator" content=
"HTML Tidy for Linux (vers 25 March 2009), see www.w3.org">
<meta name="GENERATOR" content="LinuxDoc-Tools 0.9.69">
<title>HOWTO - Disques de grande capacit&eacute;</title>
</head>
<body>
<h1>HOWTO - Disques de grande capacit&eacute;</h1>
<h2>Andries Brouwer, <code>aeb@cwi.nl</code>,<br>
version fran&ccedil;aise par Xavier Serpaggi,
<code>xavier.serpaggi@libertysurf.fr</code></h2>
v2.2z, 2 f&eacute;vrier 2002
<hr>
<em>Tout sur la g&eacute;om&eacute;trie des disques durs et la
limite des 1024 cylindres. <!--
HOWTOs!large disk
-->
 <!--
HOWTOs!disk, large
--></em>
<hr>
<p>&nbsp;</p>
<p>Pour obtenir une version toujours &agrave; jour, mais en
anglais, de ce document reportez-vous &agrave; la page <a href=
"http://www.win.tue.nl/~aeb/linux/Large-Disk.html">www.win.tue.nl</a>.</p>
<h2><a name="s1">1. &Eacute;nonc&eacute; du
probl&egrave;me</a></h2>
<p><!--
disk drives!interaction with BIOS
-->
 <!--
BIOS!interaction with disk drives
-->
 Supposons que vous ayez un disque dur de plus de 1024 cylindres.
Supposons &eacute;galement que vous ayez un syst&egrave;me
d'exploitation qui utilise l'ancienne interface INT13,
d'&Eacute;ntr&eacute;e/Sortie sur disques. Dans ce cas, vous avez
un probl&egrave;me, parce que cette interface utilise un champ de
10 bits pour coder les cylindres sur lesquels sont
effectu&eacute;es les &Eacute;ntr&eacute;es/Sorties, de telle
mani&egrave;re que les cylindres 1024 et au-del&agrave; sont
inaccessibles.</p>
<p>Heureusement, Linux ne se sert pas du BIOS, donc il n'y a pas de
probl&egrave;me.</p>
<p>Sauf peut-&ecirc;tre pour deux choses&nbsp;:</p>
<p>(1) Quand vous d&eacute;marrez votre syst&egrave;me, Linux ne
fonctionne pas encore et ne peut donc pas vous pr&eacute;server des
probl&egrave;mes li&eacute;s au BIOS. Cela a certaines
cons&eacute;quences pour LILO et d'autres programmes
d'amor&ccedil;age du m&ecirc;me acabit.</p>
<p>(2) Il est n&eacute;cessaire que tous les syst&egrave;mes
d'exploitation qui se partagent un m&ecirc;me disque dur se mettent
d'accord sur la position physique de chaque partition. En d'autres
termes, si vous utilisez Linux et disons, DOS sur un seul disque
dur, alors les deux se doivent d'interpr&eacute;ter la table des
partitions de la m&ecirc;me mani&egrave;re. Cela a quelques
cons&eacute;quences pour le noyau de Linux et pour
<code>fdisk</code>.</p>
<p>Vous trouverez ci-dessous une description assez pouss&eacute;e
de tous les d&eacute;tails importants. Prenez en compte le fait que
j'utilise comme r&eacute;f&eacute;rence un noyau dans sa version
2.0.8. D'autres versions pourront donc pr&eacute;senter quelques
diff&eacute;rences.</p>
<h2><a name="s2">2. R&eacute;sum&eacute;</a></h2>
<p>Vous avez un nouveau disque de grande capacit&eacute;. Que
faire&nbsp;? Bon, du c&ocirc;t&eacute; logiciel il faut utiliser
<code>fdisk</code> (ou mieux, <code>cfdisk</code>), pour
cr&eacute;er les partitions, ensuite <code>mke2fs</code> pour
cr&eacute;er un syst&egrave;me de fichiers et enfin
<code>mount</code> pour faire le lien entre ce nouveau
syst&egrave;me de fichiers et l'arborescence d&eacute;j&agrave;
existante.</p>
<p>Il n'est pas n&eacute;cessaire de lire ce HOWTO &agrave; partir
du moment o&ugrave;, de nos jours, il n'y a <em>pas</em> de
probl&egrave;me avec les disques de grande capacit&eacute;. La
grande majorit&eacute; des probl&egrave;mes constat&eacute;s est
due au fait que les gens pensent qu'il peut y avoir un
probl&egrave;me et installent un gestionnaire de disques durs, ou
passent en mode expert dans <code>fdisk</code>, ou encore
sp&eacute;cifient explicitement une g&eacute;om&eacute;trie de
disque &agrave; LILO ou sur la ligne de commande du noyau.</p>
<p>Cependant, les domaines dans lesquels interviennent typiquement
les probl&egrave;mes sont&nbsp;:</p>
<ul>
<li>un mat&eacute;riel ancestral&nbsp;;</li>
<li>plusieurs syst&egrave;mes d'exploitation sur le m&ecirc;me
disque dur&nbsp;;</li>
<li>le d&eacute;marrage.</li>
</ul>
<p>Conseil&nbsp;:</p>
<p>Pour les disques durs SCSI de grande capacit&eacute;&nbsp;:
Linux les a tr&egrave;s t&ocirc;t support&eacute;s. Il n'y a rien
&agrave; faire.</p>
<p>Pour les disques durs IDE de grande capacit&eacute;
(au-del&agrave; de 8,4&nbsp;Go)&nbsp;: procurez-vous un noyau
stable r&eacute;cent (2.0.34 ou plus). Normalement, tout doit se
passer correctement, surtout si vous avez eu la sagesse de ne pas
dire au BIOS de faire des conversions du type LBA ou
assimil&eacute;.</p>
<p>Pour des disques durs IDE de capacit&eacute; vraiment importante
(au-del&agrave; de 33,8&nbsp;Go)&nbsp;: reportez-vous &agrave; la
section <a href="#verylarge">Probl&egrave;mes de l'IDE avec des
disques durs de 34&nbsp;Go et plus</a> plus bas dans ce
document.</p>
<p>Si LILO reste bloqu&eacute; au d&eacute;marrage, il faut essayer
de sp&eacute;cifier <code><a href="#linear">linear</a></code> dans
le fichier de configuration <code>/etc/lilo.conf</code> (et si
<code>linear</code> &eacute;tait d&eacute;j&agrave; pr&eacute;sent,
essayez sans). Si vous avez une version r&eacute;cente de LILO
(21.4 ou mieux), le mot-cl&eacute; <code>lba32</code> devrait vous
permettre de d&eacute;marrer de n'importe o&ugrave; sur le disque.
Cela signifie en fait que la limite des 1024 cylindres a disparue
(bien entendu, LILO est un peu fragile et il peut &ecirc;tre plus
pratique d'utiliser un gestionnaire de d&eacute;marrage
diff&eacute;rent).</p>
<p>Il y a des probl&egrave;mes de g&eacute;om&eacute;trie qui
peuvent &ecirc;tre r&eacute;solus en passant explicitement une
g&eacute;om&eacute;trie au noyau/LILO/fdisk.</p>
<p>Si vous avez une vieille version de <code>fdisk</code> et qu'il
vous met des messages d'erreur du type <a href=
"#overlap">'overlapping partitions'</a>&nbsp;: ignorez-les ou
v&eacute;rifiez en utilisant <code>cfdisk</code> que tout va
effectivement bien.</p>
<p>Pour le HPT366, reportez-vous au <a href=
"http://www.csie.ntu.edu.tw/~b6506063/hpt366/">Linux HPT366
HOWTO</a>.</p>
<p>Si, au moment du d&eacute;marrage, le noyau ne peut pas lire la
table des partitions, envisagez la possibilit&eacute; que UDMA66
ait-&eacute;t&eacute; s&eacute;lectionn&eacute; alors que le
contr&ocirc;leur, le c&acirc;ble ou bien le disque dur, ne
supportent pas ce mode. Dans ce cas, quoi que vous fassiez, vos
tentatives de lecture resteront vaines et, tenter de lire la table
des partitions est la premi&egrave;re chose que fait le noyau.
Assurez-vous que UDMA66 n'est pas utilis&eacute;.</p>
<p>Si vous pensez que quelque chose cloche dans la taille de votre
disque dur, assurez-vous que vous n'&ecirc;tes pas en train de
confondre <a href="#units">unit&eacute;s</a> binaires et
d&eacute;cimales et sachez que l'espace libre rapport&eacute; par
<code>df</code> pour un disque vide, est inf&eacute;rieur de
quelques centi&egrave;mes &agrave; la taille de la partition, ce
&agrave; cause d'un en-t&ecirc;te de gestion.</p>
<p>Si le noyau rapporte deux tailles diff&eacute;rentes pour un
m&eacute;dia amovible, cela veut dire que l'une est donn&eacute;e
par le m&eacute;dia lui-m&ecirc;me et l'autre par le disque/la
disquette. Cette seconde valeur est &eacute;gale &agrave;
z&eacute;ro dans le cas o&ugrave; aucun disque/disquette n'est
pr&eacute;sent.</p>
<p>Maintenant, si vous pensez qu'il y a tout de m&ecirc;me des
probl&egrave;mes, ou simplement si vous &ecirc;tes curieux, lisez
la suite.</p>
<h2><a name="units"></a> <a name="s3">3. Unit&eacute;s et
tailles</a></h2>
<p><!--
units!megabyte
-->
 <!--
units!gigabyte
-->
 Un kilo-octet (Ko) est &eacute;gal &agrave; 1000&nbsp;octets
(NdT&nbsp;: un octet se dit byte en anglais et est
abr&eacute;g&eacute; avec un 'B' en majuscule. &Agrave; ne pas
confondre avec un bit, qui se dit bit et qui est
abr&eacute;g&eacute; avec un 'b' en minuscule&nbsp;!). Un
M&eacute;ga-octet (Mo) est &eacute;gal &agrave; 1000&nbsp;Ko. Un
Giga-octet (Go) est &eacute;gal &agrave; 1000&nbsp;Mo. Un
T&eacute;ra-octet (To) est &eacute;gal &agrave; 1000&nbsp;Go. Ceci
est la <a href=
"http://physics.nist.gov/cuu/Units/prefixes.html">norme dans le
Syst&egrave;me International</a> (SI).</p>
<p>Cependant, il y a des personnes qui utilisent la conversion
1&nbsp;Mo=1024000&nbsp;octets et parlent de disquettes de
1,44&nbsp;Mo et des personnes qui pensent que
1&nbsp;Mo=1048576&nbsp;octets. L&agrave;, je me reporte au <a href=
"http://physics.nist.gov/cuu/Units/binary.html">nouveau
standard</a> et j'&eacute;cris Ki, Mi, Gi, Ti pour les
unit&eacute;s binaires, de telle sorte que les disquettes ont une
taille de 1440&nbsp;Kio (1,47&nbsp;Mo, 1,41&nbsp;Mio), 1&nbsp;Mio
est &eacute;gal &agrave; 1048576&nbsp;octets (1,05&nbsp;Mo),
1&nbsp;Gio repr&eacute;sente 1073741824&nbsp;octets (1,07&nbsp;Go)
et 1&nbsp;Tio vaut 1099511627776&nbsp;octets (1,1&nbsp;To).</p>
<p>D'une mani&egrave;re assez normale, les constructeurs de disques
durs suivent la norme SI et utilisent des unit&eacute;s
d&eacute;cimales. Cependant, les messages de d&eacute;marrage du
noyau Linux (pour les noyau qui ne sont pas tr&egrave;s
r&eacute;cents) et quelques programmes de type <code>fdisk</code>
utilisent les symboles MB et GB (Mo et Go en fran&ccedil;ais) pour
les unit&eacute;s binaires, ou binaires-d&eacute;cimales
m&eacute;lang&eacute;es. Donc, avant que vous ne pensiez que votre
disque est plus petit que ce qu'on vous avait promis lors de son
achat, calculez sa vraie taille en unit&eacute;s d&eacute;cimales
(ou simplement en octets).</p>
<p>En ce qui concerne la terminologie et les abr&eacute;viations
des unit&eacute;s binaires, <a href=
"http://www-cs-staff.stanford.edu/~knuth/">Knuth</a> propose une
<a href=
"http://www-cs-staff.stanford.edu/~knuth/news99.html">alternative</a>
qui est d'utiliser KKo, MMo, GGo, TTo, PPo, EEo, ZZo, YYo et de les
d&eacute;nommer <em>grand kilo octet</em>, <em>grand m&eacute;ga
octet</em>, ... <em>grand yota octet</em>. Il &eacute;crit&nbsp;:
<i>"Remarquez que le fait de doubler la lettre a une connotation
&agrave; la fois binaire et d'amplitude."</i> C'est une bonne
proposition --&nbsp;<em>grand giga octet</em> sonne mieux que
<em>gibi octet</em>. Cependant, pour le sujet qui est le
n&ocirc;tre, la seule chose importante est de mettre l'accent sur
le fait qu'un m&eacute;ga octet contient pr&eacute;cis&eacute;ment
1000000&nbsp;octets et qu'il est n&eacute;cessaire d'employer
d'autres termes ou d'autres abr&eacute;vations si vous voulez
d&eacute;signer autre chose.</p>
<h2><a name="ss3.1">3.1 Taille d'un secteur</a></h2>
<p><!--
disk!sectorsize
-->
 Dans le cadre de ce texte, un secteur a une taille de
512&nbsp;octets. Cela est pratiquement toujours vrai, mais certains
disques Magn&eacute;to-Optiques par exemple, utilisent une taille
de secteur &eacute;gale &agrave; 2048&nbsp;octets et toutes les
capacit&eacute;s donn&eacute;es ci-dessous doivent &ecirc;tre
multipli&eacute;es par quatre. (Si vous utilisez <code>fdisk</code>
sur de tels disques, assurez-vous d'avoir une version 2.9i ou
sup&eacute;rieure et passez-lui l'option
<code>-b&nbsp;2048</code>.)</p>
<h2><a name="ss3.2">3.2 Taille d'un disque</a></h2>
<p><!--
disk!disksize
-->
 Un disque avec C cylindres, H t&ecirc;tes (NdT&nbsp;: t&ecirc;te
se dit <em>head</em> en anglais, d'o&ugrave;
l'abr&eacute;viation&nbsp;!) et S secteurs par piste poss&egrave;de
en tout C&times;H&times;S secteurs et peut stocker
C&times;H&times;S&times;512&nbsp;octets. Par exemple, si sur un
disque dur il est &eacute;crit C/H/S=4092/16/63, alors celui-ci a
4092&times;16&times;63=4124736&nbsp;secteurs et peut contenir
4124736&times;512=2111864832&nbsp;octets (2,11&nbsp;Go). Il y a une
convention dans l'industrie qui consiste &agrave; donner
C/H/S=16383/16/63 pour les disques durs de plus de 8,4&nbsp;Go et
donc la taille du disque ne peut plus &ecirc;tre d&eacute;duite des
valeurs C/H/S rapport&eacute;es par ce dernier.</p>
<h2><a name="s4">4. Acc&egrave;s &agrave; un disque dur</a></h2>
<p>Si on veut lire ou &eacute;crire quelque chose &agrave; partir
de, ou sur un disque dur, il faut sp&eacute;cifier une position sur
ce disque, en donnant par exemple un num&eacute;ro de secteur ou de
bloc. Si le disque dur est de type SCSI, alors ce num&eacute;ro de
secteur va directement au moteur de commande SCSI et est compris
par le disque. Si le disque dur est de type IDE et qu'il utilise le
mode LBA, alors il se passe exactement la m&ecirc;me chose. Mais si
le disque dur est vieux, RLL, MFM ou IDE avant l'apparition du LBA,
alors l'&eacute;lectronique qui lui est attach&eacute;e attend un
triplet (cylindre, t&ecirc;te, secteur) pour d&eacute;signer
l'endroit voulu.</p>
<p>La correspondance entre la num&eacute;rotation lin&eacute;aire
et cette notation tridimensionnelle est la suivante&nbsp;: pour un
disque dur avec C&nbsp;cylindres, H&nbsp;t&ecirc;tes et
S&nbsp;secteurs/pistes, la position (c,h,s) en 3D, ou la notation
CHS, est la m&ecirc;me que la position
c&times;H&times;S+h&times;S+(s-1) en notation lin&eacute;aire ou
bien LBA. (Le -1 est d&ucirc; au fait que traditionnellement les
secteurs sont num&eacute;rot&eacute;s &agrave; partir de 1 et non
0, dans cette notation 3D.)</p>
<p>En cons&eacute;quence, pour pouvoir utiliser un tr&egrave;s
vieux disque non-SCSI, il faut conna&icirc;tre sa
<em>g&eacute;om&eacute;trie</em>, c'est-&agrave;-dire les valeurs
de C, H et S. (Si vous n'avez pas d'information &agrave; ce sujet,
vous pouvez toujours fouiller cette mine&nbsp;: <a href=
"http://www.thetechpage.com/cgi-bin/default.cgi">www.thetechpage.com</a>.)</p>
<h2><a name="ss4.1">4.1 Acc&egrave;s disques du BIOS et la limite
des 1024 cylindres</a></h2>
<p>Linux ne se sert pas du BIOS, mais d'autres syst&egrave;mes
d'exploitation le font. Le BIOS, qui existait avant le temps du
LBA, offre avec INT13 des routines d'&Eacute;ntr&eacute;e/Sortie
disque qui prennent (c,h,s) comme arguments. (Plus
pr&eacute;cis&eacute;ment&nbsp;: <code>AH</code> s&eacute;lectionne
la fonction &agrave; ex&eacute;cuter, <code>CH</code> correspond
aux 8 bits de poids faible du num&eacute;ro de cylindre,
<code>CL</code> a dans ses bits 7-6 les deux bits de poids fort de
ce m&ecirc;me num&eacute;ro et dans ses bits 5-0 le num&eacute;ro
du secteur, <code>DH</code> est le num&eacute;ro de la t&ecirc;te
et <code>DL</code> est le num&eacute;ro du lecteur (80h ou 81h).
Cela explique en partie l'agencement de la table des
partitions.)</p>
<p>Donc, nous obtenons un CHS cod&eacute; sur trois octets, avec
10&nbsp;bits pour le num&eacute;ro du cylindre, 8&nbsp;bits pour le
num&eacute;ro de t&ecirc;te et 6&nbsp;bits pour le num&eacute;ro de
secteur sur la piste (num&eacute;rot&eacute; de 1 &agrave; 63). Il
s'ensuit que le num&eacute;ro de cylindre peut prendre des valeurs
allant de 0 &agrave; 1023 et que le BIOS ne peut pas adresser plus
de 1024&nbsp;cylindres.</p>
<p>Les logiciels DOS et Windows n'ont pas &eacute;volu&eacute;
quand furent introduits les disques IDE avec le support LBA et ont
toujours eu besoin du soutien d'une g&eacute;om&eacute;trie pour
g&eacute;rer les disques durs, m&ecirc;me quand cela n'a plus
&eacute;t&eacute; n&eacute;cessaire pour effectuer des
&Eacute;ntr&eacute;es/Sorties, mais uniquement pour converser avec
le BIOS. Cela signifie bien s&ucirc;r que Linux a besoin du support
de la g&eacute;om&eacute;trie du disque dur quand il est
n&eacute;cessaire de communiquer avec le BIOS ou avec d'autres
syst&egrave;mes d'exploitation, m&ecirc;me sur des disques durs
modernes.</p>
<p>Cet &eacute;tat de choses a dur&eacute; pendant &agrave; peu
pr&egrave;s quatre ans. Ont alors commenc&eacute; &agrave;
appara&icirc;tre sur le march&eacute; des disques durs qui ne
pouvaient plus &ecirc;tre adress&eacute;s avec les fonctions INT13
(&agrave; cause du fait que 10+8+6=24&nbsp;bits pour (c,h,s) ne
peuvent pas adresser plus de 8,5&nbsp;Go) et une nouvelle interface
BIOS a &eacute;t&eacute; cr&eacute;&eacute;e&nbsp;: les
d&eacute;nomm&eacute;es Fonctions INT13 &Eacute;tendues, o&ugrave;
DS:SI pointe sur un paquet repr&eacute;sentant l'adressage du
disque sur 16&nbsp;octets, qui contient un nombre absolu de blocs
commen&ccedil;ant par 8&nbsp;octets.</p>
<p>Tout doucement, le monde Microsoft semble aller vers une
utilisation de ces Fonctions INT13 &Eacute;tendues. Probablement,
dans quelques ann&eacute;es, plus aucun syst&egrave;me moderne
plac&eacute; dans un ordinateur moderne n'aura besoin du concept de
'g&eacute;om&eacute;trie de disque dur'.</p>
<h2><a name="ss4.2">4.2 Histoire du BIOS et des limites de
l'IDE</a></h2>
<dl>
<dt><b>Sp&eacute;cification ATA (pour les disques durs IDE)
--&nbsp;la limite des 137&nbsp;Go</b></dt>
<dd>
<p>Au plus 65536&nbsp;cylindres (num&eacute;rot&eacute;s de 0
&agrave; 65535), 16&nbsp;t&ecirc;tes (num&eacute;rot&eacute;es de 0
&agrave; 15), 255&nbsp;secteurs par piste (num&eacute;rot&eacute;s
de 1 &agrave; 255), pour une capacit&eacute; totale maximale de
267386880&nbsp;secteurs (de 512&nbsp;octets chacun), ce qui fait
136902082560&nbsp;octets (137&nbsp;Go). En 2001, le premier disque
dur d'un capacit&eacute; sup&eacute;rieure &agrave; cela est apparu
(le Maxtor&nbsp;Diamondmax de&nbsp;160&nbsp;Go).</p>
</dd>
<dt><b>BIOS Int&nbsp;13 --&nbsp;la limite des 8,5&nbsp;Go</b></dt>
<dd>
<p>Au plus 1024&nbsp;cylindres (num&eacute;rot&eacute;s de 0
&agrave; 1023), 256&nbsp;t&ecirc;tes (num&eacute;rot&eacute;es de 0
&agrave; 255), 63&nbsp;secteurs par piste (num&eacute;rot&eacute;s
de 1 &agrave; 63) pour une capacit&eacute; totale maximale de
8455716864&nbsp;octets (8,5 Go). De nos jours, cela est une
s&eacute;rieuse limitation. Cela signifie que DOS ne peut utiliser
les actuels disques de grande capacit&eacute;.</p>
</dd>
<dt><b>La limite des 528&nbsp;Mo</b></dt>
<dd>
<p>Si les m&ecirc;mes valeurs c,h,s sont utilis&eacute;es pour les
appels aux fonctions Int13 du BIOS et pour les op&eacute;rations
d'&Eacute;ntr&eacute;es/Sorties du disque dur, alors les deux
limitations s'ajoutent et l'on ne peut utiliser au plus que
1024&nbsp;cylindres, 16&nbsp;t&ecirc;tes, 63&nbsp;secteurs par
piste, ce qui donne une capacit&eacute; totale maximale de
528482304&nbsp;octets (528&nbsp;Mo), l'abominable limite des
504&nbsp;Mio pour DOS avec un vieux BIOS. Cela a commenc&eacute;
&agrave; poser des probl&egrave;mes aux alentours de 1993 et les
gens ont eu recours &agrave; toutes sortes de bidouillages, aussi
bien au niveau mat&eacute;riel (LBA), qu'au niveau du micro-code
(NdT&nbsp;: le 'firmware') (les conversions du BIOS), ou qu'au
niveau logiciel (les gestionnaires de disques durs). Le concept de
'conversion' a &eacute;t&eacute; invent&eacute; (1994)&nbsp;: un
BIOS pouvait utiliser une g&eacute;om&eacute;trie quand il
s'adressait au lecteur et une autre g&eacute;om&eacute;trie, fausse
celle-l&agrave;, quand il parlait &agrave; DOS et faire des
conversions de l'une &agrave; l'autre.</p>
</dd>
<dt><b>La limite des 2,1&nbsp;Go (avril 1996)</b></dt>
<dd>
<p>Quelques vieux BIOS n'utilisent qu'un champ de 12&nbsp;bits en
RAM CMOS pour donner le nombre de cylindres. De ce fait, ce nombre
peut &ecirc;tre au plus &eacute;gal &agrave; 4095 et l'on ne peut
acc&eacute;der qu'&agrave;
4095&times;16&times;63&times;512=2113413120&nbsp;octets. Le fait
d'avoir un disque dur de plus grande capacit&eacute; se traduirait
par un plantage au moment du d&eacute;marrage. Cela a pour effet de
rendre les disques avec une g&eacute;om&eacute;trie de 4092/16/63
assez populaires. Et encore de nos jours, beaucoup de gros disques
durs ont un cavalier qui permet de faire croire qu'ils ont une
g&eacute;om&eacute;trie de 4092/16/63. Vous pouvez &eacute;galement
jeter un coup d'oeil &agrave; la page <a href=
"http://www.firmware.com/support/bios/over2gb.htm">plus de
2&nbsp;Go</a>.</p>
</dd>
<dt><b>La limite des 3,2&nbsp;Go</b></dt>
<dd>
<p>Il y avait un bug dans la gestion des BIOS Phoenix 4.03 et 4.04
qui bloquait le syst&egrave;me lors de la configuration du CMOS
pour des disques durs ayant une capacit&eacute; sup&eacute;rieure
&agrave; 3277&nbsp;Mo. Jetez un oeil &agrave; la page <a href=
"http://www.firmware.com/support/bios/over3gb.htm">plus de
3&nbsp;Go</a>.</p>
</dd>
<dt><b>La limite des 4,2&nbsp;Go (f&eacute;vrier 1997)</b></dt>
<dd>
<p>Une conversion simple du BIOS (ECHS=CHS &Eacute;tendu, parfois
appel&eacute;e 'Large disk support' ou simplement 'Large')
fonctionne en doublant le nombre de t&ecirc;tes et en divisant par
deux le nombre de cylindres montr&eacute;s au DOS, de
mani&egrave;re r&eacute;p&eacute;t&eacute;e, jusqu'&agrave; ce que
le nombre de cylindres soit au plus &eacute;gal &agrave; 1024.
Maintenant, DOS et Windows&nbsp;95 ne peuvent pas supporter
256&nbsp;t&ecirc;tes de lecture et donc, dans le cas
fr&eacute;quent o&ugrave; le disque dit avoir 16&nbsp;t&ecirc;tes,
cela signifie que cette moulinette ne fonctionne que jusqu'&agrave;
une taille de
8192&times;16&times;63&times;512=4227858432&nbsp;octets (avec une
fausse g&eacute;om&eacute;trie de 1024&nbsp;cylindres,
128&nbsp;t&ecirc;tes et 63&nbsp;secteurs par piste). Remarquez que
ECHS ne modifie pas le nombre de secteurs par piste, donc si ce
n'est pas 63, la limite sera encore plus basse. Voyez la page
<a href="http://www.firmware.com/support/bios/over4gb.htm">plus de
4 Go</a>.</p>
</dd>
<dt><b>La limite des 7,9&nbsp;Go</b></dt>
<dd>
<p>Des BIOS un peu plus malins que les autres &eacute;vitent le
probl&egrave;me pr&eacute;c&eacute;dent en ajustant d'abord le
nombre de t&ecirc;tes &agrave; 15 ('revised ECHS'), de fa&ccedil;on
qu'une fausse g&eacute;om&eacute;trie comportant
240&nbsp;t&ecirc;tes soit obtenue, valable jusqu'&agrave; une
taille de
1024&times;240&times;63&times;512=7927234560&nbsp;octets.</p>
</dd>
<dt><b>La limite des 8,4&nbsp;Go</b></dt>
<dd>
<p><a name="The 8.4 GB limit"></a> En d&eacute;finitive, si le BIOS
fait tout ce qu'il peut pour r&eacute;ussir la conversion et
utilise 255&nbsp;t&ecirc;tes et 63&nbsp;secteurs par piste
('assisted LBA' ou simplement 'LBA') il peut atteindre
1024&times;255&times;63&times;512=8422686720&nbsp;octets, soit
l&eacute;g&egrave;rement moins que la pr&eacute;c&eacute;dente
limite de 8,5&nbsp;Go, cela parce que les g&eacute;om&eacute;tries
avec 256&nbsp;t&ecirc;tes doivent &ecirc;tre &eacute;vit&eacute;es.
(Cette conversion utilisera pour le nombre de t&ecirc;tes la
premi&egrave;re valeur H, prise dans la suite 16, 32, 64, 128, 255,
pour laquelle la capacit&eacute; totale du disque dur tient dans
1024&times;H&times;63&times;512 et calcule alors le nombre de
cylindres C comme &eacute;tant &eacute;gal &agrave; la
capacit&eacute; totale divis&eacute;e par
(H&times;63&times;512).)</p>
</dd>
<dt><b>La limite des 33,8&nbsp;Go (ao&ucirc;t 1999)</b></dt>
<dd>
<p><a name="biosupgrades"></a> Le prochain obstacle se
pr&eacute;sente avec une taille de 33,8&nbsp;Go. Le probl&egrave;me
est qu'avec les 16&nbsp;t&ecirc;tes et les 63&nbsp;secteurs/piste
par d&eacute;faut, &ccedil;a donne un nombre de cylindres
sup&eacute;rieur &agrave; 65535, qui ne rentre pas dans un short.
La plupart des BIOS existants ne peuvent pas g&eacute;rer de tels
disques. (Jetez un oeil, par exemple &agrave; <a href=
"http://www.asus.com/Products/Motherboard/bios_slot1.html">Asus
upgrades</a> pour une nouvelle image &agrave; flasher qui
fonctionne.) Les noyaux Linux plus anciens que le 2.2.14/2.3.21 ont
besoin d'un correctif. Voyez <a href="#verylarge">les
probl&egrave;mes pos&eacute;s par les disques durs IDE de
34&nbsp;Go et plus</a> ci-dessous.</p>
</dd>
<dt><b>la limite des 137&nbsp;Go (septembre 2001)</b></dt>
<dd>
<p>Comme ceci a d&eacute;j&agrave; &eacute;t&eacute;
mentionn&eacute; ci-dessus, le vieux protocole ATA utilises
16+4+8=28&nbsp;bits pour donner le num&eacute;ro de secteur et de
ce fait, ne peut pas adresser plus de 2^28&nbsp;secteurs. ATA-6
d&eacute;crit une extension qui permet d'adresser
2^48&nbsp;secteurs, soit un million de fois plus. Les noyaux
tr&egrave;s r&eacute;cents incluent un support pour cette
extension.</p>
</dd>
</dl>
<p>Pour une autre discussion sur ce sujet, vous pouvez consulter la
page <a href=
"http://www.maxtor.com/products/DiamondMax/techsupport/Q&amp;A/30004.html">
Breaking the Barriers</a> et pour encore plus de d&eacute;tails,
<a href=
"http://www.maxtor.com/technology/whitepapers/63001.html">IDE Hard
Drive Capacity Barriers</a>.</p>
<p>Les disques durs de plus de 8,4&nbsp;Go sont suppos&eacute;s
donner leur g&eacute;om&eacute;trie comme &eacute;tant 16383/16/63.
Cela signifie en fait que la 'g&eacute;om&eacute;trie' est
obsol&egrave;te, et qu'elle ne peut plus servir &agrave; calculer
la taille totale d'un disque dur.</p>
<h2><a name="s5">5. D&eacute;marrage</a></h2>
<p><!--
booting!BIOS usage during
-->
 <!--
disk!BIOS access during booting
-->
 Quand le syst&egrave;me est mis en route, le BIOS lit le secteur 0
(connu sous le nom de MBR&nbsp;: le "Master Boot Record", la
donn&eacute;e principale d'amor&ccedil;age) du premier disque dur
(ou de la disquette, ou du cd-rom) et saute au code trouv&eacute;
&agrave; cet endroit --&nbsp;en g&eacute;n&eacute;ral un chargeur
d'amorce. Les petits chargeurs trouv&eacute;s &agrave; cet endroit
n'ont, par principe, pas leur propre gestionnaire de disques durs
et utilisent plut&ocirc;t les services du BIOS. Cela signifie qu'un
noyau Linux ne peut &ecirc;tre charg&eacute; que s'il est
enti&egrave;rement situ&eacute; dans les 1024 premiers cylindres du
disque, &agrave; moins que vous ne poss&eacute;diez un BIOS et un
chargeur de d'amorce moderne&nbsp;: un BIOS qui supporte les
fonctions INT13 &Eacute;tendues et un chargeur de d'amorce qui
sache les utiliser.</p>
<p>Ce probl&egrave;me (s'il existe) est r&eacute;solu de
mani&egrave;re tr&egrave;s simple&nbsp;: assurez-vous que le noyau
(et peut-&ecirc;tre d'autres fichiers utilis&eacute;s pendant la
phase de d&eacute;marrage, comme les fichiers 'map' de LILO) soit
situ&eacute; sur une partition qui est comprise toute
enti&egrave;re dans les 1024 premiers cylindres d'un disque dur
auquel le BIOS peut acc&eacute;der --&nbsp;il est probable qu'il
s'agisse du premier ou du second disque.</p>
<p>Ainsi, cr&eacute;ez une petite partition, disons d'une taille de
10&nbsp;Mo, de telle mani&egrave;re qu'il y ait de la place pour
une poign&eacute;e de noyaux, en vous assurant qu'elle soit
contenue enti&egrave;rement dans les 1024 premiers cylindres du
premier ou du second disque dur. Montez-le en tant que
r&eacute;pertoire <code>/boot</code>&nbsp;; ainsi, LILO pourra y
mettre ses propres fichiers.</p>
<p>La plupart des syst&egrave;mes depuis 1998 utilisent un BIOS
moderne.</p>
<h2><a name="linear"></a> <a name="ss5.1">5.1 LILO et les options
'lba32' et 'linear'</a></h2>
<p>Le principal&nbsp;: si vous utilisez LILO comme chargeur
d'amorce, assurez-vous d'avoir un LILO avec une num&eacute;ro de
version d'au moins&nbsp;21.4 (LILO peut &ecirc;tre trouv&eacute;
&agrave; l'adresse suivante&nbsp;: <a href=
"ftp://metalab.unc.edu/pub/Linux/system/boot/lilo/">ftp://metalab.unc.edu/pub/Linux/system/boot/lilo/</a>).</p>
<p>Un appel &agrave; <code>/sbin/lilo</code> (le programme qui
installe la carte d'amor&ccedil;age) permet de stocker une liste
d'adresses dans cette carte, pour que LILO (le chargeur d'amorce)
sache &agrave; partir d'o&ugrave; lire l'image du noyau. Par
d&eacute;faut ces adresses sont stock&eacute;e au format (c,h,s) et
un appel INT13 ordinaire est utilis&eacute; au moment du
d&eacute;marrage.</p>
<p>Quand le fichier de configuration pr&eacute;cise
<code>lba32</code> ou <code>linear</code>, des adresses
lin&eacute;aires sont stock&eacute;es. Avec l'option
<code>lba32</code> les adresses lin&eacute;aires sont
&eacute;galement utilis&eacute;es au moment du d&eacute;marrage si
le BIOS supporte les extensions INT13 &eacute;tendues. Avec
l'option <code>linear</code>, ou avec un vieux BIOS, ces adresses
lin&eacute;aires sont reconverties sous une forme (c,h,s) et au
moment du d&eacute;marrage des appels INT13 ordinaires sont
utilis&eacute;s.</p>
<p>De ce fait, avec l'option <code>lba32</code> il n'y a pas de
probl&egrave;me de g&eacute;om&eacute;trie et il n'y a pas de
limite &agrave; 1024&nbsp;cylindres. Sans elle, il y a une limite
&agrave; 1024&nbsp;cylindres. Qu'en est-il de la
g&eacute;om&eacute;trie&nbsp;?</p>
<p>Le programme d'amor&ccedil;age et le BIOS doivent &ecirc;tre
d'accord sur la g&eacute;om&eacute;trie du disque dur.
<code>/sbin/lilo</code> demande la g&eacute;om&eacute;trie au
noyau, mais il n'y a aucune garantie que la g&eacute;om&eacute;trie
du noyau Linux co&iuml;ncide avec celle qu'utilise le BIOS. Donc,
la g&eacute;om&eacute;trie fourni par le noyau est souvent inutile.
Dans de tels cas on peut faciliter la t&acirc;che &agrave; LILO en
lui passant l'option <code>linear</code>. L'avantage alors est que,
l'id&eacute;e qu'&agrave; le noyau Linux de la
g&eacute;om&eacute;trie, n'est plus utilis&eacute;e. Le revers de
la m&eacute;daille est que <code>lilo</code> ne peut plus vous
pr&eacute;venir si une partie du noyau est stock&eacute;e
au-del&agrave; de la limite des 1024&nbsp;cylindres et vous pouvez
vous retrouver avec un syst&egrave;me qui ne d&eacute;marre
plus.</p>
<h2><a name="ss5.2">5.2 Un bug de LILO</a></h2>
<p>Avec les versions de LILO ant&eacute;rieures &agrave; la 2.1 il
y a un autre d&eacute;savantage&nbsp;: la conversion des adresses
effectu&eacute;e au d&eacute;marrage comporte un bug. Quand
c&times;H est sup&eacute;rieur ou &eacute;gal &agrave; 65536, le
calcul provoque un d&eacute;passement de capacit&eacute;. Pour H
sup&eacute;rieur &agrave; 64 cela donne &agrave; c une limite
encore plus stricte que le bien connu c&lt;1024&nbsp;; par exemple,
avec H=255 et un vieux LILO, on doit avoir c&lt;258 (c=cylindre
o&ugrave; r&eacute;side l'image du noyau, H=nombre de t&ecirc;tes
du disque).</p>
<h2><a name="ss5.3">5.3 1024 cylindres ce n'est pas 1024
cylindres</a></h2>
<p>Tim Williams a &eacute;crit&nbsp;: <em>"J'avais ma partition
Linux en dessous des 1024 premiers cylindres et &ccedil;a ne
d&eacute;marrait quand m&ecirc;me pas. Au d&eacute;but quand je
l'ai d&eacute;plac&eacute;e en dessous de 1&nbsp;Go, les choses
fonctionnaient."</em> Comment cela est-il possible&nbsp;? En fait,
c'&eacute;tait un disque dur SCSI avec un contr&ocirc;leur
AHA2940UW qui utilise soit H=64, S=32 (c'est &agrave; dire des
cylindres de 1&nbsp;Mio=1,05&nbsp;Mo), soit H=255, S=63 (c'est
&agrave; dire des cylindres de 8,2&nbsp;Mo), en fonction des
options du micro-code du disque dur et du BIOS. Il ne fait aucun
doute que le BIOS se basait sur le premier groupe de valeurs, c'est
pourquoi la limite des 1024&nbsp;cylindres &eacute;tait
trouv&eacute;e &agrave; 1&nbsp;Gio, alors que Linux utilisait la
seconde m&eacute;thode et LILO estimait que la limite &eacute;tait
&agrave; 8,4&nbsp;Go.</p>
<h2><a name="ss5.4">5.4 Plus de limite &agrave; 1024 cylindre sur
une vieille machine IDE</a></h2>
<p>Le chargeur d'amorce <code>nuni</code> ne fait pas appel aux
services du BIOS mais acc&egrave;de directement aux unit&eacute;s
IDE. Donc il est possible de le mettre sur une disquette ou sur le
MBR et de d&eacute;marrer de d'importe o&ugrave; de n'importe quel
disque IDE (pas seulement les deux premiers). Vous pouvez trouver
ce chargeur &agrave; <a href=
"ftp://metalab.unc.edu/pub/Linux/system/boot/loaders/">ftp://metalab.unc.edu/pub/Linux/system/boot/loaders/</a></p>
<h2><a name="overlap"></a> <a name="s6">6. G&eacute;om&eacute;trie
du disque dur, partitions et 'overlap'</a></h2>
<p><!--
disk!geometry
-->
 <!--
disk!partitions
-->
 Si vous avez plusieurs syst&egrave;mes d'exploitation sur vos
disques durs, alors chacun utilise une ou plusieurs partitions. Un
d&eacute;saccord sur la localisation de ces partitions peut avoir
des cons&eacute;quences catastrophiques.</p>
<p><a name="partitiontable"></a> Le MBR contient une <i>table des
partitions</i> qui d&eacute;crit o&ugrave; se situent les
partitions (primaires). Il y a 4 entr&eacute;es &agrave; la table,
pour 4 partitions primaires et chacune ressemble
&agrave;&nbsp;:</p>
<blockquote>
<pre>
<code>struct partition {
        char active;    /* 0x80 : on peut demarrer avec ;
                           0    : on ne peut pas */
        char begin[3];  /* CHS pour le premier secteur */
        char type;
        char end[3];    /* CHS pour le dernier secteur */
        int start;      /* numero de secteur sur 32 bits (en commencant a 0) */
        int length;     /* nombre de secteurs sur 32 bits */
};
</code>
</pre></blockquote>
(avec CHS qui signifie Cylinder/Head/Sector
--&nbsp;Cylindre/T&ecirc;te/Secteur).
<p>Cette information est redondante&nbsp;: la position de la
partition est donn&eacute;e &agrave; la fois par les champs
<code>begin</code> et <code>end</code> cod&eacute;s sur
24&nbsp;bits et par les champs <code>start</code> et
<code>length</code> cod&eacute;s sur 32&nbsp;bits.</p>
<p>Linux ne se sert que des champs <code>start</code> et
<code>length</code> et ne peut de ce fait que prendre en compte des
partitions qui ne comportent pas plus de 2^32&nbsp;secteurs,
c'est-&agrave;-dire, des partitions d'au plus 2&nbsp;Tio. Cette
capacit&eacute; est douze fois plus grande que celle des disques
durs que l'on peut trouver de nos jours, alors peut-&ecirc;tre que
cela sera suffisant pour, environ, les cinq prochaines
ann&eacute;es. (Donc, les partitions peuvent &ecirc;tre tr&egrave;s
grandes, mais il y a une s&eacute;rieuse restriction avec le
syst&egrave;me de fichiers ext2 quand il est utilis&eacute; sur des
machines avec des entiers cod&eacute;s sur 32&nbsp;bits&nbsp;: la
taille maximale d'un fichier est limit&eacute;e &agrave;
2&nbsp;Gio.)</p>
<p>DOS utilise les champs <code>begin</code> et <code>end</code> et
se sert des appels INT13 du BIOS pour acc&eacute;der aux disques
durs&nbsp;; il ne peut g&eacute;rer de ce fait que des disques dont
la taille ne d&eacute;passe pas 8,4&nbsp;Go, m&ecirc;me avec un
BIOS qui fait des conversions. (La taille des partitions ne peut
pas exc&eacute;der 2,1&nbsp;Go &agrave; cause des restrictions du
syst&egrave;me de fichiers FAT16.) La m&ecirc;me chose est valable
pour Windows&nbsp;3.11, WfWG et Windows&nbsp;NT&nbsp;3.*.</p>
<p>Windows&nbsp;95 int&egrave;gre la gestion des interfaces INT13
&Eacute;tendues et utilise des types de partition sp&eacute;ciaux
(c, e, f &agrave; la place de b, 6, 5) pour indiquer que l'on doit
acc&eacute;der &agrave; la partition de cette mani&egrave;re. Quand
ces types de partition sont utilis&eacute;s, les champs
<code>begin</code> et <code>end</code> contiennent des informations
factices (1023/255/63). Windows 95 OSR2 introduit le syst&egrave;me
de fichier FAT32 (types de partition b ou c), qui permet d'avoir
des partitions d'au plus 2 Tio.</p>
<p>Qu'est-ce que c'est que ce message insens&eacute; que vous
rapporte <code>fdisk</code> au sujet de partitions qui se
chevauchent&nbsp;: 'overlapping', quand pourtant tout est en
ordre&nbsp;? En fait, il y a quelque chose de
'probl&eacute;matique'&nbsp;: si vous voyez les champs
<code>begin</code> et <code>end</code> de telles partitions, comme
DOS le fait, il y a chevauchement (et cela ne peut pas &ecirc;tre
corrig&eacute;, parce que ces champs ne peuvent pas stocker des
num&eacute;ros de cylindre plus grands que 1024&nbsp;: il y aura
toujours 'chevauchement' d&egrave;s que vous aurez plus de 1024
cylindres). Cependant, si vous voyez les champs <code>start</code>
et <code>length</code>, comme les voit Linux et &eacute;galement
Windows&nbsp;95 dans le cas de partitions typ&eacute;es c, e ou f,
alors tout appara&icirc;t comme &eacute;tant en ordre. Donc, ne
tenez pas compte de ces avertissements quand <code>cfdisk</code> ne
se plaint pas et que vous avez un disque dur avec uniquement Linux
dessus. Soyez prudents quand le disque dur est partag&eacute; avec
DOS. Servez-vous des commandes <code>cfdisk -Ps /dev/hdx</code> et
<code>cfdisk -Pt /dev/hdx</code> pour voir la table des partitions
du disque <code>/dev/hdx</code>.</p>
<h2><a name="ss6.1">6.1 Le dernier cylindre</a></h2>
<p>Un nombre important de vieux IBM&nbsp;PS/2 utilisent des disques
durs avec une carte des <i>d&eacute;faillances</i> &eacute;crite
&agrave; la fin du disque (le bit 0x20 dans le mot de controle de
<a href=
"http://www.win.tue.nl/~aeb/linux/hdtypes/hdtypes-2.html">la table
de param&egrave;trage du disque</a> est positionn&eacute;). De ce
fait, FDISK n'utilisera pas le dernier cylindre. Pour se
pr&eacute;munir d'&eacute;ventuel probl&egrave;me le BIOS donne
souvent un taille inf&eacute;rieure d'un cylindre par rapport celle
r&eacute;elle du disque, ce qui peut faire en tout, deux cylindres
de perdus. Les disques r&eacute;cents ont plusieurs fonctions
permettant de donner leur taille qui, en interne, s'apellent les
unes les autres. Quand les deux retirent 1 pour ce cylindre
r&eacute;serv&eacute; et quand FDISK le fait aussi, alors trois
cylindres peuvent &ecirc;tre perdus. De nos jours tout ceci n'a
plus de sens mais peut fournir une explication quand on utilise
diff&eacute;rents utilitaires qui donnent des valeurs
diff&eacute;rentes pour la taille du disque dur.</p>
<h2><a name="ss6.2">6.2 Limites du cylindre</a></h2>
<p>La croyance populaire racconte que les partitions doivent
commencer et finir aux fronti&egrave;res des cylindres.</p>
<p>Puisque <em>la g&eacute;om&eacute;trie des disques</em> est
quelque chose qui n'a pas de r&eacute;elle existence, des
syst&egrave;mes d'exploitation diff&eacute;rents inventeront des
g&eacute;om&eacute;tries diff&eacute;rentes pour le m&ecirc;me
disque. On voit souvent un syst&egrave;me d'exploitation utiliser
une g&eacute;om&eacute;trie apr&egrave;s conversion de */255/63 et
un autre utiliser une g&eacute;om&eacute;trie avant conversion de
*/16/63. Du coup, il devrait &ecirc;tre impossible d'aligner les
partitions sur les limites des cylilndres, si l'on se fie &agrave;
l'id&eacute;e que chaque syst&egrave;me d'exploitation a de la
g&eacute;om&eacute;trie du disque. De plus, le fait d'activer ou
non le BIOS d'une carte SCSI peut changer la fausse
g&eacute;om&eacute;trie des disques SCSI connect&eacute;s.</p>
<p>Par chance, pour Linux les alignements ne sont pas
n&eacute;cessaires (sauf pour quelques logiciels d'installation
boiteux qui aiment bien &ecirc;tre s&ucirc;r que tout est
d'aplomb&nbsp;; ce qui peut emp&eacute;cher d'installer une
RedHat&nbsp;7.1 sur un disque aux partitions non align&eacute;es,
DiskDruid n'&eacute;tant pas content).</p>
<p>Des personnes rapportent qu'il est facile de cr&eacute;er des
partitions non align&eacute;es sous Windows&nbsp;NT, sans qu'il n'y
ait de probl&egrave;me apparent.</p>
<p>MSDOS&nbsp;6.22 par contre, n&eacute;cessite un alignement. Les
secteurs sur partitions &eacute;tendues qui ne sont pas sur la
fronti&egrave;re d'un cylindre son ignor&eacute;es par son FDISK.
Le syst&egrave;me lui-m&ecirc;me se satisfait de n'importe quel
alignement mais interpr&egrave;te les adresses de d&eacute;but
relatives, comme si elles &eacute;taient relatives &agrave; une
adresse align&eacute;e. L'adresse de d&eacute;part d'une partition
logique est donn&eacute;e relativement, non pas &agrave; l'adresses
de la partition &eacute;tendue qui la d&eacute;crit, mais au
d&eacute;but du cylindre qui contient ce secteur (il n'est donc pas
&eacute;tonnant que, m&ecirc;me PartitionMagic, n&eacute;cessite un
alignement).</p>
<p>Quelle est la d&eacute;finition de l'alignement&nbsp;? FDISK de
MSDOS&nbsp;6.22 se comportera comme suit&nbsp;: 1. Si le premier
secteur d'un cylindre est un secteur de table de partition, alors
le reste de la piste sera inutilis&eacute; et la partition
commencera &agrave; la prochaine piste. Ceci s'applique au
secteur&nbsp;0 (le MBR) et aux secteurs de table de partition
pr&eacute;c&eacute;dant les partitions logiques. 2. Sinon la
partition commence sur le premier secteur du cylindre. De plus, les
partitions &eacute;tendues commencent sur une fronti&egrave;re de
cylindre. La page de manuel de <code>cfdisk</code> explique que les
vieilles versions de DOS n'alignaient pas les partitions.</p>
<p>L'utilisation de partitions de type 85 pour les partitions
&eacute;tendues les rend invisible &agrave; DOS, ce qui assure que
seul Linux pourra regarder ce qui s'y trouve.</p>
<p>Une petite apart&eacute;&nbsp;: sur une Sparc, la partition
d'amor&ccedil;age doit commencer sur une fronti&egrave;re de
cylindre (mais rien n'est requis pour la fin).</p>
<h2><a name="s7">7. Conversion et Gestionnaires de Disques
Durs</a></h2>
<p><!--
disk!geometry translation
-->
 <!--
BIOS!translating
-->
 <!--
BIOS!LBA support
-->
 La g&eacute;om&eacute;trie des disques durs (avec t&ecirc;tes,
cylindres et pistes) est une notion qui date de l'&acirc;ge de MFM
et RLL. En ces temps l&agrave; cela correspondait &agrave; une
r&eacute;alit&eacute; physique. Aujourd'hui, avec l'IDE ou le SCSI,
plus personne n'est int&eacute;ress&eacute; par les
'v&eacute;ritables' valeurs de la g&eacute;om&eacute;trie d'un
disque dur. En effet, le nombre de secteurs par piste est variable
--&nbsp;il y en a plus pour les pistes proches du bord
ext&eacute;rieur du disque&nbsp;-- donc il n'y a pas de 'bon'
nombre de secteurs par piste. Pratiquement &agrave;
l'oppos&eacute;&nbsp;: la commande IDE, INITIALIZE DRIVE PARAMETERS
(91h) est utilis&eacute;e pour renseigner le disque dur sur le
nombre de t&ecirc;tes et de secteurs par piste qu'il est
sens&eacute; avoir &agrave; ce moment pr&eacute;cis. Il est assez
normal de voir un gros disque dur r&eacute;cent qui n'a que 2
t&ecirc;tes, rapporter qu'il en a 15 ou 16 au BIOS, pendant que le
BIOS peut &agrave; son tour dire au logiciel qui va s'en servir
qu'il en a 255.</p>
<p>Pour l'utilisateur, le mieux est de voir le disque dur comme un
tableau lin&eacute;aire de secteurs num&eacute;rot&eacute;s 0, 1,
... et de laisser le micro-code trouver o&ugrave;, sur le disque
dur, est situ&eacute; tel ou tel secteur. Cette num&eacute;rotation
lin&eacute;aire est appel&eacute;e LBA.</p>
<p>Donc, &agrave; pr&eacute;sent, la vision conceptuelle est la
suivante&nbsp;: DOS, ou quel que soit le programme
d'amor&ccedil;age, converse avec le BIOS en se servant de la
notation (c,h,s). Le BIOS convertit (c,h,s) en notation LBA en
utilisant la g&eacute;om&eacute;trie factice dont l'utilisateur se
sert. Si le disque dur accepte le LBA, alors cette valeur est
utilis&eacute;e pour les &Eacute;ntr&eacute;es/Sorties sur le
disque. Autrement, elle est &agrave; nouveau convertie en
(c',h',s') en utilisant la g&eacute;om&eacute;trie dont le disque
se sert cette fois-l&agrave; et qui est utilis&eacute;e pour les
&Eacute;ntr&eacute;es/Sorties.</p>
<p>Remarquez qu'il y a une l&eacute;g&egrave;re confusion dans
l'utilisation de l'expression 'LBA'&nbsp;: en tant que terme
d&eacute;crivant les possibilit&eacute;s d'un disque dur, cela
signifie 'Linear Block Adressing' --&nbsp;Adressage de blocs de
mani&egrave;re lin&eacute;aire&nbsp;-- (par opposition &agrave; un
adressage CHS). En tant que terme de configuration du BIOS, il
d&eacute;crit la m&eacute;thode de conversion parfois
appel&eacute;e 'Assisted LBA' --&nbsp;voir plus haut&nbsp;:
<a href="#The%208.4%20GB%20limit">La limite des 8,4 Go</a>.</p>
<p>Un comportement &agrave; peu pr&egrave;s identique
appara&icirc;t quand le micro-code ne parle pas le LBA, mais que le
BIOS conna&icirc;t la conversion. (Dans la configuration il est
souvent mentionn&eacute; 'Large'.) Donc, le BIOS va
pr&eacute;senter une g&eacute;om&eacute;trie (C,H,S) au
syst&egrave;me d'exploitation et va utiliser (C',H',S') quand il
parlera au contr&ocirc;leur du disque dur. Habituellement, S=S',
C=C'/N et H = H'&times;N, o&ugrave; N est la plus petite puissance
de deux qui garantisse C' &lt;= 1024 (ainsi un minimum d'espace
disque est perdu au moment de l'arrondi dans C'=C/N). Encore une
fois, cela permet un acc&egrave;s &agrave; 8,4&nbsp;Go maximum
(7,8&nbsp;Gio).</p>
<p>(La troisi&egrave;me option de configuration est 'Normal', pour
laquelle aucune conversion n'est effectu&eacute;e.)</p>
<p>Si un BIOS ne conna&icirc;t pas 'Large' ou 'LBA', alors il
existe quelque part une solution logicielle. Les gestionnaires de
disques durs comme OnTrack ou EZ-Drive remplacent les routines de
gestion de disque du BIOS par les leurs. Cela est souvent
r&eacute;alis&eacute; en faisant r&eacute;sider le code du
gestionnaire de disque dans le MBR et les secteurs suivants
(OnTrack nomme ce code DDO&nbsp;: Dynamic Drive Overlay -
recouvrement dynamique de disque), comme &ccedil;a, il est
charg&eacute; avant n'importe quel autre syst&egrave;me
d'exploitation. C'est pourquoi on peut avoir des probl&egrave;mes
en d&eacute;marrant depuis une disquette quand un gestionnaire de
disque dur a &eacute;t&eacute; install&eacute;.</p>
<p>Le r&eacute;sultat est plus ou moins le m&ecirc;me avec un BIOS
qui fait des conversions - mais particuli&egrave;rement, c'est
quand on utilise plusieurs syst&egrave;mes d'exploitation sur le
m&ecirc;me disque dur que ces gestionnaires peuvent poser beaucoup
de probl&egrave;mes.</p>
<p>Depuis sa version 1.3.14, Linux supporte le gestionnaire de
disque dur OnTrack. EZ-Drive quant &agrave; lui est support&eacute;
depuis la version 1.3.29. Quelques d&eacute;tails
suppl&eacute;mentaires sont donn&eacute;s dans ce qui suit.</p>
<h2><a name="s8">8. Conversions du noyau pour les disques durs
IDE</a></h2>
<p><!--
disk!translation done by kernel
-->
 Si le noyau de Linux d&eacute;tecte la pr&eacute;sence d'un
gestionnaire de disque sur un disque dur IDE, il va essayer de
recartographier le disque de la m&ecirc;me mani&egrave;re que
l'aurait fait le gestionnaire de disque, comme &ccedil;a Linux voit
le m&ecirc;me partitionnement pour, par exemple, DOS avec OnTrack
ou EZ-Drive. Cependant, AUCUNE recartographie n'est
effectu&eacute;e quand une g&eacute;om&eacute;trie a
&eacute;t&eacute; pass&eacute;e en ligne de commande --&nbsp;donc
une option de la ligne de commande comme
'<code>hd=</code><i>cyls</i><code>,</code><i>t&ecirc;tes</i><code>,</code><i>secs</i>'
peut tr&egrave;s bien briser la compatibilit&eacute; avec un
gestionnaire de disque.</p>
<p>Si vous &ecirc;tes touch&eacute; par ce probl&egrave;me et que
vous connaissez quelqu'un qui peut compiler pour vous un nouveau
noyau, trouvez le fichier <code>linux/drivers/block/ide.c</code> et
supprimez, dans la routine <code>ide_xlate_1024()</code>, le test
<code>if (drive-&gt;forced_geom) { ...; return 0; }</code>.</p>
<p>La nouvelle cartographie est obtenue en essayant les valeurs 4,
8, 16, 32, 64, 128, 255 pour le nombre de t&ecirc;tes (H&times;C
reste constant) jusqu'&agrave; ce que C &lt;= 1024 ou que
H=255.</p>
<p>Ci-dessous les d&eacute;tails --&nbsp;les titres des
sous-sections sont les messages qui apparaissent dans les
diff&eacute;rents messages de d&eacute;marrage. Ici et partout
ailleurs dans ce texte, les types des partitions sont donn&eacute;s
en hexad&eacute;cimal.</p>
<h2><a name="ss8.1">8.1 EZD</a></h2>
<p><!--
disk!EZ-Drive translation
-->
 <!--
disk!EZD translation
-->
 EZ-Drive est d&eacute;tect&eacute; par le fait que le type de la
premi&egrave;re partition primaire est 55. La
g&eacute;om&eacute;trie est recartographi&eacute;e comme
d&eacute;crit ci-dessus et la table des partitions du secteur 0 est
supprim&eacute;e --&nbsp;&agrave; la place, la table des partitions
est celle lue sur le secteur 1. Le nombre de blocs du disque n'est
pas chang&eacute;, mais les &eacute;critures sur le secteur 0 sont
redirig&eacute;es vers le secteur 1. Ce comportement peut
&ecirc;tre modifi&eacute; en recompilant le noyau avec
<code>#define FAKE_FDISK_FOR_EZDRIVE 0</code> dans
<code>ide.c</code>.</p>
<h2><a name="ss8.2">8.2 DM6&nbsp;: DDO</a></h2>
<p><!--
disk!OnTrack DiskManager translation
-->
 <!--
disk!DM6:DD0 translation
-->
 OnTrack DiskManager (sur le premier disque dur) est
d&eacute;tect&eacute; gr&acirc;ce au type 54 de la premi&egrave;re
partition primaire. La g&eacute;om&eacute;trie est
recartographi&eacute;e comme d&eacute;crit ci-dessus et la
totalit&eacute; du disque est d&eacute;cal&eacute;e de 63 secteurs
(comme &ccedil;a, l'ancien secteur 63 devient le num&eacute;ro 0).
Ensuite un nouveau MBR (avec une table des partitions) est lu
depuis le nouveau secteur 0. Bien s&ucirc;r ce d&eacute;calage a
pour but de lib&eacute;rer de la place pour le DD0 --&nbsp;c'est
pourquoi il n'y a pas de d&eacute;calage sur les autres disques
durs.</p>
<h2><a name="ss8.3">8.3 DM6&nbsp;: AUX</a></h2>
<p><!--
disk!OnTrack DiskManager translation
-->
 <!--
disk!DM6:AUX
-->
 OnTrack DiskManager (sur les autres disques durs) est
d&eacute;tect&eacute; gr&acirc;ce au type 51 ou 53 de la
premi&egrave;re partition primaire. La g&eacute;om&eacute;trie est
recartographi&eacute;e comme d&eacute;crit ci-dessus.</p>
<h2><a name="ss8.4">8.4 DM6&nbsp;: MBR</a></h2>
<p><!--
disk!OnTrack DiskManager translation
-->
 <!--
disk!DM6:MBR
-->
 Une version plus ancienne de OnTrack DiskManager n'est pas
d&eacute;tect&eacute;e gr&acirc;ce au type de partition, mais par
signature. (Un test est effectu&eacute; pour savoir si la valeur de
d&eacute;calage trouv&eacute;e dans les octets 2 et 3 du MBR n'est
pas sup&eacute;rieure &agrave; 430 et si le <code>short</code>
trouv&eacute; &agrave; cette valeur de d&eacute;calage est
&eacute;gal &agrave; 0x55AA et qu'il est suivi par un octet
impair.) Une fois encore, la g&eacute;om&eacute;trie est
recartographi&eacute;e comme d&eacute;crit ci-dessus.</p>
<h2><a name="ss8.5">8.5 PTBL</a></h2>
<p><!--
disk!PTBL translation
-->
 Finalement, il y a un test qui tente de d&eacute;duire une
conversion &agrave; partir des valeurs <code>start</code> et
<code>end</code> de la partition primaire&nbsp;: si n'importe
quelle partition a comme secteurs de d&eacute;but et de fin
respectivement 1 et 63 et comme dernier num&eacute;ro de t&ecirc;te
31, 63, 127 ou 254, alors, &agrave; partir du moment o&ugrave; il
est habituel de terminer des partitions sur une limite de secteur
et qui plus est depuis que l'interface IDE utilise au plus 16
t&ecirc;tes, il est suppos&eacute; qu'une conversion du BIOS est
active et la g&eacute;om&eacute;trie est recartographi&eacute;e
pour utiliser respectivement 32, 64, 128 ou 255 t&ecirc;tes.
Cependant, le disque n'est pas recartographi&eacute; quand la
vision actuelle de la g&eacute;om&eacute;trie a d&eacute;j&agrave;
63 secteurs par piste et au moins autant de t&ecirc;tes (cela
signifie sans doute qu'il a d&eacute;j&agrave; &eacute;t&eacute;
recartographi&eacute;).</p>
<h2><a name="ss8.6">8.6 Comment se d&eacute;barasser d'un
gestionnaire de disque</a></h2>
<p>Quand Linux d&eacute;tecte le gestionnaire de disque
Ontrack&nbsp;Disk&nbsp;Manager il d&eacute;cale tous les
acc&egrave;s disques de 63 secteurs. De la m&ecirc;me
mani&egrave;re, si Linux d&eacute;tecte EZ-Drive, tous les
acc&egrave;s au secteur 0 seront d&eacute;cal&eacute;s au secteur
1. Cela signifie qu'il peut s'av&eacute;rer difficile de se
d&eacute;barasse de ces gestionnaires de disque. La plupart de ces
gestionnaires ont une option de d&eacute;sinstallation, mais si
vous avez besoin de supprimer un gestionnaire de disque, une
approche peut &ecirc;tre de donner explicitement une
g&eacute;om&eacute;trie de disque sur la ligne de commande. De ce
fait Linux saute la routine <code>ide_xlate_1024()</code> et il est
du coup possible de supprimer la table des partitions ainsi que le
gestionnaire de disque (rendant l'acc&egrave;s &agrave; toutes les
donn&eacute;es impossible) avec la commande</p>
<blockquote>
<pre>
<code>        dd if=/dev/zero of=/dev/hdx bs=512 count=1
</code>
</pre></blockquote>
Les d&eacute;tails d&eacute;pendent du num&eacute;ro de version
mineur du noyau. Les noyaux r&eacute;cents (depuis le 2.3.21)
reconanissen les param&egrave;tres de d&eacute;marrage tels que
<code>hda=remap</code> et <code>hdb=noremap</code>. Il est alors
possible de conserver ou d'&eacute;viter le d&eacute;calage
d&ucirc; &agrave; EZD sans se soucier de ce qui est dans la table
des partitions. Le param&egrave;tre de d&eacute;marrage
<code>hdX=noremap</code> permet &eacute;galement d'&eacute;viter le
d&eacute;calage d&ucirc; au gestionnaire
Ontrack&nbsp;Disk&nbsp;Manager.
<h2><a name="s9">9. Cons&eacute;quences</a></h2>
<p><!--
disk!consequences of translation
-->
 Qu'est-ce que tout cela signifie&nbsp;? Pour les utilisateurs de
Linux seulement une chose&nbsp;: qu'ils doivent s'assurer que LILO
et <code>fdisk</code> utilisent la bonne g&eacute;om&eacute;trie,
o&ugrave; 'bonne' pour <code>fdisk</code> est d&eacute;finie comme
la g&eacute;om&eacute;trie utilis&eacute;e par les autres
syst&egrave;mes d'exploitation sur le m&ecirc;me disque dur et pour
LILO comme la g&eacute;om&eacute;trie qui va permettre des
&eacute;changes valides avec le BIOS au moment du d&eacute;marrage
(en g&eacute;n&eacute;ral les deux vont de pair).</p>
<p>Comment <code>fdisk</code> conna&icirc;t-il la
g&eacute;om&eacute;trie&nbsp;? Il demande au noyau en utilisant
l'ioctl <code>HDIO_GETGEO</code>. Mais l'utilisateur peut passer
outre cela en pr&eacute;cisant la g&eacute;om&eacute;trie de
mani&egrave;re interactive, ou sur la ligne de commande.</p>
<p>Comment LILO conna&icirc;t-il la g&eacute;om&eacute;trie&nbsp;?
Il demande au noyau en utilisant l'ioctl <code>HDIO_GETGEO</code>.
Mais l'utilisateur peut passer outre cela en utilisant l'option
'<code>disk=</code>' dans le fichier <code>/etc/lilo.conf</code>
(voyez la page de manuel lilo.conf(5)). On peut &eacute;galement
passer l'option <code>linear</code> &agrave; LILO, il va alors
stocker des adresses LBA &agrave; la place des CHS dans son fichier
'map' et retrouvera la g&eacute;om&eacute;trie &agrave; utiliser au
moment du d&eacute;marrage (en utilisant la fonction 8 de INT13
pour conna&icirc;tre la g&eacute;om&eacute;trie du disque dur).</p>
<p>Comment le noyau sait-il r&eacute;pondre&nbsp;? Eh bien, en tout
premier lieu, l'utilisateur doit avoir sp&eacute;cifi&eacute; de
mani&egrave;re explicite, soit &agrave; la main soit par
l'interm&eacute;diaire du chargeur d'amorce, la
g&eacute;om&eacute;trie avec la commande en ligne du noyau
'<code>hda=</code><i>cyls</i><code>,</code><i>t&ecirc;tes</i><code>,</code><i>secs</i>'
(voyez la page de manuel bootparam(7)). Par exemple, vous pouvez
demander &agrave; LILO de fournir une telle option en ajoutant une
ligne
'<code>append="hda=</code><i>cyls</i><code>,</code><i>t&ecirc;tes</i><code>,</code><i>secs</i><code>"</code>'
dans le fichier <code>/etc/lilo.conf</code> (voyez la page de
manuel de lilo.conf(5)). Sinon, le noyau devra deviner,
probablement en se servant des valeurs obtenues &agrave; partir du
BIOS ou du mat&eacute;riel lui-m&ecirc;me.</p>
<p>Il est possible (depuis Linux 2.1.79) de changer l'id&eacute;e
qu'a le noyau de la g&eacute;om&eacute;trie en utilisant le
syst&egrave;me de fichiers <code>/proc</code>. Par
exemple&nbsp;:</p>
<blockquote>
<pre>
<code># 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 &gt; settings
# sfdisk -g /dev/hdc
/dev/hdc: 17418 cylinders, 128 heads, 32 sectors/track
#
</code>
</pre></blockquote>
Ceci est particuli&egrave;rement utile si vous avez besoin d'un
nombre tel de param&egrave;tres sur la ligne de commande, que LILO
est d&eacute;pass&eacute; (ce qui n'est pas difficile &agrave;
accomplir).
<p>Comment le BIOS conna&icirc;t-il la
g&eacute;om&eacute;trie&nbsp;? L'utilisateur peut l'avoir
donn&eacute;e dans la configuration du CMOS. Peut-&ecirc;tre aussi
que la g&eacute;om&eacute;trie est lue depuis le disque et
convertie comme pr&eacute;cis&eacute; dans la configuration. Dans
le cas de disques SCSI, o&ugrave; il n'y a pas de
g&eacute;om&eacute;trie, celle que le BIOS doit inventer peut
&eacute;galement &ecirc;tre pr&eacute;cis&eacute; via des cavaliers
ou des param&egrave;tres de configuration (par exemple, les
contr&ocirc;leurs Adaptec ont la possibilit&eacute; de choisir
entre les valeur habituelles H=64, S=32 et les 'conversions
&eacute;tendues' H=255, S=63). Parfois, le BIOS lit la table des
partitions pour savoir quelle &eacute;tait la
g&eacute;om&eacute;trie du disque au moment du dernier
partitionnement. --&nbsp;ceci implique l'hypoth&egrave;se qu'une
table des partitions valide est pr&eacute;sente quand il y a une
signature 55aa. Ceci est plut&ocirc;t positif puisque il est alors
possible de d&eacute;placer les disques de machine en machine. Mais
le fait que le comportement du BIOS d&eacute;pende du contenu du
disque peut &eacute;galement &ecirc;tre la source d'&eacute;tranges
probl&egrave;mes. Par exemple, il a &eacute;t&eacute; <a href=
"http://www.heise.de/ct/faq/hotline/98/07/hotline9807_11.shtml">rapport&eacute;</a>
qu'un disque de 2,5&nbsp;Go &eacute;tait reconnu comme ayant une
capacit&eacute; de 528&nbsp;Mo &agrave; cause du BIOS qui lisait la
table des partitions et d&eacute;duisait qu'il pouvait utiliser des
valeurs CHS non converties. Un autre effet de ce comportement peut
&ecirc;tre lu dans ce <a href=
"http://www.heise.de/ct/faq/hotline/98/19/hotline9819_11.shtml">rapport</a>&nbsp;:
des disques non partitionn&eacute;s &eacute;taient plus lents que
des disques partitionn&eacute;s, ceci &agrave; cause du BIOS qui
testait des modes 32&nbsp;bits en lisant le MBR et en voyant qu'il
poss&eacute;dait effectivement une signature 55aa.</p>
<p>Comment le disque conna&icirc;t-il la
g&eacute;om&eacute;trie&nbsp;? En fait, le fabricant invente une
g&eacute;om&eacute;trie qui, &agrave; un facteur pr&egrave;s, donne
la bonne capacit&eacute;. De nombreux disques ont des cavaliers qui
permettent de modifier la g&eacute;om&eacute;trie qu'ils donnent.
Ceci permet d'&eacute;viter les bugs des BIOS. Par exemple, tous
les disques IBM permettent &agrave; l'utilisateur de choisir entre
15 et 16&nbsp;t&ecirc;tes et de nombreux fabricants ajoutent des
cavaliers pour permettre de faire croire que le disque est plus
petit que 2,1&nbsp;Go ou 33,8&nbsp;Go. Vous pouvez &eacute;galement
lire la partie sur les cavaliers <a href="#jumpers">plus bas</a>.
Parfois, certains utilitaires permettent de changer le micro-code
du disque dur.</p>
<h2><a name="ss9.1">9.1 Calcul des param&egrave;tres de
LILO</a></h2>
<p>Parfois il est utile de forcer une certaine
g&eacute;om&eacute;trie en ajoutant
'<code>hda=</code><i>cyls</i><code>,</code><i>t&ecirc;tes</i><code>,</code><i>secs</i>'
&agrave; la ligne de commande du noyau. On voudra pratiquement
toujours <i>secs</i>=63 et le but recherch&eacute; en ajoutant cela
est de sp&eacute;cifier <i>t&ecirc;tes</i>. (Des valeurs
raisonnables de nos jours sont <i>t&ecirc;tes</i>=16 et
<i>t&ecirc;tes</i>=255.) Que devra-t-on mettre pour
<i>cyls</i>&nbsp;? Pr&eacute;cis&eacute;ment le nombre qui donnera
la bonne capacit&eacute; totale de C*H*S secteurs. Par exemple,
pour un disque dur avec 71346240 secteurs (36529274880 octets) on
calculera C comme &eacute;tant 71346240/(255*63)=4441 (par exemple
en utilisant le programme <code>bc</code>) et on donnera le
param&egrave;tre de d&eacute;marrage <code>hdc=4441,255,63</code>.
Comment conna&icirc;t-on la capacit&eacute; totale exacte&nbsp;?
Par exemple,</p>
<blockquote>
<pre>
<code># 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
</code>
</pre></blockquote>
donne deux mani&egrave;res de trouver le nombre total de secteurs
71346240. Les noyaux r&eacute;cent donnent &eacute;galement la
taille pr&eacute;cise dans les messages de d&eacute;mararge&nbsp;:
<blockquote>
<pre>
<code># dmesg | grep hde
hde: Maxtor 93652U8, ATA DISK drive
hde: 71346240 sectors (36529 MB) w/2048KiB Cache, CHS=70780/16/63
 hde: hde1 hde2 hde3 &lt; hde5 &gt; hde4
 hde2: &lt;bsd: hde6 hde7 hde8 hde9 &gt;
</code>
</pre></blockquote>
Les noyaux plus anciens donnent simplement les Mo et CHS. En
g&eacute;n&eacute;ral la valeur CHS et arrondie &agrave; l'entier
inf&eacute;rieur, ce qui, pour la sortie ci-dessus, nous donnerait
au moins 70780&times;16&times;63=71346240 secteurs. Dans cet
exemple, il se trouve que ce sont les valeurs pr&eacute;cises. La
valeur en Mo peut &ecirc;tre arrondie au lieu d'&ecirc;tre
tronqu&eacute;e et peut, dans les vieux noyaux, &ecirc;tre en
unit&eacute;s 'binaire' (Mio) plut&ocirc;t que d&eacute;cimale.
Remarquez la correspondance entre la taille en Mo donn&eacute;e par
le noyau et le num&eacute;ro de mod&egrave;le du Maxtor.
&Eacute;galement, dans le cas des disques SCSI, le nombre
pr&eacute;cis de secteurs est donn&eacute; dans les message de
d&eacute;marrage du noyau&nbsp;:
<blockquote>
<pre>
<code>SCSI device sda: 17755792 512-byte hdwr sectors (9091 MB)
</code>
</pre></blockquote>
<h2><a name="s10">10. D&eacute;tails</a></h2>
<h2><a name="ss10.1">10.1 D&eacute;tails de l'IDE - les sept
g&eacute;om&eacute;tries</a></h2>
<p><!--
disk!IDE geometry setting
-->
 Le gestionnaire IDE a cinq sources d'information concernant la
g&eacute;om&eacute;trie. La premi&egrave;re (G_user) est celle
donn&eacute;e par l'utilisateur sur la ligne de commande. La
deuxi&egrave;me (G_bios) est la 'BIOS Fixed Disk Parameter Table'
--&nbsp;table des param&egrave;tres de disque fixe du BIOS&nbsp;--
(pour le premier et second disque dur seulement) qui est lue au
d&eacute;marrage du syst&egrave;me, avant le passage au mode 32
bits. Les troisi&egrave;me (G_phys) et quatri&egrave;me (G_log)
sont donn&eacute;es par le contr&ocirc;leur IDE en r&eacute;ponse
&agrave; la commande <a href="#identify">IDENTIFY</a> --&nbsp;ce
sont les g&eacute;om&eacute;tries 'physique' et 'logique du
moment'.</p>
<p>D'un autre c&ocirc;t&eacute;, le gestionnaire a besoin de deux
valeurs pour la g&eacute;om&eacute;trie&nbsp;: d'abord G_fdisk,
donn&eacute;e par un ioctl <code>HDIO_GETGEO</code> et ensuite
G_used, qui est effectivement utilis&eacute;e pour les
&Eacute;ntr&eacute;es/Sorties. G_fdisk et G_used sont toutes deux
initialis&eacute;es avec la valeur de G_user si elle est fournie,
avec G_bios quand le CMOS dit que cette valeur est pr&eacute;sente
et avec G_phys autrement. Si G_log semble vraisemblable, alors
G_used est positionn&eacute;e &agrave; cette valeur. Sinon, si
G_used n'est pas vraisemblable et que G_phys semble l'&ecirc;tre,
alors G_used prend la valeur de G_phys. Ici, 'vraisemblable'
signifie que le nombre de t&ecirc;tes est compris dans l'intervalle
1-16.</p>
<p>En d'autres termes&nbsp;: la ligne de commande prend le pas sur
le BIOS et va d&eacute;terminer ce que va voir <code>fdisk</code>,
mais si elle donne une g&eacute;om&eacute;trie convertie (avec plus
de 16 t&ecirc;tes), alors pour les &Eacute;ntr&eacute;es/Sorties
qu'effectuera le noyau elle sera elle-m&ecirc;me remplac&eacute;e
par les valeurs que fournira la commande IDENTIFY.</p>
<p>Remarquez que G_bios est assez peu fiable&nbsp;: pour des
syst&egrave;mes qui d&eacute;marrent depuis un
p&eacute;riph&eacute;rique SCSI, les premier et second disques durs
peuvent tr&egrave;s bien &ecirc;tre SCSI&nbsp;; et la
g&eacute;om&eacute;trie que le BIOS aura donn&eacute; pour sda sera
utilis&eacute;e par le noyau pour hda. Du reste, les disques durs
qui ne sont pas d&eacute;clar&eacute;s dans la configuration du
BIOS ne sont pas vus par ce dernier. Cela signifie que, par
exemple, dans un syst&egrave;me uniquement IDE o&ugrave; hdb n'est
pas d&eacute;clar&eacute; dans la configuration, les
g&eacute;om&eacute;tries rapport&eacute;es par le BIOS pour les
premier et second disques vont &ecirc;tre appliqu&eacute;es
&agrave; hda et hdc.</p>
<h3><a name="identify"></a> Commande IDENTIFY&nbsp;DRIVE</h3>
<p>Quand on envoie la commande IDENTIF&nbsp;DRIVE (0xec) &agrave;
un disque dur IDE, il retournera 256&nbsp;mots d'information
contenant de nombreux d&eacute;tails techniques. Concentrons nous
uniquement sur ce qui joue une r&ocirc;le pour la
g&eacute;om&eacute;trie. Les mots sont num&eacute;rot&eacute;s de 0
&agrave;&nbsp;255.</p>
<p>Nous trouvons ici trois informations&nbsp;: DefaultCHS (mots
1,3,6), CurrentCHS (mots 54-58) et LBAcapacity (mots 60-61).</p>
<p><br></p>
<center>
<table border>
<tr>
<td></td>
<td>Description</td>
<td>Exemple</td>
</tr>
<tr>
<td></td>
</tr>
<tr>
<td>0</td>
<td>Champ de bits&nbsp;: bit 6&nbsp;: disque fixe, bit 7&nbsp;:
media amovible</td>
<td>0x0040</td>
</tr>
<tr>
<td></td>
</tr>
<tr>
<td>1</td>
<td>Nombre par d&eacute;faut de cylindres</td>
<td>16383</td>
</tr>
<tr>
<td>3</td>
<td>Nombre par d&eacute;faut de t&ecirc;tes</td>
<td>16</td>
</tr>
<tr>
<td>6</td>
<td>Nombre par d&eacute;fautl de secteurs par piste</td>
<td>63</td>
</tr>
<tr>
<td></td>
</tr>
<tr>
<td>10-19</td>
<td>Num&eacute;ro de s&eacute;rie (en ASCII)</td>
<td>K8033FEC</td>
</tr>
<tr>
<td>23-26</td>
<td>R&eacute;vision du micro-code (en ASCII)</td>
<td>DA620CQ0</td>
</tr>
<tr>
<td>27-46</td>
<td>Nom du mod&egrave;le (en ASCII)</td>
<td>Maxtor 54098U8</td>
</tr>
<tr>
<td></td>
</tr>
<tr>
<td>49</td>
<td>Champ de bits&nbsp;: bit 9&nbsp;: supporte le LBA</td>
<td>0x2f00</td>
</tr>
<tr>
<td></td>
</tr>
<tr>
<td>53</td>
<td>Champ de bits&nbsp;: bit 0&nbsp;: les mots 54-58 sont
valides</td>
<td>0x0007</td>
</tr>
<tr>
<td>54</td>
<td>Nombre actuel de cylindres</td>
<td>16383</td>
</tr>
<tr>
<td>55</td>
<td>Nombre actuel t&ecirc;tes</td>
<td>16</td>
</tr>
<tr>
<td>56</td>
<td>Nombre actuel de secteurs par piste</td>
<td>63</td>
</tr>
<tr>
<td>57-58</td>
<td>Nombre total actuel de secteurs</td>
<td>16514064</td>
</tr>
<tr>
<td></td>
</tr>
<tr>
<td>60-61</td>
<td>Nombre par d&eacute;faut de secteurs</td>
<td>80041248</td>
</tr>
<tr>
<td></td>
</tr>
<tr>
<td>255</td>
<td><em>Checksum</em> et signature (0xa5)</td>
<td>0xf9a5</td>
</tr>
<tr>
<td></td>
</tr>
<tr>
<td></td>
</tr>
</table>
</center>
<br>
<p>Les cha&icirc;nes ASCII sont compos&eacute;es de mots contenant
chacun deux caract&egrave;res, le premier &eacute;tant l'octet de
poids fort et le second l'octet de poids faible. Les valeurs
32-bits sont donn&eacute;es avec le mot de poids faible d'abord.
Les mots 54-58 sont positionn&eacute;s &agrave; l'aide de la
commande INITIALIZE&nbsp;DRIVE&nbsp;PARAMETERS (0x91). Ils n'ont un
sens que quand CHS est utilis&eacute;, mais peuvent aider &agrave;
trouver la taille r&eacute;elle du disque dans le cas o&ugrave;
celui-ci donne les valeurs 4092/16/63 &agrave; DefaultCHS (dans le
but d'&eacute;viter les probl&egrave;mes de BIOS).</p>
<p>Parfois, quand un cavalier force un disque &agrave; donner une
fausse valeur pour LBAcapacity (le plus souvent une valeur de
66055248&nbsp;secteurs pour pouvoir rester en dessous de la valeur
limite de 33,8&nbsp;Go), il faut disposer d'une quatri&egrave;me
information pour trouver la taille r&eacute;elle du disque&nbsp;:
le r&eacute;sultat de la commande
READ&nbsp;NATIVE&nbsp;MAX&nbsp;ADDRESS (0xf8).</p>
<h2><a name="ss10.2">10.2 D&eacute;tails pour le SCSI</a></h2>
<p><!--
disk!SCSI geometry setting
-->
 La situation pour le SCSI est l&eacute;g&egrave;rement
diff&eacute;rente, puisque les commandes SCSI utilisent
d&eacute;j&agrave; les num&eacute;ros de blocks logiques, donc une
'g&eacute;om&eacute;trie' est compl&egrave;tement hors de propos
pour les v&eacute;ritables &Eacute;ntr&eacute;es/Sorties.
Cependant, le format de la table des partitions est toujours le
m&ecirc;me, donc <code>fdisk</code> ne fait pas la
diff&eacute;rence entre des disques IDE et SCSI. Comme on peut le
voir &agrave; partir de la description d&eacute;taill&eacute;e
ci-dessus, chaque gestionnaire de disques s'invente une
g&eacute;om&eacute;trie diff&eacute;rente. Un gros foutoir en
fait.</p>
<p>Si vous n'utilisez pas DOS ou un &eacute;quivalent, alors
&eacute;vitez toute configuration qui met en jeu des conversions
&eacute;tendues et utilisez simplement 64 t&ecirc;tes, 32 secteurs
par piste (cela a pour effet de donner une valeur tout &agrave;
fait sympathique et commode de 1&nbsp;Mio par cylindre), si
possible, comme &ccedil;a il n'y aura pas de probl&egrave;me quand
vous d&eacute;placerez le disque dur d'un contr&ocirc;leur &agrave;
un autre. Certains gestionnaires de disque SCSI (aha152x, pas16,
ppa, qlogicfas, qlogicisp) sont si sensibles au sujet de la
compatibilit&eacute; avec le DOS qu'ils ne permettront pas &agrave;
un syst&egrave;me uniquement Linux d'utiliser plus de 8&nbsp;Gio.
C'est un bug.</p>
<p>Quelle est la vraie g&eacute;om&eacute;trie&nbsp;? La
r&eacute;ponse la plus facile est qu'elle n'existe pas. Et si elle
existait, vous ne voudriez pas la conna&icirc;tre et &agrave; coup
s&ucirc;r JAMAIS, AU GRAND JAMAIS ne devrez en dire quoi que ce
soit &agrave; <code>fdisk</code> ou &agrave; LILO ou au noyau.
C'est uniquement une histoire entre le contr&ocirc;leur SCSI et le
disque dur. Laissez-moi le redire&nbsp;: seules les personnes
stupides donnent &agrave; <code>fdisk</code>, &agrave; LILO ou au
noyau la v&eacute;ritable g&eacute;om&eacute;trie d'un disque
SCSI.</p>
<p>Mais si vous &ecirc;tes curieux et que vous insistez, vous devez
demander au disque dur lui-m&ecirc;me. Il y a l'importante commande
READ CAPACITY qui donnera la capacit&eacute; compl&egrave;te du
disque dur et il y a la commande MODE SENSE, qui, dans la Rigid
Disk Drive Geometry Page (page 04) donne le nombre de cylindres et
de t&ecirc;tes (c'est une donn&eacute;e qui ne peut pas &ecirc;tre
chang&eacute;e) et dans la Format Page (page 03) donne le nombre
d'octets par secteur et de secteurs par piste. Ce dernier nombre
est typiquement d&eacute;pendant du rang et le nombre de secteurs
par piste varie --&nbsp;les pistes ext&eacute;rieures ont plus de
secteurs que les pistes int&eacute;rieures. Le programme Linux
<code>scsiinfo</code> donnera cette information. Il y a de nombreux
d&eacute;tails et complications et il est clair que personne
(probablement m&ecirc;me pas le syst&egrave;me d'exploitation) ne
d&eacute;sire utiliser cette information. Du reste, tant que nous
ne nous int&eacute;ressons qu'&agrave; <code>fdisk</code> et
&agrave; LILO, on a typiquement des r&eacute;ponses du style
C/H/S=4476/27/171 --&nbsp;valeurs qui ne peuvent pas &ecirc;tre
utilis&eacute;es par <code>fdisk</code> parce que la table des
partitions ne r&eacute;serve que 10,8 et 6 bits pour respectivement
C/H/S.</p>
<p>Mais alors, d'o&ugrave; le <code>HDIO_GETGEO</code> du noyau
tire-t-il ses informations&nbsp;? Eh bien, soit du contr&ocirc;leur
SCSI, soit en faisant une supposition &eacute;clair&eacute;e.
Certains gestionnaires de disque semblent croire que nous voulons
conna&icirc;tre la 'r&eacute;alit&eacute;', mais bien s&ucirc;r
nous ne voulons savoir que ce que FDISK de DOS ou de OS/2 (ou
AFDISK de Adaptec, etc.) utiliseront.</p>
<p>Remarquez que le <code>fdisk</code> de linux a besoin des
nombres H et S de t&ecirc;tes et de secteurs par piste pour
convertir les nombres de secteurs LBA en adresses c/h/s, mais le
nombre de cylindres C ne joue aucun r&ocirc;le. Quelques
gestionnaires de disque utilisent (C,H,S)=(1023,255,63) pour
signaler que la capacit&eacute; du disque dur est d'au moins
1023&times;255&times;63 secteurs. Ce n'est pas de chance,
puisqu'ils ne r&eacute;v&egrave;lent pas la vraie taille et
limiteront les utilisateurs de la plupart des versions de
<code>fdisk</code> &agrave; n'avoir acc&egrave;s qu'&agrave;
environ 8&nbsp;Gio de leur disque --&nbsp;une s&eacute;rieuse
limitation de nos jours.</p>
<p>Dans le texte ci-dessous, M repr&eacute;sente la capacit&eacute;
totale du disque dur et C, H, S, le nombres de cylindres, de
t&ecirc;tes et de secteurs par piste. Il suffit de donner H, S si
l'on voit C comme &eacute;tant d&eacute;fini par M/(H&times;S).</p>
<p>Par d&eacute;faut, H=64 et S=32.</p>
<dl>
<dt><b>aha1740, dtc, g_NCR5380, t128, wd7000&nbsp;:</b></dt>
<dd>
<p>H=64, S=32.</p>
</dd>
<dt><b>aha152x, pas16, ppa, qlogicfas, qlogicisp&nbsp;:</b></dt>
<dd>
<p>H=64, S=32 &agrave; moins que C ne soit sup&eacute;rieur
&agrave; 1024, auquel cas H=255, S=63, C=min(1023, M/(H&times;S)).
(Ainsi C est tronqu&eacute; et H&times;S&times;C n'est pas une
approximation de la capacit&eacute; M du disque dur. Cela va
d&eacute;router la plupart des versions de <code>fdisk</code>.) Le
code de <code>ppa.c</code> utilise M+1 &agrave; la place de M et
dit qu'&agrave; cause d'un bug dans <code>sd.c</code>, M est plus
petit de 1.</p>
</dd>
<dt><b>advansys&nbsp;:</b></dt>
<dd>
<p>H=64 et S=32 &agrave; moins que C ne soit sup&eacute;rieur
&agrave; 1024 ou que, encore mieux, l'option du BIOS '&gt; 1 GB'
ait &eacute;t&eacute; activ&eacute;e, auquel cas H=255 et S=63.</p>
</dd>
<dt><b>aha1542&nbsp;:</b></dt>
<dd>
<p>Demande au contr&ocirc;leur lequel des deux sch&eacute;mas de
conversion est utilis&eacute; et se sert soit de H=255, S=63, soit
de H=64, S=32. Dans le dernier cas, il y a un message au
d&eacute;marrage qui dit "aha1542.c: Using extended bios
translation" ("aha1542.c: Utilisation du mode de conversion
&eacute;tendu du bios")</p>
</dd>
<dt><b>aic7xxx&nbsp;:</b></dt>
<dd>
<p>H=64 et S=32 &agrave; moins que C ne soit sup&eacute;rieur
&agrave; 1024 ou que, mieux encore, le param&egrave;tre de
d&eacute;marrage "extended" ait &eacute;t&eacute; pass&eacute;, ou
que le bit 'extended' ait &eacute;t&eacute; positionn&eacute; dans
la SEEPROM ou dans le BIOS, auquel cas H=255, S=63. Dans
Linux&nbsp;2.0.36 ce mode de conversion &eacute;tendu devrait
toujours &ecirc;tre automatiquement utilis&eacute; si il n'y a pas
de SEEPROM, mais dans Linux&nbsp;2.2.6, si le m&ecirc;me cas se
pr&eacute;sente, le mode de conversion &eacute;tendu est
utilis&eacute; seulement si l'utilisateur le demande au travers du
param&egrave;tre de d&eacute;marrage (de ce fait, quand une SEEPROM
est trouv&eacute;e, le param&egrave;tre de d&eacute;marrage est
ignor&eacute;). Cela signifie qu'une configuration qui fonctionne
en 2.0.36 peut ne pas d&eacute;marrer avec un noyau&nbsp;2.2.6
(LILO n&eacute;cessite alors le mot-cl&eacute; <code>linear</code>,
ou le noyau a besoin du param&egrave;tre
<code>aic7xxx=extended</code> au d&eacute;marrage).</p>
</dd>
<dt><b>buslogic&nbsp;:</b></dt>
<dd>
<p>H=64 et S=32 &agrave; moins que C ne soit sup&eacute;rieur
&agrave; 1024, ou que, encore mieux, le mode de conversion
&eacute;tendu ait &eacute;t&eacute; autoris&eacute; au niveau du
contr&ocirc;leur, auquel cas si M&lt;2^22 alors H=128, S=32&nbsp;;
sinon H=255, S=63. Cependant, apr&egrave;s avoir fait ce choix pour
(C,H,S), la table des partitions est lue et si pour l'une des trois
possibilit&eacute;s (H,S)=(64,32),(128,32),(255,63) la valeur
endH=H-1 est vue quelque part, alors cette paire est
utilis&eacute;e et le message "Adopting Geometry from Partition
Table" ("Adoption de la g&eacute;om&eacute;trie lue dans la table
des partitions") est affich&eacute; au d&eacute;marrage.</p>
</dd>
<dt><b>fdomain&nbsp;:</b></dt>
<dd>
<p>Il trouve l'information sur la g&eacute;om&eacute;trie dans la
Table des Param&egrave;tres des Disques du BIOS (BIOS Drive
Parameter Table), ou lit la table des partitions et utilise
H=endH+1, S=endS pour la premi&egrave;re partition, &agrave;
condition qu'elle ne soit pas vide, ou utilise H=64, S=32 pour
M&lt;2^21&nbsp;(1&nbsp;Gio), H=128, S=63 pout M&lt;63&times;2^17
(3.9 Gio) et H=255, S=63 dans les autres cas.</p>
</dd>
<dt><b>in2000&nbsp;:</b></dt>
<dd>
<p>Il utilise le premier couple
(H,S)=(64,32),(64,63),(128,63),(255,63) qui rendra C&lt;1024. Dans
le dernier cas, C est ramen&eacute; &agrave; la valeur 1023.</p>
</dd>
<dt><b>seagate&nbsp;:</b></dt>
<dd>
<p>Il lit C,H,S depuis le disque dur. (Horreur&nbsp;!) Si C ou S
sont trop grands, alors il fixe S=17, H=2 et double la valeur de H
tant que C&lt;=1024. Cela signifie que H sera mis &agrave; 0 si
M&gt;128&times;1024&times;17 (1.1&nbsp;Gio). C'est un bug.</p>
</dd>
<dt><b>ultrastor et u14_34f&nbsp;:</b></dt>
<dd>
<p>Un de ces trois couples de r&eacute;f&eacute;rence est
utilis&eacute; ((H,S)=(16,63),(64,32),(64,63)) en fonction du mode
de cartographie du contr&ocirc;leur.</p>
</dd>
</dl>
Si le gestionnaire ne pr&eacute;cise pas la
g&eacute;om&eacute;trie, nous retombons dans un mode de supposition
guid&eacute; par la table des partitions, ou par la capacit&eacute;
totale du disque dur.
<p>Regardez la table des partitions. Puisque par convention les
partitions se terminent &agrave; la limite d'un cylindre, nous
pouvons, &eacute;tant donn&eacute; que
<code>end=(endC,endH,endS)</code> pour n'importe quelle partition,
simplement fixer H=<code>endH+1</code> et S=<code>endS</code>. (Il
est rappel&eacute; que le d&eacute;compte des secteurs commence
&agrave; 1.) Plus pr&eacute;cis&eacute;ment, voil&agrave; ce qui
est fait&nbsp;: s'il existe une partition non vide, prendre la
partition avec le plus grand <code>begin</code>. Pour cette
partition, regarder <code>endH+1</code>, calcul&eacute; &agrave; la
fois en additionnant <code>start</code> et <code>length</code> et
en supposant le fait que cette partition se termine &agrave; la
limite d'un cylindre. Si les deux valeurs concordent, ou si
<code>endC</code>=1023 et <code>start+length</code> est un multiple
entier de <code>(endH+1)xendS</code>, alors accepter le fait que
cette partition se termine effectivement sur la fronti&egrave;re
d'un cylindre et fixer H=<code>endH+1</code> et
S=<code>endS</code>. Si cela &eacute;choue, soit parce qu'il n'y a
pas de partition, soit parce qu'elles ont des tailles bizarres, il
faut uniquement se fier &agrave; la capacit&eacute; totale M du
disque dur. Algorithme&nbsp;: fixer
H=M<code>/</code>(62&times;1024) (arrondi au chiffre
sup&eacute;rieur), S=M<code>/</code>(1024&times;H) (arrondi au
chiffre sup&eacute;rieur), C=M<code>/</code>(H&times;S) (arrondi au
chiffre inf&eacute;rieur). Cela a pour effet de
g&eacute;n&eacute;rer un triplet (C,H,S) avec C &eacute;gal
&agrave; 1024 au plus et S &eacute;gal &agrave; 62 au plus.</p>
<h2><a name="s11">11. Limite de Linux pour l'IDE &agrave; 8
Gio</a></h2>
<p>Le gestionnaire IDE de Linux obtient la g&eacute;om&eacute;trie
et la capacit&eacute; d'un disque (et beaucoup d'autres choses) en
utilisant une requ&ecirc;te <a href=
"#identify">ATA&nbsp;IDENTIFY</a>. R&eacute;cemment encore le
gestionnaire ne croyait pas en la valeur retourn&eacute;e pour
lba_capacity si elle &eacute;tait plus de 10% sup&eacute;rieure
&agrave; la capacit&eacute; calcul&eacute;e par C&times;H&times;S.
Cependant, par suite d'un accord entre les industriels, les disques
IDE de grande capacit&eacute; donnent les valeurs C=16383, H=16 et
S=63, pour un total de 16514064&nbsp;secteurs (7.8&nbsp;Go)
ind&eacute;pendamment de leur taille r&eacute;elle, mais donnent
cette taille r&eacute;elle dans lba_capacity.</p>
<p>Les noyaux r&eacute;cents de Linux (2.0.34, 2.1.90) savent cela
et agissent en cons&eacute;quence. Si vous avez un noyau Linux plus
ancien et que vous ne voulez pas passer &agrave; une version plus
r&eacute;cente et que cedit noyau ne voit que 8&nbsp;Gio d'un bien
plus gros disque dur, alors essayez de remplacer la routine
<code>lba_capacity_is_ok</code> dans
<code>/usr/src/linux/drivers/block/ide.c</code> par quelque chose
du genre</p>
<blockquote>
<pre>
<code>static int lba_capacity_is_ok (struct hd_driveid *id) {
        id-&gt;cyls = id-&gt;lba_capacity / (id-&gt;heads * id-&gt;sectors);
        return 1;
}
</code>
</pre></blockquote>
Pour une modification plus s&ucirc;re, voyez le noyau 2.1.90.
<h2><a name="ss11.1">11.1 Complications du BIOS</a></h2>
<p>Comme nous venons de le dire, les gros disques durs donnent la
g&eacute;om&eacute;trie C=16383, H=16, S=63 ind&eacute;pendamment
de leur vraie taille, alors que cette derni&egrave;re est visible
par la valeur de LBAcapacity. Certains BIOS ne savent pas cela et
convertissent ce 16383/16/63 en quelque chose qui a moins de
cylindres et plus de t&ecirc;tes, par exemple 1024/255/63 ou
1027/255/63. Donc, le noyau ne doit pas seulement reconna&icirc;tre
la g&eacute;om&eacute;trie particuli&egrave;re 16383/16/63, mais
&eacute;galement toutes ses versions mutil&eacute;es par le BIOS.
Depuis le noyau&nbsp;2.2.2 cela est fait correctement (en prenant
la vision du BIOS de H et S et en calculant
<code>C=capacit&eacute;/(H*S)</code>). En g&eacute;n&eacute;ral, ce
probl&egrave;me est r&eacute;solu en mettant le disque en mode
Normal dans la configuration du BIOS (ou, encore mieux, &agrave;
None, ne le d&eacute;clarant pas du tout au BIOS). Si cela est
impossible parce que vous devez d&eacute;marrer &agrave; partir de
ce disque dur, ou l'utiliser avec DOS/Windows et que vous
n'envisagez pas un passage au noyau 2.2.2 ou mieux, utilisez les
param&egrave;tres de d&eacute;marrage du noyau.</p>
<p>Si un BIOS rapporte 16320/16/63, c'est en g&eacute;n&eacute;ral
pour pouvoir aboutir &agrave; 1024/255/63 apr&egrave;s
conversion.</p>
<p>Il y a ici, un autre probl&egrave;me. Si le disque dur a
&eacute;t&eacute; partitionn&eacute; en utilisant une conversion de
g&eacute;om&eacute;trie, alors le noyau peut, au moment du
d&eacute;marrage, voir cette g&eacute;om&eacute;trie qui est
utilis&eacute;e dans la table des partitions et rapporter
<code>hda:&nbsp;[PTBL]&nbsp;[1027/255/63]</code>. Ce n'est pas bon
parce que maintenant le disque dur n'est que de 8,4&nbsp;Go. Cela a
&eacute;t&eacute; corrig&eacute; dans le noyau&nbsp;2.3.21. Encore
un fois, les param&egrave;tres de d&eacute;marrage du noyau seront
utiles.</p>
<h2><a name="jumpers"></a> <a name="ss11.2">11.2 Des cavaliers pour
s&eacute;lectionner le nombre de t&ecirc;tes</a></h2>
<p>Beaucoup de disques durs ont des cavaliers qui vous permettent
de choisir entre des g&eacute;om&eacute;tries &agrave; 15 ou
&agrave; 16&nbsp;t&ecirc;tes. Le r&eacute;glage par d&eacute;faut
vous donnera une g&eacute;om&eacute;trie &agrave;
16&nbsp;t&ecirc;tes. Parfois, les deux g&eacute;om&eacute;tries
adressent le m&ecirc;me nombre de secteurs, parfois la version
&agrave; 15&nbsp;t&ecirc;tes est plus petite. Vous devez avoir une
bonne raison pour changer cette valeur&nbsp;: Petri Kaukasoina a
&eacute;crit&nbsp;: <i>"Un disque dur IBM Deskstar 16 GP de
10.1&nbsp;Go (mod&egrave;le IBM-DTTA-351010) avait ses cavaliers
positionn&eacute;s pour pr&eacute;senter 16 t&ecirc;tes par
d&eacute;faut mais ce vieux PC (avec un AMI BIOS) ne
d&eacute;marrait pas et j'ai eu &agrave; modifier les cavaliers
pour le faire passer en 15 t&ecirc;tes. hdparm -i donne
RawCHS=16383/15/63 et LBAsects=19807200. J'utilise 20960/15/63 pour
avoir la capacit&eacute; totale."</i> La g&eacute;om&eacute;trie
16383/15/63 n'est pas encore reconnue par le noyau, donc il est
n&eacute;cessaire de donner explicitement ces param&egrave;tres au
d&eacute;marrage. La g&eacute;om&eacute;trie 16383/15/63 n'est pas
encore reconnue par le noyau, donc des param&egrave;tres de
d&eacute;marrage explicites sont ici n&eacute;cessaires. Pour le
positionnement des cavaliers voyez <a href=
"http://www.storage.ibm.com/techsup/hddtech/hddtech.htm">http://www.storage.ibm.com/techsup/hddtech/hddtech.htm</a>.</p>
<h2><a name="ss11.3">11.3 Des cavaliers pour limiter la
capacit&eacute; totale</a></h2>
<p>De nombreux disques durs ont des cavaliers qui vous permettent
de faire appara&icirc;tre leur taille inf&eacute;rieure &agrave;
leur valeur r&eacute;elle. C'est une b&ecirc;tise que de le faire
et probablement aucun utilisateur de Linux ne voudra utiliser cette
fonctionnalit&eacute;, mais certains BIOS plantent avec de gros
disques. En g&eacute;n&eacute;ral la solution consiste &agrave;
conserver le disque enti&egrave;rement en dehors du contr&ocirc;le
du BIOS. Cela n'est faisable que si ce disque dur n'est pas votre
disque de d&eacute;marrage.</p>
<h3>Limitation &agrave; 2,1&nbsp;Go</h3>
<p>La premi&egrave;re limite s&eacute;rieuse fut celle des 4096
cylindres (soit, avec 16 t&ecirc;tes et 63 secteurs par piste,
2,11&nbsp;Go). Par exemple un disque dur Fujitsu MPB3032ATU de
3,24&nbsp;Go a une g&eacute;om&eacute;trie par d&eacute;faut de
6704/15/63, mais ses cavaliers peuvent &ecirc;tre
positionn&eacute;s pour qu'elle apparaisse comme &eacute;tant
4092/16/63. Le disque rapportera une capacit&eacute; LBA de
4124736&nbsp;secteurs et de ce fait le syst&egrave;me
d'exploitation ne pourra pas deviner qu'il est en
r&eacute;alit&eacute; plus grand. Dans un tel cas (avec un BIOS qui
plante s'il sait que le disque dur est en r&eacute;alit&eacute; si
grand et donc avec lequel les cavaliers sont n&eacute;cessaires) on
aura besoin de param&egrave;tres de d&eacute;marrage pour donner
&agrave; Linux la taille du disque.</p>
<p>C'est pas de chance. La plupart des disques durs ont des
cavaliers qui peuvent &ecirc;tre positionn&eacute;s pour qu'ils
apparaissent comme &eacute;tant des 2&nbsp;Go et pour qu'ils
rapportent une g&eacute;om&eacute;trie tronqu&eacute;e comme
4092/16/63 ou 4096/16/63, mais qui leur permettent toujours de
rapporter une capacit&eacute; LBA compl&egrave;te. De tels disques
durs fonctionneront bien et utiliseront l'int&eacute;gralit&eacute;
de leur capacit&eacute; sous Linux, que les cavaliers aient
&eacute;t&eacute; positionn&eacute;s ou pas.</p>
<h3><a name="jumperbig"></a> Limitation &agrave; 33&nbsp;Go</h3>
<p>Une limite plus r&eacute;cente est celle des <a href=
"#verylarge">33,8&nbsp;Go</a>. Les noyaux Linux plus anciens que le
2.2.14/2.3.21 n&eacute;cessitent l'application d'un correctif pour
&ecirc;tre capable de s'en sortir avec des disques durs IDE d'une
taille plus importante que celle-l&agrave;.</p>
<p>Avec un vieux BIOS et un disque de plus de 33,8&nbsp;Go, il se
peut que le BIOS se bloque et dans ce cas il devient impossible de
d&eacute;marrer, m&ecirc;me lorsque le disque est retir&eacute; des
options dans le CMOS. Vous pouvez regarder &agrave; cette adresse
<a href=
"http://www.storage.ibm.com/techsup/hddtech/bios338gb.htm">la
limite du BIOS &agrave; 33,8&nbsp;Go</a>.</p>
<p>C'est pourquoi les disques de grande capacit&eacute; de chez
Maxtor ou IBM disposent d'un cavalier qui les font apparaitre comme
ayant une taille de 33,8&nbsp;Go. Par exemple,
l'IBM&nbsp;Deskstar&nbsp;37,5&nbsp;Go (DPTA-353750) avec
73261440&nbsp;secteurs (ce qui correspond &agrave; 72680/16/63, ou
&agrave; 4560/255/63) a un cavalier qui peut &ecirc;tre
positionn&eacute; de telle mani&egrave;re que le disque dur
appara&icirc;t avec une taille de 33,8&nbsp;Go et donc rapporte une
g&eacute;om&eacute;trie de 16383/16/63 comme n'importe quel gros
disque dur, mais avec une capacit&eacute; LBA de 66055248
(correspondant &agrave; 65531/16/63, ou &agrave; 4111/255/63). Ceci
reste valable pour les disques de grande capacit&eacute;
r&eacute;cents de chez Maxtor.</p>
<h3>Maxtor</h3>
<p>Quand le cavalier est positionn&eacute;, la
g&eacute;om&eacute;trie (16383/16/63) et la taille (66055248) sont
toutes deux conventionnelles et ne donnent aucune information sur
la taille r&eacute;elle. De plus, si l'on essaye d'acc&eacute;der
au secteur 66055248 ou plus, on obtient des erreurs
d'entr&eacute;e/sortie. Cependant, sur les disques Maxtor, la
taille r&eacute;elle peut &ecirc;tre trouv&eacute;e et mise
&agrave; disposition, &agrave; l'aide des commandes
READ&nbsp;NATIVE&nbsp;MAX&nbsp;ADDRESS et
SET&nbsp;MAX&nbsp;ADDRESS. Nous pouvons pr&eacute;sumer que c'est
ce que font MaxBlast et EZ-Drive. Il existe &eacute;galement pour
ceci un petit utilitaire Linux ( <a href=
"http://www.win.tue.nl/~aeb/linux/setmax.c">setmax.c</a>) ainsi
qu'un correctif pour le noyau.</p>
<p>Il y a un d&eacute;tail suppl&eacute;mentaire &agrave;
pr&eacute;ciser en ce qui concerne les premiers gros disques de
chez Maxtor&nbsp;: le cavalier J46 pour ces disques de
34-40&nbsp;Go fait passer la g&eacute;om&eacute;trie de 16383/16/63
&agrave; 4092/16/63 et ne modifie pas la valeur donn&eacute;e de
LBAcapacity. Ceci signifie que, m&ecirc;me si le cavalier est
pr&eacute;sent, les BIOS (les vieux Award&nbsp;4.5*) se bloqueront
au d&eacute;marrage. Pour ce cas pr&eacute;cis, Maxtor fournit
l'utilitaire <a href=
"http://www.maxtor.com/technology/technotes/20012.html">JUMPON.EXE</a>
qui met &agrave; jour le micro-code pour que le cavalier J46 se
comporte comme d&eacute;crit ci-dessus.</p>
<p>Sur les disques Maxtor r&eacute;cents, la la commande
<code>setmax -d 0 /dev/hdX</code> vous donnera &eacute;galement
acc&egrave;s &agrave; la capacit&eacute; maximale. Cependant, sur
des disques l&eacute;g&egrave;rement plus anciens, un bug du
micro-code ne vous permet pas d'utiliser <code>-d 0</code>&nbsp;
<code>setmax -d 255 /dev/hdX</code> vous mettra pratiquement la
capacit&eacute; maximale. Pour les Maxtor D540X-4K, voir plus
bas.</p>
<h3>IBM</h3>
<p>Pour IBM les choses sont pires&nbsp;: le cavalier limite
effectivement la capacit&eacute; et il n'existe pas de solution
logicielle pour retrouver la vraie taille. La solution alors, n'est
pas d'utiliser la cavalier mais de limiter par voie logicielle la
capacit&eacute; du disque avec la commande <code>setmax -m 66055248
/dev/hdX</code>. <em>"Comment&nbsp;?"</em> me direz-vous
--&nbsp;<em>"Je ne peux pas d&eacute;marrer&nbsp;!"</em> IBM vous
donne le truc&nbsp;: <i>Si un syst&egrave;me avec un BIOS Award
bloque pendant la d&eacute;tection des disques, red&eacute;marrez
votre syst&egrave;me et maintenez la touch F4 enfonc&eacute;e pour
court-circuiter l'autod&eacute;tection des disques.</i> Si cela ne
fonctionne pas, trouvez un autre ordinateur, branchez-y le disque
et lancez-y la commande <code>setmax</code>. Une fois que ceci est
fait, vous pouvez retourner sur votre premi&egrave;re machine et
l&agrave;, la situation est identique &agrave; ce qui se passe avec
un Maxtor&nbsp;: vous parvenez &agrave; d&eacute;marrer et une fois
le BIOS pass&eacute; vous pouvez, soit appliquer un correctif au
noyau, soit ex&eacute;cuter la commande <code>setmax -d 0</code>
pour retrouver la capacit&eacute; maximale.</p>
<h3>Maxtor D540X-4K</h3>
<p>Les disques Maxtor Diamond&nbsp;Max 4K080H4, 4K060H3, 4K040H2
(alias D540X-4K) sont identiques aux disques 4D080H4, 4D060H3,
4D040H2 (alias D540X-4D), si ce n'est le configuration des
cavaliers qui change. Une FAQ MAxtor donne les configurations
Ma&icirc;tre/Esclave/CableSelect pour ces disques, mais le cavalier
qui limite la capacit&eacute; des versions "4K" semble ne pas
&ecirc;tre document&eacute;. Nils Ohlmeier pr&eacute;tent avoir
trouv&eacute; de mani&egrave;re exp&eacute;rimentale que c'est le
cavalier J42 (<i>"reserved for factory use"</i>
--&nbsp;"r&eacute;serv&eacute; &agrave; une utilisation en usine"),
&agrave; c&ocirc;t&eacute; du connecteur d'alimentation (les
disques "4D" utilisent le cavalier J46, comme les autres disques
Maxtor).</p>
<p>Cependant, il se peut que ce cavalier non document&eacute; se
comporte comme le cavalier IBM&nbsp;: la machine d&eacute;marre
sans probl&egrave;me mais le disque est limit&eacute; &agrave;
33&nbsp;Go et <code>setmax -d 0</code> ne permet pas de retrouver
la capacit&eacute; maximale. Et la solution IBM fonctionne&nbsp;:
il ne faut pas limiter la capacit&eacute; du disque avec le
cavalier, mais d'abord le brancher &agrave; une machine dont le
BIOS est saint, le limiter par voie logicielle avec <code>setmax -m
66055248 /dev/hdX</code> et le remettre dans la premi&egrave;re
machine. Apr&egrave;s avoir d&eacute;marr&eacute;, la commande
<code>setmax -d 0 /dev/hdX</code> permet de retrouver la
capacit&eacute; maximale.</p>
<h2><a name="s12">12. Limite de Linux &agrave;
65535&nbsp;cylindres</a></h2>
<p>L'ioctl <code>HDIO_GETGEO</code> retourne le nombre de cylindres
dans un <code>short</code>. Cela signifie que si vous avez plus de
65535&nbsp;cylindres, le nombre est tronqu&eacute; et (pour une
configuration SCSI typique avec 1&nbsp;Mio de cylindres) un disque
de 80&nbsp;Gio peut appara&icirc;tre comme ne faisant que
16&nbsp;Gio. Une fois que le probl&egrave;me a &eacute;t&eacute;
d&eacute;tect&eacute;, il est facile de l'&eacute;viter.</p>
<p>La convention de programmation est d'utiliser l'ioctl
<code>BLKGETSIZE</code> pour obtenir la taille totale et
<code>HDIO_GETGEO</code> pour conna&icirc;tre le nombre de
t&ecirc;tes et de secteurs par piste et, si n&eacute;cessaire, il
est possible d'obtenir C avec la formule C=taille/(H&times;S).</p>
<h2><a name="verylarge"></a> <a name="ss12.1">12.1 Probl&egrave;mes
de l'IDE avec des disques durs de 34&nbsp;Go et plus</a></h2>
<p>Ci-dessous se trouve une discussion sur les probl&egrave;mes du
noyau Linux. Les probl&egrave;mes li&eacute;s au BIOS et au
positionnement des cavalier ont-&eacute;t&eacute; trait&eacute;s
<a href="#jumperbig">ci-dessus</a>.</p>
<p>Des unit&eacute;s d'une taille sup&eacute;rieure &agrave;
33,8&nbsp;Go ne fonctionneront pas avec les noyaux
ant&eacute;rieurs au 2.2.14/2.3.21. Les d&eacute;tails sont les
suivants. Supposez que vous ayez achet&eacute; un tout nouveau
disque dur IBM-DPTA-373420 qui offre une capacit&eacute; de
66835440&nbsp;secteurs (34,2&nbsp;Go). Les noyaux plus anciens que
le 2.3.21 vous diront que la taille est de
769*16*63=775152&nbsp;secteurs (0,4&nbsp;Go), ce qui est quelque
peu &eacute;tonnant. Et le fait de donner les param&egrave;tres
hdc=4160,255,63 au d&eacute;marrage n'aide en rien --&nbsp;ils sont
tout simplement ignor&eacute;s. Que se passe-t-il&nbsp;? La routine
idedisk_setup() retrouve la g&eacute;om&eacute;trie
rapport&eacute;e par le disque dur (qui est 16383/16/63) et
&eacute;crase ce que l'utilisateur avait demand&eacute; sur la
ligne de commande, de telle mani&egrave;re que les donn&eacute;es
de l'utilisateur ne sont utilis&eacute;es que pour la
g&eacute;om&eacute;trie du BIOS. La routine current_capacity() ou
idedisk_capacity() recalcule le nombre de cylindres comme
&eacute;tant 66835440/(16*63)=66305 mais comme il est stock&eacute;
dans un short, il devient 769. Comme lba_capacity_is_ok() a
d&eacute;truit id-&gt;cyls, tous les appels se solderont par un
&eacute;chec et la capacit&eacute; du disque deviendra 769*16*63.
Un correctif est disponible pour de nombreux noyaux. Un correctif
pour le 2.0.38 peut &ecirc;tre trouv&eacute; &agrave; <a href=
"ftp://ftp.us.kernel.org/pub/linux/kernel/people/aeb/">ftp.kernel.org</a>.
Un correctif pour le 2.2.12 peut &ecirc;tre trouv&eacute; &agrave;
<a href=
"http://www.uwsg.indiana.edu/hypermail/linux/kernel/9910.2/0636.html">
www.uwsg.indiana.edu</a> (il se peut qu'il faille le modifier un
peu pour se d&eacute;barrasser des tags html). Les noyaux 2.2.14
supportent ces disques durs. Dans la s&eacute;rie 2.3.* des noyaux,
le support pour ces disques existe depuis le 2.3.21. Il est
&eacute;galement possible de r&eacute;soudre ce probl&egrave;me
avec une m&eacute;thode mat&eacute;rielle en <a href=
"#jumperbig">positionnant des cavaliers</a> pour limiter la taille
&agrave; 33,8&nbsp;Go. Dans la plupart des cas, une <a href=
"#biosupgrades">mise &agrave; jour du BIOS</a> sera
n&eacute;cessaire pour pouvoir d&eacute;marrer depuis ce disque
dur.</p>
<h2><a name="s13">13. Partitions &eacute;tendues et partitions
logiques</a></h2>
<p><a href="#partitiontable">Ci-dessus</a>, nous avons vu la
structure du MBR (secteur 0)&nbsp;: code du programme
d'amor&ccedil;age suivi par 4&nbsp;entr&eacute;es de la table des
partitions de 16&nbsp;octets chacune, suivies par une signature
AA55. Les entr&eacute;es de la table des partitions de type 5
ou&nbsp;F ou&nbsp;85 (en hexad&eacute;cimal) ont une signification
particuli&egrave;re&nbsp;: elles d&eacute;crivent les partitions
<i>&eacute;tendues</i>&nbsp;: espaces qui seront
ult&eacute;rieurement fractionn&eacute;s en partitions
<i>logiques</i>. (Donc, une partition &eacute;tendue n'est qu'une
bo&icirc;te et ne peut pas &ecirc;tre utilis&eacute;e par
elle-m&ecirc;me&nbsp;; on utilise alors les partitions logiques
qu'elle contient.) Ce n'est que la position du premier secteur de
la partition &eacute;tendue qui est important. Ce premier secteur
contient une table des partitions avec quatre entr&eacute;es&nbsp;:
une est une partition logique, une est une partition &eacute;tendue
et deux sont inutilis&eacute;es. De cette mani&egrave;re, on
obtient une cha&icirc;ne de secteurs de table des partitions,
dispers&eacute;s sur le disque dur, o&ugrave; le premier
d&eacute;crit trois partitions primaires et la partition
&eacute;tendue et chaque secteur de table des partitions qui suit
d&eacute;crit une partition logique et la position du prochain
secteur de table des partitions.</p>
<p>Il est important de comprendre cela&nbsp;: quand les gens font
des b&ecirc;tises en partitionnant leur disque, ils veulent
savoir&nbsp;: <i>"est-ce que mes donn&eacute;es sont toujours
l&agrave;&nbsp;?"</i> Et la r&eacute;ponse est
g&eacute;n&eacute;ralement&nbsp;: <i>"oui"</i>. Mais si des
partitions logiques ont &eacute;t&eacute; cr&eacute;&eacute;es,
alors les secteurs de table des partitions les d&eacute;crivant
sont &eacute;crits au d&eacute;but des ces partitions logiques et
les donn&eacute;es qui &eacute;taient initialement &agrave; ces
emplacements sont perdues.</p>
<p>Le programme <code>sfdisk</code> montre la cha&icirc;ne
compl&egrave;te. Par exemple,</p>
<blockquote>
<pre>
<code># sfdisk -l -x /dev/hda

Disk /dev/hda: 16 heads, 63 sectors, 33483 cylinders
Units = cylinders of 516096 bytes, blocks of 1024 bytes, counting from 0

   Device Boot Start     End   #cyls   #blocks   Id  System
/dev/hda1          0+    101     102-    51376+  83  Linux
/dev/hda2        102    2133    2032   1024128   83  Linux
/dev/hda3       2134   33482   31349  15799896    5  Extended
/dev/hda4          0       -       0         0    0  Empty

/dev/hda5       2134+   6197    4064-  2048224+  83  Linux
    -           6198   10261    4064   2048256    5  Extended
    -           2134    2133       0         0    0  Empty
    -           2134    2133       0         0    0  Empty

/dev/hda6       6198+  10261    4064-  2048224+  83  Linux
    -          10262   16357    6096   3072384    5  Extended
    -           6198    6197       0         0    0  Empty
    -           6198    6197       0         0    0  Empty
...
/dev/hda10     30581+  33482    2902-  1462576+  83  Linux
    -          30581   30580       0         0    0  Empty
    -          30581   30580       0         0    0  Empty
    -          30581   30580       0         0    0  Empty

#
</code>
</pre></blockquote>
<p>Il est possible de construire une mauvaise table des partitions.
Beaucoup de noyaux entrent dans une boucle s'il y a des partitions
&eacute;tendues qui pointent sur elles-m&ecirc;mes ou sur une
partition plac&eacute;e avant dans la cha&icirc;ne. Il est possible
d'avoir deux partitions &eacute;tendues dans un de ces secteurs de
table des partitions, de sorte que la cha&icirc;ne de la table de
partitions se divise. (Cela peut arriver par exemple avec un
<code>fdisk</code> qui ne reconna&icirc;t pas les partitions
typ&eacute;es 5, F ou 85 comme &eacute;tendues et qui cr&eacute;e
une 5 &agrave; la suite d'une F.) Des programmes de type
<code>fdisk</code> non standards peuvent provoquer de telles
situations et quelques manipulations sont n&eacute;cessaires pour
les r&eacute;parer. Le noyau de Linux acceptera une division au
niveau le plus ext&eacute;rieur. Ainsi, vous pouvez avoir deux
cha&icirc;nes de partitions logiques. C'est parfois utile
--&nbsp;par exemple, on peut utiliser pour l'une le type 5 afin
qu'elle soit vue par DOS, et pour l'autre le type 85, invisible
pour DOS, ainsi DOS FDISK ne plantera pas &agrave; cause d'une
partition logique au-del&agrave; du cylindre 1024. En
g&eacute;n&eacute;ral il faut <code>sfdisk</code> pour cr&eacute;er
une telle configuration.</p>
<h2><a name="s14">14. R&eacute;solution des
probl&egrave;mes</a></h2>
<p>Beaucoup de personnes pensent qu'elles ont des probl&egrave;mes,
alors qu'en r&eacute;alit&eacute; rien ne cloche. Elles peuvent
&eacute;galement penser que leurs probl&egrave;mes sont dus
&agrave; la g&eacute;om&eacute;trie du disque, alors que cela n'a
rien &agrave; voir. Tout ce que nous avons vu ci-dessus peut vous
avoir paru compliqu&eacute;, mais ma&icirc;triser le domaine de la
g&eacute;om&eacute;trie des disques durs est tr&egrave;s
facile&nbsp;: ne faites rien du tout et tout ira bien&nbsp;; ou
peut-&ecirc;tre faudra-t-il donner &agrave; LILO le mot-cl&eacute;
<code>lba32</code> s'il ne d&eacute;passe pas le stade LI au
d&eacute;marrage. Regardez bien les messages de d&eacute;marrage du
noyau et souvenez-vous que plus vous tripoterez les
g&eacute;om&eacute;tries (en sp&eacute;cifiant le nombre de
t&ecirc;tes et de cylindres &agrave; LILO et &agrave;
<code>fdisk</code> et en les passant comme argument au noyau),
moins cela aura de chances de fonctionner. En gros, les valeurs par
d&eacute;faut sont les bonnes.</p>
<p>Et souvenez-vous&nbsp;: la g&eacute;om&eacute;trie des disques
durs n'est utilis&eacute;e nulle part dans Linux, donc les
probl&egrave;mes que vous pouvez avoir en vous servant de Linux ne
sont pas dus &agrave; &ccedil;a. En fait, la
g&eacute;om&eacute;trie des disques durs n'est utilis&eacute;e que
par LILO et par <code>fdisk</code>. Donc, si LILO ne parvient pas
&agrave; charger le noyau, ce peut &ecirc;tre un probl&egrave;me de
g&eacute;om&eacute;trie. Si d'autres syst&egrave;mes d'exploitation
ne comprennent pas la table des partitions, ce peut &ecirc;tre un
probl&egrave;me de g&eacute;om&eacute;trie. Rien d'autre. En
particulier, si mount ne semble pas vouloir fonctionner, ne vous
posez jamais de question sur la g&eacute;om&eacute;trie --&nbsp;le
probl&egrave;me est ailleurs.</p>
<h2><a name="ss14.1">14.1 Probl&egrave;me&nbsp;: La
g&eacute;om&eacute;trie de mon disque dur IDE est fausse quand je
d&eacute;marre depuis du SCSI.</a></h2>
<p>Il est assez possible qu'un disque dur obtienne une mauvaise
g&eacute;om&eacute;trie. Le noyau de Linux questionne le BIOS au
sujet de hd0 et hd1 (les disques du BIOS num&eacute;rot&eacute;s
80H et 81H) et suppose que ces donn&eacute;es sont pour hda et hdb.
Mais, sur un syst&egrave;me qui d&eacute;marre depuis du SCSI, les
deux premiers disques peuvent tr&egrave;s bien &ecirc;tre des
disques durs SCSI et de ce fait il peut arriver que le
cinqui&egrave;me disque, qui est hda, c'est-&agrave;-dire le
premier disque IDE, se voie assigner une g&eacute;om&eacute;trie
appartenant &agrave; sda. Cela est facilement r&eacute;solu en
donnant, au d&eacute;marrage ou dans le fichier /etc/lilo.conf, les
param&egrave;tres pour hda 'hda=C,H,S' avec les valeurs
appropri&eacute;es pour C, H et S.</p>
<h2><a name="ss14.2">14.2 Faux probl&egrave;me&nbsp;: des disques
identiques ont des g&eacute;om&eacute;tries
diff&eacute;rentes&nbsp;?</a></h2>
<p><i>"Je poss&egrave;de deux disques durs IBM identiques de
10&nbsp;Go. Cependant, <code>fdisk</code> donne des tailles
diff&eacute;rentes pour les deux. Voyez&nbsp;:</i></p>
<blockquote>
<pre>
<code># fdisk -l /dev/hdb
Disk /dev/hdb: 255 heads, 63 sectors, 1232 cylinders
Units = cylinders of 16065 * 512 bytes

   Device Boot  Start      End   Blocks   Id  System
/dev/hdb1           1     1232  9896008+  83  Linux native
# fdisk -l /dev/hdd
Disk /dev/hdd: 16 heads, 63 sectors, 19650 cylinders
Units = cylinders of 1008 * 512 bytes

   Device Boot  Start      End   Blocks   Id  System
/dev/hdd1           1    19650  9903568+  83  Linux native
</code>
</pre></blockquote>
<i>Comment cela est-il possible&nbsp;?"</i>
<p>Que se passe-t-il ici&nbsp;? Eh bien, avant tout ces disques
sont r&eacute;ellement de 10&nbsp;Giga&nbsp;: hdb a comme taille
255&times;63&times;1232&times;512=10133544960 et hdd a pour taille
16&times;63&times;19650&times;512=10141286400, donc tout va bien et
le noyau voit les deux comme des 10&nbsp;Go. Pourquoi y a-t-il
cette diff&eacute;rence de taille&nbsp;? C'est parce que le noyau
obtient ses donn&eacute;es du BIOS pour les deux premiers disques
IDE et le BIOS a recartographi&eacute; hdb pour qu'il ait
255&nbsp;t&ecirc;tes (et 16&times;19650/255=1232&nbsp;cylindres).
L'arrondi inf&eacute;rieur co&ucirc;te ici au moins 8&nbsp;Mo.</p>
<p>Si vous voulez recartographier hdd de la m&ecirc;me
mani&egrave;re, donnez au noyau l'option de d&eacute;marrage
'hdd=1232,255,63'.</p>
<h2><a name="ss14.3">14.3 Faux probl&egrave;me&nbsp;:
<code>fdisk</code> voit beaucoup plus d'espace que
df&nbsp;?</a></h2>
<p><code>fdisk</code> vous donnera le nombre de blocs qu'il y a sur
le disque dur. Si vous avez cr&eacute;&eacute; un syst&egrave;me de
fichiers sur le disque, disons avec mke2fs, alors ce syst&egrave;me
de fichiers a besoin d'un peu de place pour sa comptabilit&eacute;
--&nbsp;typiquement quelque chose comme 4% de la taille du
syst&egrave;me de fichier, un peu plus si vous demandez beaucoup
d'inodes &agrave; mke2fs. Par exemple&nbsp;:</p>
<blockquote>
<pre>
<code># sfdisk -s /dev/hda9
4095976
# mke2fs -i 1024 /dev/hda9
mke2fs 1.12, 9-Jul-98 for EXT2 FS 0.5b, 95/08/09
...
204798 blocks (5.00%) reserved for the super user
...
# mount /dev/hda9 /quelque/part
# df /quelque/part
Filesystem         1024-blocks  Used Available Capacity Mounted on
/dev/hda9            3574475      13  3369664      0%   /mnt
# df -i /quelque/part
Filesystem           Inodes   IUsed   IFree  %IUsed Mounted on
/dev/hda9            4096000      11 4095989     0%  /mnt
#
</code>
</pre></blockquote>
Nous avons une partition de 4095976 blocs, cr&eacute;ez sur cette
derni&egrave;re un syst&egrave;me de fichiers ext2, montez-la
quelque part et remarquez qu'elle n'a que 3574475&nbsp;blocs
--&nbsp;521501&nbsp;blocs (12%) ont &eacute;t&eacute; perdus en
inodes et autres pour de la comptabilit&eacute;. Remarquez que la
diff&eacute;rence entre le total de 3574475&nbsp;blocs et les
3369664 disponibles pour l'utilisateur est &eacute;gale aux
13&nbsp;blocs utilis&eacute;s plus les 204798&nbsp;blocs
r&eacute;serv&eacute;s &agrave; root. Cette derni&egrave;re valeur
peut &ecirc;tre chang&eacute;e &agrave; l'aide de tune2fs. Ce '-i
1024' n'est raisonnable que dans le cadre d'un spoule de forums
d'utilisateurs ou quelque chose du m&ecirc;me style, avec
&eacute;norm&eacute;ment de petits fichiers. Par d&eacute;faut on
mettrait&nbsp;:
<blockquote>
<pre>
<code># mke2fs /dev/hda9
# mount /dev/hda9 /quelque/part
# df /quelque/part
Filesystem         1024-blocks  Used Available Capacity Mounted on
/dev/hda9            3958475      13  3753664      0%   /mnt
# df -i /quelque/part
Filesystem           Inodes   IUsed   IFree  %IUsed Mounted on
/dev/hda9            1024000      11 1023989     0%  /mnt
#
</code>
</pre></blockquote>
&Agrave; pr&eacute;sent, seulement 137501&nbsp;blocs (3,3%) sont
utilis&eacute;s pour les inodes, comme cela, nous disposons de
384&nbsp;Mo de plus qu'avant. (Apparemment, chaque inode occupe
128&nbsp;octets.) D'un autre c&ocirc;t&eacute;, ce syst&egrave;me
de fichiers peut avoir au plus 1024000&nbsp;fichiers (plus
qu'assez), contre 4096000 (trop) auparavant.
</body>
</html>