This file is indexed.

/usr/share/doc/HOWTO/fr-html/Large-Disk-HOWTO.html is in doc-linux-fr-html 2013.01-3ubuntu1.

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
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
<html>
<head>
<meta name="generator" content=
"HTML Tidy for HTML5 for Linux version 5.2.0">
<meta name="GENERATOR" content="LinuxDoc-Tools 0.9.72">
<title>HOWTO - Disques de grande capacité</title>
</head>
<body>
<h1>HOWTO - Disques de grande capacité</h1>
<h2>Andries Brouwer, <code>aeb@cwi.nl</code>,<br>
version française par Xavier Serpaggi,
<code>xavier.serpaggi@libertysurf.fr</code></h2>
v2.2z, 2 février 2002
<hr>
<em>Tout sur la géomé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 à jour, mais en anglais, de ce
document reportez-vous à 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. Énoncé du problè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 également que vous ayez un système d'exploitation qui
utilise l'ancienne interface INT13, d'Éntrée/Sortie sur disques.
Dans ce cas, vous avez un problème, parce que cette interface
utilise un champ de 10 bits pour coder les cylindres sur lesquels
sont effectuées les Éntrées/Sorties, de telle manière que les
cylindres 1024 et au-delà sont inaccessibles.</p>
<p>Heureusement, Linux ne se sert pas du BIOS, donc il n'y a pas de
problème.</p>
<p>Sauf peut-être pour deux choses&nbsp;:</p>
<p>(1) Quand vous démarrez votre système, Linux ne fonctionne pas
encore et ne peut donc pas vous préserver des problèmes liés au
BIOS. Cela a certaines conséquences pour LILO et d'autres
programmes d'amorçage du même acabit.</p>
<p>(2) Il est nécessaire que tous les systèmes d'exploitation qui
se partagent un mê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éter la table des partitions de la même manière.
Cela a quelques conséquences pour le noyau de Linux et pour
<code>fdisk</code>.</p>
<p>Vous trouverez ci-dessous une description assez poussée de tous
les détails importants. Prenez en compte le fait que j'utilise
comme référence un noyau dans sa version 2.0.8. D'autres versions
pourront donc présenter quelques différences.</p>
<h2><a name="s2">2. Résumé</a></h2>
<p>Vous avez un nouveau disque de grande capacité. Que faire&nbsp;?
Bon, du côté logiciel il faut utiliser <code>fdisk</code> (ou
mieux, <code>cfdisk</code>), pour créer les partitions, ensuite
<code>mke2fs</code> pour créer un système de fichiers et enfin
<code>mount</code> pour faire le lien entre ce nouveau système de
fichiers et l'arborescence déjà existante.</p>
<p>Il n'est pas nécessaire de lire ce HOWTO à partir du moment où,
de nos jours, il n'y a <em>pas</em> de problème avec les disques de
grande capacité. La grande majorité des problèmes constatés est due
au fait que les gens pensent qu'il peut y avoir un problème et
installent un gestionnaire de disques durs, ou passent en mode
expert dans <code>fdisk</code>, ou encore spécifient explicitement
une géométrie de disque à LILO ou sur la ligne de commande du
noyau.</p>
<p>Cependant, les domaines dans lesquels interviennent typiquement
les problèmes sont&nbsp;:</p>
<ul>
<li>un matériel ancestral&nbsp;;</li>
<li>plusieurs systèmes d'exploitation sur le même disque
dur&nbsp;;</li>
<li>le démarrage.</li>
</ul>
<p>Conseil&nbsp;:</p>
<p>Pour les disques durs SCSI de grande capacité&nbsp;: Linux les a
très tôt supportés. Il n'y a rien à faire.</p>
<p>Pour les disques durs IDE de grande capacité (au-delà de
8,4&nbsp;Go)&nbsp;: procurez-vous un noyau stable ré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é.</p>
<p>Pour des disques durs IDE de capacité vraiment importante
(au-delà de 33,8&nbsp;Go)&nbsp;: reportez-vous à la section
<a href="#verylarge">Problè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é au démarrage, il faut essayer de spécifier
<code><a href="#linear">linear</a></code> dans le fichier de
configuration <code>/etc/lilo.conf</code> (et si
<code>linear</code> était déjà présent, essayez sans). Si vous avez
une version récente de LILO (21.4 ou mieux), le mot-clé
<code>lba32</code> devrait vous permettre de démarrer de n'importe
où 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 être plus pratique d'utiliser un gestionnaire de démarrage
différent).</p>
<p>Il y a des problèmes de géométrie qui peuvent être résolus en
passant explicitement une géomé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é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émarrage, le noyau ne peut pas lire la table
des partitions, envisagez la possibilité que UDMA66 ait-été
sélectionné alors que le contrôleur, le câ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ère chose que fait le noyau.
Assurez-vous que UDMA66 n'est pas utilisé.</p>
<p>Si vous pensez que quelque chose cloche dans la taille de votre
disque dur, assurez-vous que vous n'êtes pas en train de confondre
<a href="#units">unités</a> binaires et décimales et sachez que
l'espace libre rapporté par <code>df</code> pour un disque vide,
est inférieur de quelques centièmes à la taille de la partition, ce
à cause d'un en-tête de gestion.</p>
<p>Si le noyau rapporte deux tailles différentes pour un média
amovible, cela veut dire que l'une est donnée par le média lui-même
et l'autre par le disque/la disquette. Cette seconde valeur est
égale à zéro dans le cas où aucun disque/disquette n'est
présent.</p>
<p>Maintenant, si vous pensez qu'il y a tout de même des problèmes,
ou simplement si vous êtes curieux, lisez la suite.</p>
<h2><a name="units"></a> <a name="s3">3. Unités et tailles</a></h2>
<p><!--
units!megabyte
-->
 <!--
