J’ai trouvé ca en faisaint une recherche sur les disques < 200 go mais je ne sais pas trop quoi en penser…
[quote]Samedi matin, je reçois le disque dur de 200 Go commandé quelques jours auparavant sur LDLC. Après un démontage de mon serveur, j’ajoute le disque dur à celui-ci, et le démarre. Le noyau Linux m’informe donc dans un jargon aussi incompréhensible qu’imbitable :
hdb: cannot use LBA48 DMA - PIO mode will be used for accessing sectors > 268435456
Bien, dis-je, pourquoi pas. Tant pis, on n’utilisera pas le DMA pour accéder à la fin du disque. Le noyau continue de démarrer, mais galère vraiment sur la détection des partitions. Une fois ceci passé, il termine son démarrage. Le lancement d’un fdisk sur le disque dur n’est pas plus probant : ça ne marche pas.
Je savais déjà que ce K6-2 500 Mhz avait des problèmes avec les gros disques durs. Il dispose déjà d’un disque de 120 Go qui n’est pas détecté par le BIOS, mais seulement par le noyau Linux. Un bon vieux disque dur de 1 Go traine dans la machine avec juste le noyau Linux pour permettre de démarrer et détecter les autres disques. Je m’attendais à ce que cette méthode fonctionne également avec un disque de 200 Go. Apparemment, non.
~ La il explique qu’il crame sa carte mère et qu’il la change… ~
Pour finir, revenons sur ce disque dur de 200 Go, dont le problème sous Linux n’était toujours pas résolu. En fait, après farfouillage sur le Web, je constate qu’effectivement le contrôleur IDE de cette carte mère ne gère pas le DMA sur les disques durs de plus de 127 Go, mais qu’il marche en PIO. Et plus précisement, je m’aperçois dans le ChangeLog du noyau 2.6.11.11 (le tout dernier), des corrections ont été apportées à la gestion du LBA48 (le ChangeLog? parle de LBA8, mais c’est une erreur). Et effectivement, avec ce nouveau noyau, le disque dur s’est mis à marcher à merveille. Pour les lignes de C suivantes, j’ai donc cramé ma machine de bureau :
+++ b/drivers/ide/ide-disk.c
@@ -133,6 +133,8 @@ static ide_startstop_t __ide_do_rw_disk(
if (hwif->no_lba48_dma && lba48 && dma) {
if (block + rq->nr_sectors > 1ULL << 28)
dma = 0;
if (!dma) {
@@ -146,7 +148,7 @@ static ide_startstop_t __ide_do_rw_disk(
/* FIXME: SELECT_MASK(drive, 0) ? */
if (drive->select.b.lba) {
- if (drive->addressing == 1) {
- if (lba48) {
task_ioreg_t tasklets[10];
[/quote]
Voila la fin ne me dit pas grand chose, quand au choix dma / pio je suis en auto dans le bios et sous m$ ca à l’air de convenir…
Est-ce que le noyau se substitue au bios?