Table des matières

,

libATA

La libATA est une bibliothèque pour le noyau linux introduite lors de la version 2.6.18. Elle est censée permettre de gérer tous les transferts ATA et ATAPI via le sous-système SCSI.

C'est « grâce » à elle que vos partitions apparaissent sous la forme /dev/sdX au lieu de /dev/hdX depuis qu'Ubuntu a fait le choix d'utiliser les modules liés à cette bibliothèque par défaut. C'est aussi à cause d'elle que vous rencontrez peut-être des performances catastrophiques, des problèmes de prise en charge du DMA, ou autre option traditionnellement activée par hdparm.

Cette page a pour but de recenser quelques solutions face aux problèmes que peuvent engendrer l'utilisation de cette bibliothèque.

Diagnostic

Faux problème

Vous avez décidé d'activer le DMA et la prise en charge de l'I/O 32bits (ou tout autre option) sur votre disque dur (ou votre graveur DVD), en utilisant la commande hdparm. Et là, c'est le drame :

sudo hdparm -d1 -c1 /dev/sda
/dev/sda:
setting 32-bit IO_support flag to 1
HDIO_SET_32BIT failed: Invalid argument
IO_support = 0 (default) (16-bit)
HDIO_GET_DMA failed: Inappropriate ioctl for device

Pas d'inquiétude : la libATA active par défaut le DMA sur tous les périphériques compatibles. La prise en charge de l'I/O 32bits n'est pour l'instant disponible que sur un nombre limité de périphériques, et ce n'est pas la priorité des développeurs de la libATA, car les situations où le besoin s'en fait sentir sont relativement rares. Lorsque c'est possible, cette option est également activée par défaut.

Vrai problème

Si votre disque est lent, si la lecture d'un DVD est saccadée, s'il vous faut plusieurs heures pour graver quelques centaines de Mo, alors vous avez peut-être réellement un problème avec la libATA. Commencez par effectuer le test suivant sur le périphérique problématique (dans cet exemple, /dev/sda) :

sudo hdparm -T /dev/sda

Si le résultat est de plusieurs centaines de Mo par seconde, votre problème est ailleurs. En revanche, si le résultat donne quelques Mo voire des centaines de ko par seconde, alors votre problème vient vraisemblablement de la libATA : votre matériel n'est pas (encore) correctement pris en charge. C'est en particulier vrai pour les cartes mères Intel fonctionnant en mode « combiné ».

Solutions

Il existe plusieurs solutions préconisées. Elles sont présentées ici par ordre (supposé) de préférence de la part des développeurs de la libATA. Si l'une d'elle ne fonctionne pas, passez à la suivante.

Elles sont surtout valables pour les cartes mères Intel proposant le mode « combiné », qui permet aux modes PATA (comprendre IDE) et SATA de fonctionner comme une seule fonction PCI, mais entre en conflit avec la libATA, les pilotes IDE et la libATA essayant de gérer le même matériel. Le principe est donc de n'utiliser soit QUE la libATA, soit QUE les pilotes IDE.

Si vous choisissez une solution qui utilise les pilotes IDE, vos disques vont redevenir du type /dev/hdX. N'oubliez pas de modifier les fichiers /etc/fstab en conséquence ! Le label de la swap va également changer.

Dans le BIOS

Modifiez dans votre BIOS l'option mode IDE de legacy ou combined en AHCI, RAID ou native.

Dans Grub

Essayez de démarrer Grub en ajoutant à la ligne kernel le paramètre combined_mode=libata ou le paramètre combined_mode=ide, afin de permettre à l'un ou l'autre des pilotes libata/ide de prendre en charge tous les ports IDE.

Désactiver libATA

Par les modules

Désactiver les modules liés à la libATA. Dans le fichier /etc/modprobe.d/blacklist, ajouter les lines suivantes (toutes ne sont pas forcément nécessaires, vous pouvez faire des tests si vous le souhaitez) :

blacklist pata_atiixp
blacklist pata_acpi
blacklist sg
blacklist sr_mod
blacklist sd_mod

Par le noyau

Vous pouvez également recompiler le noyau en désactivant complètement la libATA (CONFIG_ATA) et en activant CONFIG_BLK_DEV_IDE_SATA.

Alternative par le noyau

Alternativement, vous pouvez désactiver complètement CONFIG_IDE, et autoriser la libATA à diriger tous vos ports IDE et SATA.

Liens