units!gigabyte
-->
 Un kilo-octet (Ko) est égal à 1000&nbsp;octets (NdT&nbsp;: un
octet se dit byte en anglais et est abrégé avec un 'B' en
majuscule. À ne pas confondre avec un bit, qui se dit bit et qui
est abrégé avec un 'b' en minuscule&nbsp;!). Un Méga-octet (Mo) est
égal à 1000&nbsp;Ko. Un Giga-octet (Go) est égal à 1000&nbsp;Mo. Un
Téra-octet (To) est égal à 1000&nbsp;Go. Ceci est la <a href=
"http://physics.nist.gov/cuu/Units/prefixes.html">norme dans le
Systè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à, je me reporte au <a href=
"http://physics.nist.gov/cuu/Units/binary.html">nouveau
standard</a> et j'écris Ki, Mi, Gi, Ti pour les unité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 égal à
1048576&nbsp;octets (1,05&nbsp;Mo), 1&nbsp;Gio repré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ère assez normale, les constructeurs de disques durs
suivent la norme SI et utilisent des unités décimales. Cependant,
les messages de démarrage du noyau Linux (pour les noyau qui ne
sont pas très récents) et quelques programmes de type
<code>fdisk</code> utilisent les symboles MB et GB (Mo et Go en
français) pour les unités binaires, ou binaires-décimales
mélangé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és décimales (ou simplement en
octets).</p>
<p>En ce qui concerne la terminologie et les abréviations des
unité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énommer <em>grand kilo octet</em>, <em>grand méga octet</em>, ...
<em>grand yota octet</em>. Il écrit&nbsp;: <i>"Remarquez que le
fait de doubler la lettre a une connotation à 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ôtre, la seule chose importante est de
mettre l'accent sur le fait qu'un méga octet contient précisément
1000000&nbsp;octets et qu'il est nécessaire d'employer d'autres
termes ou d'autres abrévations si vous voulez dé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éto-Optiques par exemple, utilisent une taille de
secteur égale à 2048&nbsp;octets et toutes les capacités données
ci-dessous doivent être multipliées par quatre. (Si vous utilisez
<code>fdisk</code> sur de tels disques, assurez-vous d'avoir une
version 2.9i ou supé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êtes (NdT&nbsp;: tête se dit
<em>head</em> en anglais, d'où l'abréviation&nbsp;!) et S secteurs
par piste possède en tout C×H×S secteurs et peut stocker
C×H×S×512&nbsp;octets. Par exemple, si sur un disque dur il est
écrit C/H/S=4092/16/63, alors celui-ci a
4092×16×63=4124736&nbsp;secteurs et peut contenir
4124736×512=2111864832&nbsp;octets (2,11&nbsp;Go). Il y a une
convention dans l'industrie qui consiste à 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 être déduite des valeurs C/H/S rapportées par
ce dernier.</p>
<h2><a name="s4">4. Accès à un disque dur</a></h2>
<p>Si on veut lire ou écrire quelque chose à partir de, ou sur un
disque dur, il faut spécifier une position sur ce disque, en
donnant par exemple un numéro de secteur ou de bloc. Si le disque
dur est de type SCSI, alors ce numé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ême chose. Mais si le disque dur est vieux, RLL, MFM
ou IDE avant l'apparition du LBA, alors l'électronique qui lui est
attachée attend un triplet (cylindre, tête, secteur) pour désigner
l'endroit voulu.</p>
<p>La correspondance entre la numérotation linéaire et cette
notation tridimensionnelle est la suivante&nbsp;: pour un disque
dur avec C&nbsp;cylindres, H&nbsp;têtes et S&nbsp;secteurs/pistes,
la position (c,h,s) en 3D, ou la notation CHS, est la même que la
position c×H×S+h×S+(s-1) en notation linéaire ou bien LBA. (Le -1
est dû au fait que traditionnellement les secteurs sont numérotés à
partir de 1 et non 0, dans cette notation 3D.)</p>
<p>En conséquence, pour pouvoir utiliser un très vieux disque
non-SCSI, il faut connaître sa <em>géométrie</em>, c'est-à-dire les
valeurs de C, H et S. (Si vous n'avez pas d'information à 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ès disques du BIOS et la limite des 1024
cylindres</a></h2>
<p>Linux ne se sert pas du BIOS, mais d'autres systèmes
d'exploitation le font. Le BIOS, qui existait avant le temps du
LBA, offre avec INT13 des routines d'Éntrée/Sortie disque qui
prennent (c,h,s) comme arguments. (Plus précisément&nbsp;:
<code>AH</code> sélectionne la fonction à exécuter, <code>CH</code>
correspond aux 8 bits de poids faible du numéro de cylindre,
<code>CL</code> a dans ses bits 7-6 les deux bits de poids fort de
ce même numéro et dans ses bits 5-0 le numéro du secteur,
<code>DH</code> est le numéro de la tête et <code>DL</code> est le
numé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é sur trois octets, avec
10&nbsp;bits pour le numéro du cylindre, 8&nbsp;bits pour le numéro
de tête et 6&nbsp;bits pour le numéro de secteur sur la piste
(numéroté de 1 à 63). Il s'ensuit que le numéro de cylindre peut
prendre des valeurs allant de 0 à 1023 et que le BIOS ne peut pas
adresser plus de 1024&nbsp;cylindres.</p>
<p>Les logiciels DOS et Windows n'ont pas évolué quand furent
introduits les disques IDE avec le support LBA et ont toujours eu
besoin du soutien d'une géométrie pour gérer les disques durs, même
quand cela n'a plus été nécessaire pour effectuer des
Éntrées/Sorties, mais uniquement pour converser avec le BIOS. Cela
signifie bien sûr que Linux a besoin du support de la géométrie du
disque dur quand il est nécessaire de communiquer avec le BIOS ou
avec d'autres systèmes d'exploitation, même sur des disques durs
modernes.</p>
<p>Cet état de choses a duré pendant à peu près quatre ans. Ont
alors commencé à apparaître sur le marché des disques durs qui ne
pouvaient plus être adressés avec les fonctions INT13 (à 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 été
créée&nbsp;: les dénommées Fonctions INT13 Étendues, où DS:SI
pointe sur un paquet représentant l'adressage du disque sur
16&nbsp;octets, qui contient un nombre absolu de blocs commençant
par 8&nbsp;octets.</p>
<p>Tout doucement, le monde Microsoft semble aller vers une
utilisation de ces Fonctions INT13 Étendues. Probablement, dans
quelques années, plus aucun système moderne placé dans un
ordinateur moderne n'aura besoin du concept de 'géomé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écification ATA (pour les disques durs IDE) --&nbsp;la
limite des 137&nbsp;Go</b></dt>
<dd>
<p>Au plus 65536&nbsp;cylindres (numérotés de 0 à 65535),
16&nbsp;têtes (numérotées de 0 à 15), 255&nbsp;secteurs par piste
(numérotés de 1 à 255), pour une capacité 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é supérieure à 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érotés de 0 à 1023),
256&nbsp;têtes (numérotées de 0 à 255), 63&nbsp;secteurs par piste
(numérotés de 1 à 63) pour une capacité totale maximale de
8455716864&nbsp;octets (8,5 Go). De nos jours, cela est une
sérieuse limitation. Cela signifie que DOS ne peut utiliser les
actuels disques de grande capacité.</p>
</dd>
<dt><b>La limite des 528&nbsp;Mo</b></dt>
<dd>
<p>Si les mêmes valeurs c,h,s sont utilisées pour les appels aux
fonctions Int13 du BIOS et pour les opérations d'Éntré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êtes,
63&nbsp;secteurs par piste, ce qui donne une capacité 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é à poser des problèmes aux alentours de 1993 et les gens
ont eu recours à toutes sortes de bidouillages, aussi bien au
niveau maté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
été inventé (1994)&nbsp;: un BIOS pouvait utiliser une géométrie
quand il s'adressait au lecteur et une autre géométrie, fausse
celle-là, quand il parlait à DOS et faire des conversions de l'une
à 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 être au plus égal à 4095 et l'on ne peut accéder qu'à
4095×16×63×512=2113413120&nbsp;octets. Le fait d'avoir un disque
dur de plus grande capacité se traduirait par un plantage au moment
du démarrage. Cela a pour effet de rendre les disques avec une
géomé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éométrie de 4092/16/63. Vous pouvez
également jeter un coup d'oeil à 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ème lors de la configuration du CMOS pour des
disques durs ayant une capacité supérieure à 3277&nbsp;Mo. Jetez un
oeil à 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évrier 1997)</b></dt>
<dd>
<p>Une conversion simple du BIOS (ECHS=CHS Étendu, parfois appelée
'Large disk support' ou simplement 'Large') fonctionne en doublant
le nombre de têtes et en divisant par deux le nombre de cylindres
montrés au DOS, de manière répétée, jusqu'à ce que le nombre de
cylindres soit au plus égal à 1024. Maintenant, DOS et
Windows&nbsp;95 ne peuvent pas supporter 256&nbsp;têtes de lecture
et donc, dans le cas fréquent où le disque dit avoir 16&nbsp;têtes,
cela signifie que cette moulinette ne fonctionne que jusqu'à une
taille de 8192×16×63×512=4227858432&nbsp;octets (avec une fausse
géométrie de 1024&nbsp;cylindres, 128&nbsp;tê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 évitent le problème
précédent en ajustant d'abord le nombre de têtes à 15 ('revised
ECHS'), de façon qu'une fausse géométrie comportant 240&nbsp;têtes
soit obtenue, valable jusqu'à une taille de
1024×240×63×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éfinitive, si le BIOS fait
tout ce qu'il peut pour réussir la conversion et utilise
255&nbsp;têtes et 63&nbsp;secteurs par piste ('assisted LBA' ou
simplement 'LBA') il peut atteindre
1024×255×63×512=8422686720&nbsp;octets, soit légèrement moins que
la précédente limite de 8,5&nbsp;Go, cela parce que les géométries
avec 256&nbsp;têtes doivent être évitées. (Cette conversion
utilisera pour le nombre de têtes la première valeur H, prise dans
la suite 16, 32, 64, 128, 255, pour laquelle la capacité totale du
disque dur tient dans 1024×H×63×512 et calcule alors le nombre de
cylindres C comme étant égal à la capacité totale divisée par
(H×63×512).)</p>
</dd>
<dt><b>La limite des 33,8&nbsp;Go (août 1999)</b></dt>
<dd>
<p><a name="biosupgrades"></a> Le prochain obstacle se présente
avec une taille de 33,8&nbsp;Go. Le problème est qu'avec les
16&nbsp;têtes et les 63&nbsp;secteurs/piste par défaut, ça donne un
nombre de cylindres supérieur à 65535, qui ne rentre pas dans un
short. La plupart des BIOS existants ne peuvent pas gérer de tels
disques. (Jetez un oeil, par exemple à <a href=
"http://www.asus.com/Products/Motherboard/bios_slot1.html">Asus
upgrades</a> pour une nouvelle image à 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èmes posé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éjà été mentionné ci-dessus, le vieux protocole
ATA utilises 16+4+8=28&nbsp;bits pour donner le numéro de secteur
et de ce fait, ne peut pas adresser plus de 2^28&nbsp;secteurs.
ATA-6 décrit une extension qui permet d'adresser
2^48&nbsp;secteurs, soit un million de fois plus. Les noyaux très
ré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é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és donner
leur géométrie comme étant 16383/16/63. Cela signifie en fait que
la 'géométrie' est obsolète, et qu'elle ne peut plus servir à
calculer la taille totale d'un disque dur.</p>
<h2><a name="s5">5. Démarrage</a></h2>
<p><!--
booting!BIOS usage during
-->
 <!--
disk!BIOS access during booting
-->
 Quand le système est mis en route, le BIOS lit le secteur 0 (connu
sous le nom de MBR&nbsp;: le "Master Boot Record", la donnée
principale d'amorçage) du premier disque dur (ou de la disquette,
ou du cd-rom) et saute au code trouvé à cet endroit --&nbsp;en
général un chargeur d'amorce. Les petits chargeurs trouvés à cet
endroit n'ont, par principe, pas leur propre gestionnaire de
disques durs et utilisent plutôt les services du BIOS. Cela
signifie qu'un noyau Linux ne peut être chargé que s'il est
entièrement situé dans les 1024 premiers cylindres du disque, à
moins que vous ne possédiez un BIOS et un chargeur de d'amorce
moderne&nbsp;: un BIOS qui supporte les fonctions INT13 Étendues et
un chargeur de d'amorce qui sache les utiliser.</p>
<p>Ce problème (s'il existe) est résolu de manière très
simple&nbsp;: assurez-vous que le noyau (et peut-être d'autres
fichiers utilisés pendant la phase de démarrage, comme les fichiers
'map' de LILO) soit situé sur une partition qui est comprise toute
entière dans les 1024 premiers cylindres d'un disque dur auquel le
BIOS peut accéder --&nbsp;il est probable qu'il s'agisse du premier
ou du second disque.</p>
<p>Ainsi, créez une petite partition, disons d'une taille de
10&nbsp;Mo, de telle manière qu'il y ait de la place pour une
poignée de noyaux, en vous assurant qu'elle soit contenue
entièrement dans les 1024 premiers cylindres du premier ou du
second disque dur. Montez-le en tant que répertoire
<code>/boot</code>&nbsp;; ainsi, LILO pourra y mettre ses propres
fichiers.</p>
<p>La plupart des systè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éro de version
d'au moins&nbsp;21.4 (LILO peut être trouvé à 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 à <code>/sbin/lilo</code> (le programme qui installe la
carte d'amorçage) permet de stocker une liste d'adresses dans cette
carte, pour que LILO (le chargeur d'amorce) sache à partir d'où
lire l'image du noyau. Par défaut ces adresses sont stockée au
format (c,h,s) et un appel INT13 ordinaire est utilisé au moment du
démarrage.</p>
<p>Quand le fichier de configuration précise <code>lba32</code> ou
<code>linear</code>, des adresses linéaires sont stockées. Avec
l'option <code>lba32</code> les adresses linéaires sont également
utilisées au moment du démarrage si le BIOS supporte les extensions
INT13 étendues. Avec l'option <code>linear</code>, ou avec un vieux
BIOS, ces adresses linéaires sont reconverties sous une forme
(c,h,s) et au moment du démarrage des appels INT13 ordinaires sont
utilisés.</p>
<p>De ce fait, avec l'option <code>lba32</code> il n'y a pas de
problème de géométrie et il n'y a pas de limite à
1024&nbsp;cylindres. Sans elle, il y a une limite à
1024&nbsp;cylindres. Qu'en est-il de la géométrie&nbsp;?</p>
<p>Le programme d'amorçage et le BIOS doivent être d'accord sur la
géométrie du disque dur. <code>/sbin/lilo</code> demande la
géométrie au noyau, mais il n'y a aucune garantie que la géométrie
du noyau Linux coïncide avec celle qu'utilise le BIOS. Donc, la
géométrie fourni par le noyau est souvent inutile. Dans de tels cas
on peut faciliter la tâche à LILO en lui passant l'option
<code>linear</code>. L'avantage alors est que, l'idée qu'à le noyau
Linux de la géométrie, n'est plus utilisée. Le revers de la
médaille est que <code>lilo</code> ne peut plus vous prévenir si
une partie du noyau est stockée au-delà de la limite des
1024&nbsp;cylindres et vous pouvez vous retrouver avec un système
qui ne démarre plus.</p>
<h2><a name="ss5.2">5.2 Un bug de LILO</a></h2>
<p>Avec les versions de LILO antérieures à la 2.1 il y a un autre
désavantage&nbsp;: la conversion des adresses effectuée au
démarrage comporte un bug. Quand c×H est supérieur ou égal à 65536,
le calcul provoque un dépassement de capacité. Pour H supérieur à
64 cela donne à 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ù réside l'image du noyau, H=nombre de
tê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 écrit&nbsp;: <em>"J'avais ma partition Linux en
dessous des 1024 premiers cylindres et ça ne démarrait quand même
pas. Au début quand je l'ai déplacée en dessous de 1&nbsp;Go, les
choses fonctionnaient."</em> Comment cela est-il possible&nbsp;? En
fait, c'était un disque dur SCSI avec un contrôleur AHA2940UW qui
utilise soit H=64, S=32 (c'est à dire des cylindres de
1&nbsp;Mio=1,05&nbsp;Mo), soit H=255, S=63 (c'est à 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 était trouvée à 1&nbsp;Gio, alors que Linux
utilisait la seconde méthode et LILO estimait que la limite était à
8,4&nbsp;Go.</p>
<h2><a name="ss5.4">5.4 Plus de limite à 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ède directement aux unités IDE. Donc il
est possible de le mettre sur une disquette ou sur le MBR et de
démarrer de d'importe où de n'importe quel disque IDE (pas
seulement les deux premiers). Vous pouvez trouver ce chargeur à
<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éométrie du disque dur,
partitions et 'overlap'</a></h2>
<p><!--
disk!geometry
-->
 <!--
disk!partitions
-->
 Si vous avez plusieurs systèmes d'exploitation sur vos disques
durs, alors chacun utilise une ou plusieurs partitions. Un
désaccord sur la localisation de ces partitions peut avoir des
conséquences catastrophiques.</p>
<p><a name="partitiontable"></a> Le MBR contient une <i>table des
partitions</i> qui décrit où se situent les partitions (primaires).
Il y a 4 entrées à la table, pour 4 partitions primaires et chacune
ressemble à&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ête/Secteur).
<p>Cette information est redondante&nbsp;: la position de la
partition est donnée à la fois par les champs <code>begin</code> et
<code>end</code> codés sur 24&nbsp;bits et par les champs
<code>start</code> et <code>length</code> codé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-à-dire, des partitions d'au plus 2&nbsp;Tio. Cette capacité
est douze fois plus grande que celle des disques durs que l'on peut
trouver de nos jours, alors peut-être que cela sera suffisant pour,
environ, les cinq prochaines années. (Donc, les partitions peuvent
être très grandes, mais il y a une sérieuse restriction avec le
système de fichiers ext2 quand il est utilisé sur des machines avec
des entiers codés sur 32&nbsp;bits&nbsp;: la taille maximale d'un
fichier est limitée à 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éder aux disques
durs&nbsp;; il ne peut gérer de ce fait que des disques dont la
taille ne dépasse pas 8,4&nbsp;Go, même avec un BIOS qui fait des
conversions. (La taille des partitions ne peut pas excéder
2,1&nbsp;Go à cause des restrictions du système de fichiers FAT16.)
La même chose est valable pour Windows&nbsp;3.11, WfWG et
Windows&nbsp;NT&nbsp;3.*.</p>
<p>Windows&nbsp;95 intègre la gestion des interfaces INT13 Étendues
et utilise des types de partition spéciaux (c, e, f à la place de
b, 6, 5) pour indiquer que l'on doit accéder à la partition de
cette manière. Quand ces types de partition sont utilisés, les
champs <code>begin</code> et <code>end</code> contiennent des
informations factices (1023/255/63). Windows 95 OSR2 introduit le
systè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é 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é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 être
corrigé, parce que ces champs ne peuvent pas stocker des numéros de
cylindre plus grands que 1024&nbsp;: il y aura toujours
'chevauchement' dè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 également
Windows&nbsp;95 dans le cas de partitions typées c, e ou f, alors
tout apparaît comme é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é 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éfaillances</i> écrite à 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ètrage du disque</a> est positionné). De ce fait, FDISK
n'utilisera pas le dernier cylindre. Pour se prémunir d'éventuel
problème le BIOS donne souvent un taille inférieure d'un cylindre
par rapport celle réelle du disque, ce qui peut faire en tout, deux
cylindres de perdus. Les disques ré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éservé
et quand FDISK le fait aussi, alors trois cylindres peuvent être
perdus. De nos jours tout ceci n'a plus de sens mais peut fournir
une explication quand on utilise différents utilitaires qui donnent
des valeurs diffé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ères des cylindres.</p>
<p>Puisque <em>la géométrie des disques</em> est quelque chose qui
n'a pas de réelle existence, des systèmes d'exploitation différents
inventeront des géométries différentes pour le même disque. On voit
souvent un système d'exploitation utiliser une géométrie après
conversion de */255/63 et un autre utiliser une géométrie avant
conversion de */16/63. Du coup, il devrait être impossible
d'aligner les partitions sur les limites des cylilndres, si l'on se
fie à l'idée que chaque système d'exploitation a de la géométrie du
disque. De plus, le fait d'activer ou non le BIOS d'une carte SCSI
peut changer la fausse géométrie des disques SCSI connectés.</p>
<p>Par chance, pour Linux les alignements ne sont pas nécessaires
(sauf pour quelques logiciels d'installation boiteux qui aiment
bien être sûr que tout est d'aplomb&nbsp;; ce qui peut empécher
d'installer une RedHat&nbsp;7.1 sur un disque aux partitions non
alignées, DiskDruid n'étant pas content).</p>
<p>Des personnes rapportent qu'il est facile de créer des
partitions non alignées sous Windows&nbsp;NT, sans qu'il n'y ait de
problème apparent.</p>
<p>MSDOS&nbsp;6.22 par contre, nécessite un alignement. Les
secteurs sur partitions étendues qui ne sont pas sur la frontière
d'un cylindre son ignorées par son FDISK. Le système lui-même se
satisfait de n'importe quel alignement mais interprète les adresses
de début relatives, comme si elles étaient relatives à une adresse
alignée. L'adresse de départ d'une partition logique est donnée
relativement, non pas à l'adresses de la partition étendue qui la
décrit, mais au début du cylindre qui contient ce secteur (il n'est
donc pas étonnant que, même PartitionMagic, nécessite un
alignement).</p>
<p>Quelle est la dé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é et la partition commencera à la
prochaine piste. Ceci s'applique au secteur&nbsp;0 (le MBR) et aux
secteurs de table de partition précédant les partitions logiques.
2. Sinon la partition commence sur le premier secteur du cylindre.
De plus, les partitions étendues commencent sur une frontiè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
étendues les rend invisible à DOS, ce qui assure que seul Linux
pourra regarder ce qui s'y trouve.</p>
<p>Une petite aparté&nbsp;: sur une Sparc, la partition d'amorçage
doit commencer sur une frontiè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éométrie des disques durs (avec têtes, cylindres et pistes)
est une notion qui date de l'âge de MFM et RLL. En ces temps là
cela correspondait à une réalité physique. Aujourd'hui, avec l'IDE
ou le SCSI, plus personne n'est intéressé par les 'véritables'
valeurs de la géomé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érieur du disque&nbsp;-- donc il n'y a
pas de 'bon' nombre de secteurs par piste. Pratiquement à
l'opposé&nbsp;: la commande IDE, INITIALIZE DRIVE PARAMETERS (91h)
est utilisée pour renseigner le disque dur sur le nombre de têtes
et de secteurs par piste qu'il est sensé avoir à ce moment précis.
Il est assez normal de voir un gros disque dur récent qui n'a que 2
têtes, rapporter qu'il en a 15 ou 16 au BIOS, pendant que le BIOS
peut à 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éaire de secteurs numérotés 0, 1, ... et de laisser le
micro-code trouver où, sur le disque dur, est situé tel ou tel
secteur. Cette numérotation linéaire est appelée LBA.</p>
<p>Donc, à présent, la vision conceptuelle est la suivante&nbsp;:
DOS, ou quel que soit le programme d'amorç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éométrie factice dont
l'utilisateur se sert. Si le disque dur accepte le LBA, alors cette
valeur est utilisée pour les Éntrées/Sorties sur le disque.
Autrement, elle est à nouveau convertie en (c',h',s') en utilisant
la géométrie dont le disque se sert cette fois-là et qui est
utilisée pour les Éntrées/Sorties.</p>
<p>Remarquez qu'il y a une légère confusion dans l'utilisation de
l'expression 'LBA'&nbsp;: en tant que terme décrivant les
possibilités d'un disque dur, cela signifie 'Linear Block
Adressing' --&nbsp;Adressage de blocs de manière linéaire&nbsp;--
(par opposition à un adressage CHS). En tant que terme de
configuration du BIOS, il décrit la méthode de conversion parfois
appelé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 à peu près identique apparaît quand le
micro-code ne parle pas le LBA, mais que le BIOS connaît la
conversion. (Dans la configuration il est souvent mentionné
'Large'.) Donc, le BIOS va présenter une géométrie (C,H,S) au
système d'exploitation et va utiliser (C',H',S') quand il parlera
au contrôleur du disque dur. Habituellement, S=S', C=C'/N et H =
H'×N, où 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ès à
8,4&nbsp;Go maximum (7,8&nbsp;Gio).</p>
<p>(La troisième option de configuration est 'Normal', pour
laquelle aucune conversion n'est effectuée.)</p>
<p>Si un BIOS ne connaî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éalisé en
faisant ré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 ça, il est
chargé avant n'importe quel autre système d'exploitation. C'est
pourquoi on peut avoir des problèmes en démarrant depuis une
disquette quand un gestionnaire de disque dur a été installé.</p>
<p>Le résultat est plus ou moins le même avec un BIOS qui fait des
conversions - mais particulièrement, c'est quand on utilise
plusieurs systèmes d'exploitation sur le même disque dur que ces
gestionnaires peuvent poser beaucoup de problèmes.</p>
<p>Depuis sa version 1.3.14, Linux supporte le gestionnaire de
disque dur OnTrack. EZ-Drive quant à lui est supporté depuis la
version 1.3.29. Quelques détails supplémentaires sont donné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étecte la présence d'un gestionnaire de
disque sur un disque dur IDE, il va essayer de recartographier le
disque de la même manière que l'aurait fait le gestionnaire de
disque, comme ça Linux voit le même partitionnement pour, par
exemple, DOS avec OnTrack ou EZ-Drive. Cependant, AUCUNE
recartographie n'est effectuée quand une géométrie a été passé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êtes</i><code>,</code><i>secs</i>'
peut très bien briser la compatibilité avec un gestionnaire de
disque.</p>
<p>Si vous êtes touché par ce problè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êtes (H×C reste
constant) jusqu'à ce que C &lt;= 1024 ou que H=255.</p>
<p>Ci-dessous les détails --&nbsp;les titres des sous-sections sont
les messages qui apparaissent dans les différents messages de
démarrage. Ici et partout ailleurs dans ce texte, les types des
partitions sont donnés en hexadécimal.</p>
<h2><a name="ss8.1">8.1 EZD</a></h2>
<p><!--
disk!EZ-Drive translation
-->
 <!--
disk!EZD translation
-->
 EZ-Drive est détecté par le fait que le type de la première
partition primaire est 55. La géométrie est recartographiée comme
décrit ci-dessus et la table des partitions du secteur 0 est
supprimée --&nbsp;à la place, la table des partitions est celle lue
sur le secteur 1. Le nombre de blocs du disque n'est pas changé,
mais les écritures sur le secteur 0 sont redirigées vers le secteur
1. Ce comportement peut être modifié 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étecté grâce
au type 54 de la première partition primaire. La géométrie est
recartographiée comme décrit ci-dessus et la totalité du disque est
décalée de 63 secteurs (comme ça, l'ancien secteur 63 devient le
numéro 0). Ensuite un nouveau MBR (avec une table des partitions)
est lu depuis le nouveau secteur 0. Bien sûr ce décalage a pour but
de libérer de la place pour le DD0 --&nbsp;c'est pourquoi il n'y a
pas de dé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étecté
grâce au type 51 ou 53 de la première partition primaire. La
géométrie est recartographiée comme dé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étectée grâce au type de partition, mais par signature. (Un test
est effectué pour savoir si la valeur de décalage trouvée dans les
octets 2 et 3 du MBR n'est pas supérieure à 430 et si le
<code>short</code> trouvé à cette valeur de décalage est égal à
0x55AA et qu'il est suivi par un octet impair.) Une fois encore, la
géométrie est recartographiée comme dé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éduire une conversion à
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ébut et de fin respectivement 1 et 63 et comme dernier
numéro de tête 31, 63, 127 ou 254, alors, à partir du moment où 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êtes, il est supposé qu'une conversion du BIOS est active et la
géométrie est recartographiée pour utiliser respectivement 32, 64,
128 ou 255 têtes. Cependant, le disque n'est pas recartographié
quand la vision actuelle de la géométrie a déjà 63 secteurs par
piste et au moins autant de têtes (cela signifie sans doute qu'il a
déjà été recartographié).</p>
<h2><a name="ss8.6">8.6 Comment se débarasser d'un gestionnaire de
disque</a></h2>
<p>Quand Linux détecte le gestionnaire de disque
Ontrack&nbsp;Disk&nbsp;Manager il décale tous les accès disques de
63 secteurs. De la même manière, si Linux détecte EZ-Drive, tous
les accès au secteur 0 seront décalés au secteur 1. Cela signifie
qu'il peut s'avérer difficile de se débarasse de ces gestionnaires
de disque. La plupart de ces gestionnaires ont une option de
désinstallation, mais si vous avez besoin de supprimer un
gestionnaire de disque, une approche peut être de donner
explicitement une géomé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ès à toutes les donné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étails dépendent du numéro de version mineur du noyau. Les
noyaux récents (depuis le 2.3.21) reconanissen les paramètres de
démarrage tels que <code>hda=remap</code> et
<code>hdb=noremap</code>. Il est alors possible de conserver ou
d'éviter le décalage dû à EZD sans se soucier de ce qui est dans la
table des partitions. Le paramètre de démarrage
<code>hdX=noremap</code> permet également d'éviter le décalage dû
au gestionnaire Ontrack&nbsp;Disk&nbsp;Manager.
<h2><a name="s9">9. Consé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éométrie, où 'bonne' pour
<code>fdisk</code> est définie comme la géométrie utilisée par les
autres systèmes d'exploitation sur le même disque dur et pour LILO
comme la géométrie qui va permettre des échanges valides avec le
BIOS au moment du démarrage (en général les deux vont de pair).</p>
<p>Comment <code>fdisk</code> connaît-il la géométrie&nbsp;? Il
demande au noyau en utilisant l'ioctl <code>HDIO_GETGEO</code>.
Mais l'utilisateur peut passer outre cela en précisant la géométrie
de manière interactive, ou sur la ligne de commande.</p>
<p>Comment LILO connaît-il la géomé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 également passer l'option
<code>linear</code> à LILO, il va alors stocker des adresses LBA à
la place des CHS dans son fichier 'map' et retrouvera la géométrie
à utiliser au moment du démarrage (en utilisant la fonction 8 de
INT13 pour connaître la géométrie du disque dur).</p>
<p>Comment le noyau sait-il répondre&nbsp;? Eh bien, en tout
premier lieu, l'utilisateur doit avoir spécifié de manière
explicite, soit à la main soit par l'intermédiaire du chargeur
d'amorce, la géométrie avec la commande en ligne du noyau
'<code>hda=</code><i>cyls</i><code>,</code><i>têtes</i><code>,</code><i>secs</i>'
(voyez la page de manuel bootparam(7)). Par exemple, vous pouvez
demander à LILO de fournir une telle option en ajoutant une ligne
'<code>append="hda=</code><i>cyls</i><code>,</code><i>tê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 à partir du BIOS ou
du matériel lui-même.</p>
<p>Il est possible (depuis Linux 2.1.79) de changer l'idée qu'a le
noyau de la géométrie en utilisant le systè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èrement utile si vous avez besoin d'un nombre tel
de paramètres sur la ligne de commande, que LILO est dépassé (ce
qui n'est pas difficile à accomplir).
<p>Comment le BIOS connaît-il la géométrie&nbsp;? L'utilisateur
peut l'avoir donnée dans la configuration du CMOS. Peut-être aussi
que la géométrie est lue depuis le disque et convertie comme
précisé dans la configuration. Dans le cas de disques SCSI, où il
n'y a pas de géométrie, celle que le BIOS doit inventer peut
également être précisé via des cavaliers ou des paramètres de
configuration (par exemple, les contrôleurs Adaptec ont la
possibilité de choisir entre les valeur habituelles H=64, S=32 et
les 'conversions étendues' H=255, S=63). Parfois, le BIOS lit la
table des partitions pour savoir quelle était la géométrie du
disque au moment du dernier partitionnement. --&nbsp;ceci implique
l'hypothèse qu'une table des partitions valide est présente quand
il y a une signature 55aa. Ceci est plutôt positif puisque il est
alors possible de déplacer les disques de machine en machine. Mais
le fait que le comportement du BIOS dépende du contenu du disque
peut également être la source d'étranges problèmes. Par exemple, il
a été <a href=
"http://www.heise.de/ct/faq/hotline/98/07/hotline9807_11.shtml">rapporté</a>
qu'un disque de 2,5&nbsp;Go était reconnu comme ayant une capacité
de 528&nbsp;Mo à cause du BIOS qui lisait la table des partitions
et déduisait qu'il pouvait utiliser des valeurs CHS non converties.
Un autre effet de ce comportement peut ê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és étaient plus lents que des disques
partitionnés, ceci à cause du BIOS qui testait des modes
32&nbsp;bits en lisant le MBR et en voyant qu'il possédait
effectivement une signature 55aa.</p>
<p>Comment le disque connaît-il la géométrie&nbsp;? En fait, le
fabricant invente une géométrie qui, à un facteur près, donne la
bonne capacité. De nombreux disques ont des cavaliers qui
permettent de modifier la géométrie qu'ils donnent. Ceci permet
d'éviter les bugs des BIOS. Par exemple, tous les disques IBM
permettent à l'utilisateur de choisir entre 15 et 16&nbsp;tê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 é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ètres de LILO</a></h2>
<p>Parfois il est utile de forcer une certaine géométrie en
ajoutant
'<code>hda=</code><i>cyls</i><code>,</code><i>têtes</i><code>,</code><i>secs</i>'
à la ligne de commande du noyau. On voudra pratiquement toujours
<i>secs</i>=63 et le but recherché en ajoutant cela est de
spécifier <i>têtes</i>. (Des valeurs raisonnables de nos jours sont
<i>têtes</i>=16 et <i>têtes</i>=255.) Que devra-t-on mettre pour
<i>cyls</i>&nbsp;? Précisément le nombre qui donnera la bonne
capacité totale de C*H*S secteurs. Par exemple, pour un disque dur
avec 71346240 secteurs (36529274880 octets) on calculera C comme
étant 71346240/(255*63)=4441 (par exemple en utilisant le programme
<code>bc</code>) et on donnera le paramètre de démarrage
<code>hdc=4441,255,63</code>. Comment connaît-on la capacité 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ères de trouver le nombre total de secteurs
71346240. Les noyaux récent donnent également la taille précise
dans les messages de dé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énéral la valeur CHS et arrondie à l'entier inférieur, ce qui,
pour la sortie ci-dessus, nous donnerait au moins
70780×16×63=71346240 secteurs. Dans cet exemple, il se trouve que
ce sont les valeurs précises. La valeur en Mo peut être arrondie au
lieu d'être tronquée et peut, dans les vieux noyaux, être en unités
'binaire' (Mio) plutôt que décimale. Remarquez la correspondance
entre la taille en Mo donnée par le noyau et le numéro de modèle du
Maxtor. Également, dans le cas des disques SCSI, le nombre précis
de secteurs est donné dans les message de dé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étails</a></h2>
<h2><a name="ss10.1">10.1 Détails de l'IDE - les sept
géométries</a></h2>
<p><!--
disk!IDE geometry setting
-->
 Le gestionnaire IDE a cinq sources d'information concernant la
géométrie. La première (G_user) est celle donnée par l'utilisateur
sur la ligne de commande. La deuxième (G_bios) est la 'BIOS Fixed
Disk Parameter Table' --&nbsp;table des paramètres de disque fixe
du BIOS&nbsp;-- (pour le premier et second disque dur seulement)
qui est lue au démarrage du système, avant le passage au mode 32
bits. Les troisième (G_phys) et quatrième (G_log) sont données par
le contrôleur IDE en réponse à la commande <a href=
"#identify">IDENTIFY</a> --&nbsp;ce sont les géométries 'physique'
et 'logique du moment'.</p>
<p>D'un autre côté, le gestionnaire a besoin de deux valeurs pour
la géométrie&nbsp;: d'abord G_fdisk, donnée par un ioctl
<code>HDIO_GETGEO</code> et ensuite G_used, qui est effectivement
utilisée pour les Éntrées/Sorties. G_fdisk et G_used sont toutes
deux initialisées avec la valeur de G_user si elle est fournie,
avec G_bios quand le CMOS dit que cette valeur est présente et avec
G_phys autrement. Si G_log semble vraisemblable, alors G_used est
positionnée à cette valeur. Sinon, si G_used n'est pas
vraisemblable et que G_phys semble l'être, alors G_used prend la
valeur de G_phys. Ici, 'vraisemblable' signifie que le nombre de
tê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éterminer ce que va voir <code>fdisk</code>, mais si
elle donne une géométrie convertie (avec plus de 16 têtes), alors
pour les Éntrées/Sorties qu'effectuera le noyau elle sera elle-même
remplacée par les valeurs que fournira la commande IDENTIFY.</p>
<p>Remarquez que G_bios est assez peu fiable&nbsp;: pour des
systèmes qui démarrent depuis un périphérique SCSI, les premier et
second disques durs peuvent très bien être SCSI&nbsp;; et la
géométrie que le BIOS aura donné pour sda sera utilisée par le
noyau pour hda. Du reste, les disques durs qui ne sont pas déclarés
dans la configuration du BIOS ne sont pas vus par ce dernier. Cela
signifie que, par exemple, dans un système uniquement IDE où hdb
n'est pas déclaré dans la configuration, les géométries rapportées
par le BIOS pour les premier et second disques vont être appliquées
à hda et hdc.</p>
<h3><a name="identify"></a> Commande IDENTIFY&nbsp;DRIVE</h3>
<p>Quand on envoie la commande IDENTIF&nbsp;DRIVE (0xec) à un
disque dur IDE, il retournera 256&nbsp;mots d'information contenant
de nombreux détails techniques. Concentrons nous uniquement sur ce
qui joue une rôle pour la géométrie. Les mots sont numérotés de 0
à&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éfaut de cylindres</td>
<td>16383</td>
</tr>
<tr>
<td>3</td>
<td>Nombre par défaut de têtes</td>
<td>16</td>
</tr>
<tr>
<td>6</td>
<td>Nombre par défautl de secteurs par piste</td>
<td>63</td>
</tr>
<tr>
<td></td>
</tr>
<tr>
<td>10-19</td>
<td>Numéro de série (en ASCII)</td>
<td>K8033FEC</td>
</tr>
<tr>
<td>23-26</td>
<td>Révision du micro-code (en ASCII)</td>
<td>DA620CQ0</td>
</tr>
<tr>
<td>27-46</td>
<td>Nom du modè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ê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é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înes ASCII sont composées de mots contenant chacun deux
caractères, le premier étant l'octet de poids fort et le second
l'octet de poids faible. Les valeurs 32-bits sont données avec le
mot de poids faible d'abord. Les mots 54-58 sont positionnés à
l'aide de la commande INITIALIZE&nbsp;DRIVE&nbsp;PARAMETERS (0x91).
Ils n'ont un sens que quand CHS est utilisé, mais peuvent aider à
trouver la taille réelle du disque dans le cas où celui-ci donne
les valeurs 4092/16/63 à DefaultCHS (dans le but d'éviter les
problèmes de BIOS).</p>
<p>Parfois, quand un cavalier force un disque à 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ème
information pour trouver la taille réelle du disque&nbsp;: le
résultat de la commande READ&nbsp;NATIVE&nbsp;MAX&nbsp;ADDRESS
(0xf8).</p>
<h2><a name="ss10.2">10.2 Détails pour le SCSI</a></h2>
<p><!--
disk!SCSI geometry setting
-->
 La situation pour le SCSI est légèrement différente, puisque les
commandes SCSI utilisent déjà les numéros de blocks logiques, donc
une 'géométrie' est complètement hors de propos pour les véritables
Éntrées/Sorties. Cependant, le format de la table des partitions
est toujours le même, donc <code>fdisk</code> ne fait pas la
différence entre des disques IDE et SCSI. Comme on peut le voir à
partir de la description détaillée ci-dessus, chaque gestionnaire
de disques s'invente une géométrie différente. Un gros foutoir en
fait.</p>
<p>Si vous n'utilisez pas DOS ou un équivalent, alors évitez toute
configuration qui met en jeu des conversions étendues et utilisez
simplement 64 têtes, 32 secteurs par piste (cela a pour effet de
donner une valeur tout à fait sympathique et commode de 1&nbsp;Mio
par cylindre), si possible, comme ça il n'y aura pas de problème
quand vous déplacerez le disque dur d'un contrôleur à un autre.
Certains gestionnaires de disque SCSI (aha152x, pas16, ppa,
qlogicfas, qlogicisp) sont si sensibles au sujet de la
compatibilité avec le DOS qu'ils ne permettront pas à un système
uniquement Linux d'utiliser plus de 8&nbsp;Gio. C'est un bug.</p>
<p>Quelle est la vraie géométrie&nbsp;? La réponse la plus facile
est qu'elle n'existe pas. Et si elle existait, vous ne voudriez pas
la connaître et à coup sûr JAMAIS, AU GRAND JAMAIS ne devrez en
dire quoi que ce soit à <code>fdisk</code> ou à LILO ou au noyau.
C'est uniquement une histoire entre le contrôleur SCSI et le disque
dur. Laissez-moi le redire&nbsp;: seules les personnes stupides
donnent à <code>fdisk</code>, à LILO ou au noyau la véritable
géométrie d'un disque SCSI.</p>
<p>Mais si vous êtes curieux et que vous insistez, vous devez
demander au disque dur lui-même. Il y a l'importante commande READ
CAPACITY qui donnera la capacité complè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êtes (c'est une
donnée qui ne peut pas être changé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épendant du rang et le nombre de
secteurs par piste varie --&nbsp;les pistes extérieures ont plus de
secteurs que les pistes intérieures. Le programme Linux
<code>scsiinfo</code> donnera cette information. Il y a de nombreux
détails et complications et il est clair que personne (probablement
même pas le système d'exploitation) ne désire utiliser cette
information. Du reste, tant que nous ne nous intéressons qu'à
<code>fdisk</code> et à LILO, on a typiquement des réponses du
style C/H/S=4476/27/171 --&nbsp;valeurs qui ne peuvent pas être
utilisées par <code>fdisk</code> parce que la table des partitions
ne réserve que 10,8 et 6 bits pour respectivement C/H/S.</p>
<p>Mais alors, d'où le <code>HDIO_GETGEO</code> du noyau tire-t-il
ses informations&nbsp;? Eh bien, soit du contrôleur SCSI, soit en
faisant une supposition éclairée. Certains gestionnaires de disque
semblent croire que nous voulons connaître la 'réalité', mais bien
sû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ê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ôle. Quelques gestionnaires de disque
utilisent (C,H,S)=(1023,255,63) pour signaler que la capacité du
disque dur est d'au moins 1023×255×63 secteurs. Ce n'est pas de
chance, puisqu'ils ne révèlent pas la vraie taille et limiteront
les utilisateurs de la plupart des versions de <code>fdisk</code> à
n'avoir accès qu'à environ 8&nbsp;Gio de leur disque --&nbsp;une
sérieuse limitation de nos jours.</p>
<p>Dans le texte ci-dessous, M représente la capacité totale du
disque dur et C, H, S, le nombres de cylindres, de têtes et de
secteurs par piste. Il suffit de donner H, S si l'on voit C comme
étant défini par M/(H×S).</p>
<p>Par dé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 à moins que C ne soit supérieur à 1024, auquel cas
H=255, S=63, C=min(1023, M/(H×S)). (Ainsi C est tronqué et H×S×C
n'est pas une approximation de la capacité M du disque dur. Cela va
dérouter la plupart des versions de <code>fdisk</code>.) Le code de
<code>ppa.c</code> utilise M+1 à la place de M et dit qu'à 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 à moins que C ne soit supérieur à 1024 ou que,
encore mieux, l'option du BIOS '&gt; 1 GB' ait été activée, auquel
cas H=255 et S=63.</p>
</dd>
<dt><b>aha1542&nbsp;:</b></dt>
<dd>
<p>Demande au contrôleur lequel des deux schémas de conversion est
utilisé 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émarrage qui dit "aha1542.c:
Using extended bios translation" ("aha1542.c: Utilisation du mode
de conversion étendu du bios")</p>
</dd>
<dt><b>aic7xxx&nbsp;:</b></dt>
<dd>
<p>H=64 et S=32 à moins que C ne soit supérieur à 1024 ou que,
mieux encore, le paramètre de démarrage "extended" ait été passé,
ou que le bit 'extended' ait été positionné dans la SEEPROM ou dans
le BIOS, auquel cas H=255, S=63. Dans Linux&nbsp;2.0.36 ce mode de
conversion étendu devrait toujours être automatiquement utilisé si
il n'y a pas de SEEPROM, mais dans Linux&nbsp;2.2.6, si le même cas
se présente, le mode de conversion étendu est utilisé seulement si
l'utilisateur le demande au travers du paramètre de démarrage (de
ce fait, quand une SEEPROM est trouvée, le paramètre de démarrage
est ignoré). Cela signifie qu'une configuration qui fonctionne en
2.0.36 peut ne pas démarrer avec un noyau&nbsp;2.2.6 (LILO
nécessite alors le mot-clé <code>linear</code>, ou le noyau a
besoin du paramètre <code>aic7xxx=extended</code> au
démarrage).</p>
</dd>
<dt><b>buslogic&nbsp;:</b></dt>
<dd>
<p>H=64 et S=32 à moins que C ne soit supérieur à 1024, ou que,
encore mieux, le mode de conversion étendu ait été autorisé au
niveau du contrôleur, auquel cas si M&lt;2^22 alors H=128,
S=32&nbsp;; sinon H=255, S=63. Cependant, après avoir fait ce choix
pour (C,H,S), la table des partitions est lue et si pour l'une des
trois possibilités (H,S)=(64,32),(128,32),(255,63) la valeur
endH=H-1 est vue quelque part, alors cette paire est utilisée et le
message "Adopting Geometry from Partition Table" ("Adoption de la
géométrie lue dans la table des partitions") est affiché au
démarrage.</p>
</dd>
<dt><b>fdomain&nbsp;:</b></dt>
<dd>
<p>Il trouve l'information sur la géométrie dans la Table des
Paramè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ère partition, à 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×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é à 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 à 0 si
M&gt;128×1024×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éférence est utilisé
((H,S)=(16,63),(64,32),(64,63)) en fonction du mode de cartographie
du contrôleur.</p>
</dd>
</dl>
Si le gestionnaire ne précise pas la géométrie, nous retombons dans
un mode de supposition guidé par la table des partitions, ou par la
capacité totale du disque dur.
<p>Regardez la table des partitions. Puisque par convention les
partitions se terminent à la limite d'un cylindre, nous pouvons,
étant donné 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é que le décompte des secteurs
commence à 1.) Plus précisément, voilà 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é à la fois en additionnant
<code>start</code> et <code>length</code> et en supposant le fait
que cette partition se termine à 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ère d'un cylindre
et fixer H=<code>endH+1</code> et S=<code>endS</code>. Si cela
échoue, soit parce qu'il n'y a pas de partition, soit parce
qu'elles ont des tailles bizarres, il faut uniquement se fier à la
capacité totale M du disque dur. Algorithme&nbsp;: fixer
H=M<code>/</code>(62×1024) (arrondi au chiffre supérieur),
S=M<code>/</code>(1024×H) (arrondi au chiffre supérieur),
C=M<code>/</code>(H×S) (arrondi au chiffre inférieur). Cela a pour
effet de générer un triplet (C,H,S) avec C égal à 1024 au plus et S
égal à 62 au plus.</p>
<h2><a name="s11">11. Limite de Linux pour l'IDE à 8 Gio</a></h2>
<p>Le gestionnaire IDE de Linux obtient la géométrie et la capacité
d'un disque (et beaucoup d'autres choses) en utilisant une requête
<a href="#identify">ATA&nbsp;IDENTIFY</a>. Récemment encore le
gestionnaire ne croyait pas en la valeur retournée pour
lba_capacity si elle était plus de 10% supérieure à la capacité
calculée par C×H×S. Cependant, par suite d'un accord entre les
industriels, les disques IDE de grande capacité donnent les valeurs
C=16383, H=16 et S=63, pour un total de 16514064&nbsp;secteurs
(7.8&nbsp;Go) indépendamment de leur taille réelle, mais donnent
cette taille réelle dans lba_capacity.</p>
<p>Les noyaux récents de Linux (2.0.34, 2.1.90) savent cela et
agissent en conséquence. Si vous avez un noyau Linux plus ancien et
que vous ne voulez pas passer à une version plus ré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û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éométrie C=16383, H=16, S=63 indépendamment de leur vraie taille,
alors que cette derniè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êtes, par
exemple 1024/255/63 ou 1027/255/63. Donc, le noyau ne doit pas
seulement reconnaître la géométrie particulière 16383/16/63, mais
également toutes ses versions mutilé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é/(H*S)</code>).
En général, ce problème est résolu en mettant le disque en mode
Normal dans la configuration du BIOS (ou, encore mieux, à None, ne
le déclarant pas du tout au BIOS). Si cela est impossible parce que
vous devez démarrer à 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ètres de démarrage du noyau.</p>
<p>Si un BIOS rapporte 16320/16/63, c'est en général pour pouvoir
aboutir à 1024/255/63 après conversion.</p>
<p>Il y a ici, un autre problème. Si le disque dur a été
partitionné en utilisant une conversion de géométrie, alors le
noyau peut, au moment du démarrage, voir cette géométrie qui est
utilisé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
été corrigé dans le noyau&nbsp;2.3.21. Encore un fois, les
paramètres de démarrage du noyau seront utiles.</p>
<h2><a name="jumpers"></a> <a name="ss11.2">11.2 Des cavaliers pour
sélectionner le nombre de têtes</a></h2>
<p>Beaucoup de disques durs ont des cavaliers qui vous permettent
de choisir entre des géométries à 15 ou à 16&nbsp;têtes. Le réglage
par défaut vous donnera une géométrie à 16&nbsp;têtes. Parfois, les
deux géométries adressent le même nombre de secteurs, parfois la
version à 15&nbsp;têtes est plus petite. Vous devez avoir une bonne
raison pour changer cette valeur&nbsp;: Petri Kaukasoina a
écrit&nbsp;: <i>"Un disque dur IBM Deskstar 16 GP de 10.1&nbsp;Go
(modèle IBM-DTTA-351010) avait ses cavaliers positionnés pour
présenter 16 têtes par défaut mais ce vieux PC (avec un AMI BIOS)
ne démarrait pas et j'ai eu à modifier les cavaliers pour le faire
passer en 15 têtes. hdparm -i donne RawCHS=16383/15/63 et
LBAsects=19807200. J'utilise 20960/15/63 pour avoir la capacité
totale."</i> La géométrie 16383/15/63 n'est pas encore reconnue par
le noyau, donc il est nécessaire de donner explicitement ces
paramètres au démarrage. La géométrie 16383/15/63 n'est pas encore
reconnue par le noyau, donc des paramètres de démarrage explicites
sont ici né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é
totale</a></h2>
<p>De nombreux disques durs ont des cavaliers qui vous permettent
de faire apparaître leur taille inférieure à leur valeur réelle.
C'est une bêtise que de le faire et probablement aucun utilisateur
de Linux ne voudra utiliser cette fonctionnalité, mais certains
BIOS plantent avec de gros disques. En général la solution consiste
à conserver le disque entièrement en dehors du contrôle du BIOS.
Cela n'est faisable que si ce disque dur n'est pas votre disque de
démarrage.</p>
<h3>Limitation à 2,1&nbsp;Go</h3>
<p>La première limite sérieuse fut celle des 4096 cylindres (soit,
avec 16 tê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éométrie
par défaut de 6704/15/63, mais ses cavaliers peuvent être
positionnés pour qu'elle apparaisse comme étant 4092/16/63. Le
disque rapportera une capacité LBA de 4124736&nbsp;secteurs et de
ce fait le système d'exploitation ne pourra pas deviner qu'il est
en réalité plus grand. Dans un tel cas (avec un BIOS qui plante
s'il sait que le disque dur est en réalité si grand et donc avec
lequel les cavaliers sont nécessaires) on aura besoin de paramètres
de démarrage pour donner à Linux la taille du disque.</p>
<p>C'est pas de chance. La plupart des disques durs ont des
cavaliers qui peuvent être positionnés pour qu'ils apparaissent
comme étant des 2&nbsp;Go et pour qu'ils rapportent une géométrie
tronquée comme 4092/16/63 ou 4096/16/63, mais qui leur permettent
toujours de rapporter une capacité LBA complète. De tels disques
durs fonctionneront bien et utiliseront l'intégralité de leur
capacité sous Linux, que les cavaliers aient été positionnés ou
pas.</p>
<h3><a name="jumperbig"></a> Limitation à 33&nbsp;Go</h3>
<p>Une limite plus ré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écessitent l'application d'un correctif pour être
capable de s'en sortir avec des disques durs IDE d'une taille plus
importante que celle-là.</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émarrer, même lorsque le disque est retiré des options dans le
CMOS. Vous pouvez regarder à cette adresse <a href=
"http://www.storage.ibm.com/techsup/hddtech/bios338gb.htm">la
limite du BIOS à 33,8&nbsp;Go</a>.</p>
<p>C'est pourquoi les disques de grande capacité 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 à 72680/16/63, ou à
4560/255/63) a un cavalier qui peut être positionné de telle
manière que le disque dur apparaît avec une taille de 33,8&nbsp;Go
et donc rapporte une géométrie de 16383/16/63 comme n'importe quel
gros disque dur, mais avec une capacité LBA de 66055248
(correspondant à 65531/16/63, ou à 4111/255/63). Ceci reste valable
pour les disques de grande capacité récents de chez Maxtor.</p>
<h3>Maxtor</h3>
<p>Quand le cavalier est positionné, la géométrie (16383/16/63) et
la taille (66055248) sont toutes deux conventionnelles et ne
donnent aucune information sur la taille réelle. De plus, si l'on
essaye d'accéder au secteur 66055248 ou plus, on obtient des
erreurs d'entrée/sortie. Cependant, sur les disques Maxtor, la
taille réelle peut être trouvée et mise à disposition, à l'aide des
commandes READ&nbsp;NATIVE&nbsp;MAX&nbsp;ADDRESS et
SET&nbsp;MAX&nbsp;ADDRESS. Nous pouvons présumer que c'est ce que
font MaxBlast et EZ-Drive. Il existe é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étail supplémentaire à pré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éométrie de
16383/16/63 à 4092/16/63 et ne modifie pas la valeur donnée de
LBAcapacity. Ceci signifie que, même si le cavalier est présent,
les BIOS (les vieux Award&nbsp;4.5*) se bloqueront au démarrage.
Pour ce cas précis, Maxtor fournit l'utilitaire <a href=
"http://www.maxtor.com/technology/technotes/20012.html">JUMPON.EXE</a>
qui met à jour le micro-code pour que le cavalier J46 se comporte
comme décrit ci-dessus.</p>
<p>Sur les disques Maxtor récents, la la commande <code>setmax -d 0
/dev/hdX</code> vous donnera également accès à la capacité
maximale. Cependant, sur des disques légè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é 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é 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é 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émarrer&nbsp;!"</em> IBM vous donne le
truc&nbsp;: <i>Si un système avec un BIOS Award bloque pendant la
détection des disques, redémarrez votre système et maintenez la
touch F4 enfoncée pour court-circuiter l'autodé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ère machine et là, la situation est
identique à ce qui se passe avec un Maxtor&nbsp;: vous parvenez à
démarrer et une fois le BIOS passé vous pouvez, soit appliquer un
correctif au noyau, soit exécuter la commande <code>setmax -d
0</code> pour retrouver la capacité 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ître/Esclave/CableSelect pour ces disques, mais le cavalier qui
limite la capacité des versions "4K" semble ne pas être documenté.
Nils Ohlmeier prétent avoir trouvé de manière expérimentale que
c'est le cavalier J42 (<i>"reserved for factory use"</i>
--&nbsp;"réservé à une utilisation en usine"), à côté 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é se comporte
comme le cavalier IBM&nbsp;: la machine démarre sans problème mais
le disque est limité à 33&nbsp;Go et <code>setmax -d 0</code> ne
permet pas de retrouver la capacité maximale. Et la solution IBM
fonctionne&nbsp;: il ne faut pas limiter la capacité du disque avec
le cavalier, mais d'abord le brancher à 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ère machine.
Après avoir démarré, la commande <code>setmax -d 0 /dev/hdX</code>
permet de retrouver la capacité maximale.</p>
<h2><a name="s12">12. Limite de Linux à
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é et (pour une
configuration SCSI typique avec 1&nbsp;Mio de cylindres) un disque
de 80&nbsp;Gio peut apparaître comme ne faisant que 16&nbsp;Gio.
Une fois que le problème a été détecté, il est facile de
l'é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ître le nombre de têtes et de
secteurs par piste et, si nécessaire, il est possible d'obtenir C
avec la formule C=taille/(H×S).</p>
<h2><a name="verylarge"></a> <a name="ss12.1">12.1 Problè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èmes du noyau
Linux. Les problèmes liés au BIOS et au positionnement des cavalier
ont-été traités <a href="#jumperbig">ci-dessus</a>.</p>
<p>Des unités d'une taille supérieure à 33,8&nbsp;Go ne
fonctionneront pas avec les noyaux antérieurs au 2.2.14/2.3.21. Les
détails sont les suivants. Supposez que vous ayez acheté un tout
nouveau disque dur IBM-DPTA-373420 qui offre une capacité 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 étonnant. Et le fait de donner les paramètres hdc=4160,255,63
au démarrage n'aide en rien --&nbsp;ils sont tout simplement
ignorés. Que se passe-t-il&nbsp;? La routine idedisk_setup()
retrouve la géométrie rapportée par le disque dur (qui est
16383/16/63) et écrase ce que l'utilisateur avait demandé sur la
ligne de commande, de telle manière que les données de
l'utilisateur ne sont utilisées que pour la géométrie du BIOS. La
routine current_capacity() ou idedisk_capacity() recalcule le
nombre de cylindres comme étant 66835440/(16*63)=66305 mais comme
il est stocké dans un short, il devient 769. Comme
lba_capacity_is_ok() a détruit id-&gt;cyls, tous les appels se
solderont par un échec et la capacité du disque deviendra
769*16*63. Un correctif est disponible pour de nombreux noyaux. Un
correctif pour le 2.0.38 peut être trouvé à <a href=
"ftp://ftp.us.kernel.org/pub/linux/kernel/people/aeb/">ftp.kernel.org</a>.
Un correctif pour le 2.2.12 peut être trouvé à <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ébarrasser des tags html). Les noyaux 2.2.14
supportent ces disques durs. Dans la série 2.3.* des noyaux, le
support pour ces disques existe depuis le 2.3.21. Il est également
possible de résoudre ce problème avec une méthode matérielle en
<a href="#jumperbig">positionnant des cavaliers</a> pour limiter la
taille à 33,8&nbsp;Go. Dans la plupart des cas, une <a href=
"#biosupgrades">mise à jour du BIOS</a> sera nécessaire pour
pouvoir démarrer depuis ce disque dur.</p>
<h2><a name="s13">13. Partitions é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çage
suivi par 4&nbsp;entrées de la table des partitions de
16&nbsp;octets chacune, suivies par une signature AA55. Les entrées
de la table des partitions de type 5 ou&nbsp;F ou&nbsp;85 (en
hexadécimal) ont une signification particulière&nbsp;: elles
décrivent les partitions <i>étendues</i>&nbsp;: espaces qui seront
ultérieurement fractionnés en partitions <i>logiques</i>. (Donc,
une partition étendue n'est qu'une boîte et ne peut pas être
utilisée par elle-même&nbsp;; on utilise alors les partitions
logiques qu'elle contient.) Ce n'est que la position du premier
secteur de la partition étendue qui est important. Ce premier
secteur contient une table des partitions avec quatre
entrées&nbsp;: une est une partition logique, une est une partition
étendue et deux sont inutilisées. De cette manière, on obtient une
chaîne de secteurs de table des partitions, dispersés sur le disque
dur, où le premier décrit trois partitions primaires et la
partition étendue et chaque secteur de table des partitions qui
suit dé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êtises en partitionnant leur disque, ils veulent savoir&nbsp;:
<i>"est-ce que mes données sont toujours là&nbsp;?"</i> Et la
réponse est généralement&nbsp;: <i>"oui"</i>. Mais si des
partitions logiques ont été créées, alors les secteurs de table des
partitions les décrivant sont écrits au début des ces partitions
logiques et les données qui étaient initialement à ces emplacements
sont perdues.</p>
<p>Le programme <code>sfdisk</code> montre la chaîne complè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
étendues qui pointent sur elles-mêmes ou sur une partition placée
avant dans la chaîne. Il est possible d'avoir deux partitions
étendues dans un de ces secteurs de table des partitions, de sorte
que la chaîne de la table de partitions se divise. (Cela peut
arriver par exemple avec un <code>fdisk</code> qui ne reconnaît pas
les partitions typées 5, F ou 85 comme étendues et qui crée une 5 à
la suite d'une F.) Des programmes de type <code>fdisk</code> non
standards peuvent provoquer de telles situations et quelques
manipulations sont nécessaires pour les réparer. Le noyau de Linux
acceptera une division au niveau le plus extérieur. Ainsi, vous
pouvez avoir deux chaî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 à cause d'une
partition logique au-delà du cylindre 1024. En général il faut
<code>sfdisk</code> pour créer une telle configuration.</p>
<h2><a name="s14">14. Résolution des problèmes</a></h2>
<p>Beaucoup de personnes pensent qu'elles ont des problèmes, alors
qu'en réalité rien ne cloche. Elles peuvent également penser que
leurs problèmes sont dus à la géométrie du disque, alors que cela
n'a rien à voir. Tout ce que nous avons vu ci-dessus peut vous
avoir paru compliqué, mais maîtriser le domaine de la géométrie des
disques durs est très facile&nbsp;: ne faites rien du tout et tout
ira bien&nbsp;; ou peut-être faudra-t-il donner à LILO le mot-clé
<code>lba32</code> s'il ne dépasse pas le stade LI au démarrage.
Regardez bien les messages de démarrage du noyau et souvenez-vous
que plus vous tripoterez les géométries (en spécifiant le nombre de
têtes et de cylindres à LILO et à <code>fdisk</code> et en les
passant comme argument au noyau), moins cela aura de chances de
fonctionner. En gros, les valeurs par défaut sont les bonnes.</p>
<p>Et souvenez-vous&nbsp;: la géométrie des disques durs n'est
utilisée nulle part dans Linux, donc les problèmes que vous pouvez
avoir en vous servant de Linux ne sont pas dus à ça. En fait, la
géométrie des disques durs n'est utilisée que par LILO et par
<code>fdisk</code>. Donc, si LILO ne parvient pas à charger le
noyau, ce peut être un problème de géométrie. Si d'autres systèmes
d'exploitation ne comprennent pas la table des partitions, ce peut
être un problème de géométrie. Rien d'autre. En particulier, si
mount ne semble pas vouloir fonctionner, ne vous posez jamais de
question sur la géométrie --&nbsp;le problème est ailleurs.</p>
<h2><a name="ss14.1">14.1 Problème&nbsp;: La géométrie de mon
disque dur IDE est fausse quand je démarre depuis du SCSI.</a></h2>
<p>Il est assez possible qu'un disque dur obtienne une mauvaise
géométrie. Le noyau de Linux questionne le BIOS au sujet de hd0 et
hd1 (les disques du BIOS numérotés 80H et 81H) et suppose que ces
données sont pour hda et hdb. Mais, sur un système qui démarre
depuis du SCSI, les deux premiers disques peuvent très bien être
des disques durs SCSI et de ce fait il peut arriver que le
cinquième disque, qui est hda, c'est-à-dire le premier disque IDE,
se voie assigner une géométrie appartenant à sda. Cela est
facilement résolu en donnant, au démarrage ou dans le fichier
/etc/lilo.conf, les paramètres pour hda 'hda=C,H,S' avec les
valeurs appropriées pour C, H et S.</p>
<h2><a name="ss14.2">14.2 Faux problème&nbsp;: des disques
identiques ont des géométries différentes&nbsp;?</a></h2>
<p><i>"Je possède deux disques durs IBM identiques de 10&nbsp;Go.
Cependant, <code>fdisk</code> donne des tailles diffé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éellement de 10&nbsp;Giga&nbsp;: hdb a comme taille
255×63×1232×512=10133544960 et hdd a pour taille
16×63×19650×512=10141286400, donc tout va bien et le noyau voit les
deux comme des 10&nbsp;Go. Pourquoi y a-t-il cette différence de
taille&nbsp;? C'est parce que le noyau obtient ses données du BIOS
pour les deux premiers disques IDE et le BIOS a recartographié hdb
pour qu'il ait 255&nbsp;têtes (et
16×19650/255=1232&nbsp;cylindres). L'arrondi inférieur coûte ici au
moins 8&nbsp;Mo.</p>
<p>Si vous voulez recartographier hdd de la même manière, donnez au
noyau l'option de démarrage 'hdd=1232,255,63'.</p>
<h2><a name="ss14.3">14.3 Faux problè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éé un système de fichiers sur le
disque, disons avec mke2fs, alors ce système de fichiers a besoin
d'un peu de place pour sa comptabilité --&nbsp;typiquement quelque
chose comme 4% de la taille du système de fichier, un peu plus si
vous demandez beaucoup d'inodes à 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éez sur cette dernière
un système de fichiers ext2, montez-la quelque part et remarquez
qu'elle n'a que 3574475&nbsp;blocs --&nbsp;521501&nbsp;blocs (12%)
ont été perdus en inodes et autres pour de la comptabilité.
Remarquez que la différence entre le total de 3574475&nbsp;blocs et
les 3369664 disponibles pour l'utilisateur est égale aux
13&nbsp;blocs utilisés plus les 204798&nbsp;blocs réservés à root.
Cette dernière valeur peut être changée à 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ême style, avec énormément de
petits fichiers. Par dé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>
À présent, seulement 137501&nbsp;blocs (3,3%) sont utilisé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ôté, ce système de fichiers peut avoir au plus
1024000&nbsp;fichiers (plus qu'assez), contre 4096000 (trop)
auparavant.
</body>
</html>