Changement mode controleur ATA --> AHCI = Plus de boot

Bonjour

Sur une machine :

  • DELL Latitude D630
  • Tournant sous debian SID (kernel Linux DELL 3.2.0-rc7-686-pae)
  • dont le controleur de disque est un Intel ICH8M (donc normalement compatible avec le mode AHCI, puisque compatible depuis le ICH6)

J’essaye en vain de changer le mode de mon contrôleur de disque de ATA vers AHCI.

Lorsque je change de mode dans le BIOS :

  • GRUB s’affiche bien et me permet de choisir le noyau sur lequel je souhaite booter
  • le message “Loading please wait…” s’affiche, pendant environ une minute.
  • le message d’erreur suivant s’affiche ensuite:
Gave up waiting  for boot device. Common problem:
- Boot args
  -Check root delay (did the system wait long enough?)
  - check root = did the system wait for the right device ?
-Missing module
Alert! /dev/disk/by-uuid/401fb81f-...-...etc does not exist
Dropping to a shell.
(initramfs):

Mon disque n’est donc plus reconnu, apparemment.
J’ai remarqué que le systeme semble utiliser le module ata_pixx ce qui est peut être l’origine du problème ?

J’ai essayé de faire charger le module AHCI avant ATA_PIIX en rajoutant la commande :
softdep ata_piix pre: ahci
dans le fichier /etc/modprobe.d/aliases.conf puis lancé un update-initramfs -k all -u, rebooté, remodifié le mode ATA --> AHCI, sans succès toujours le même problème.

Le module ahci à l’air de se charger pourtant (vérifié en bootant en mode ATA):

ced@DELL:~$ lsmod |grep ahci
ahci                   20821  0 
libahci                18308  1 ahci
libata                124981  4 ahci,libahci,ata_generic,ata_piix

J’ai aussi essayé de rajouter l’instruction pci=nomsi dans grub, sans succès non plus…

Je n’ai pas osé tester la solution bourrin consistant à blacklister le module ata_piix, au cas ou mon système ne booterait plus du tout ensuite…

Merci par avance à ceux qui auront des idées pour m’aider a résoudre mon problème.

Le shell de l’initramfs permet de faire des vérifications et des tests.

  • lspci -nn # pour identifier le contôleur SATA
  • dmesg # pour voir si le noyau le reconnaît et le disque
  • lsmod # pour voir les modules chargés
  • cat /proc/partitions # pour voir les disques et partitions reconnus
  • ls /dev/sd* /dev/disk/by-uuid # idem
  • modprobe [-r] xxx # pour [dé]charger le module xxx

Salut Pascal

merci de ta réponse. J’ai fais les vérifications que tu me suggères, mais beaucoup d’entres elles ne fonctionnent pas, car les commandes ne sont pas reconnues par le shell, on dirait.

- lspci -nn # pour identifier le contôleur SATA ==> lspci n’est pas reconnu (/bin/sh: 30: lspci: not found)

- dmesg # pour voir si le noyau le reconnaît et le disque ==> la commande est reconnu, mais toutes les lignes s’affichent d’un coup, et le |more ne fonctionne pas, ni le grep…

- lsmod # pour voir les modules chargés ==> idem lspci, il ne reconnait pas la commande (/bin/sh: 35: lsmod: not found)

- cat /proc/partitions # pour voir les disques et partitions reconnus ==> la commande ne renvoi rien, mais ne fait pas d’erreur, je suppose que le fichier est vide, donc qu’aucune partition n’est reconnue…

- ls /dev/sd* /dev/disk/by-uuid # idem ==> renvoi no such file or directory, donc ni disque ni partition reconnue, apparemment ?

- modprobe [-r] xxx # pour [dé]charger le module xxx ==> j’ai pu decharger le module ata_piix, charger le module ahci (enfin je pense, vu que je ne peux pas vérifier avec lsmod…), mais je ne sais comment relancer le boot ensuite… :blush:

Pour l’identification du controleur SATA, en environnement fonctionnel, le lspci -nn donne :

00:00.0 Host bridge [0600]: Intel Corporation Mobile PM965/GM965/GL960 Memory Controller Hub [8086:2a00] (rev 0c)
00:02.0 VGA compatible controller [0300]: Intel Corporation Mobile GM965/GL960 Integrated Graphics Controller (primary) [8086:2a02] (rev 0c)
00:02.1 Display controller [0380]: Intel Corporation Mobile GM965/GL960 Integrated Graphics Controller (secondary) [8086:2a03] (rev 0c)
00:1a.0 USB controller [0c03]: Intel Corporation 82801H (ICH8 Family) USB UHCI Controller #4 [8086:2834] (rev 02)
00:1a.1 USB controller [0c03]: Intel Corporation 82801H (ICH8 Family) USB UHCI Controller #5 [8086:2835] (rev 02)
00:1a.7 USB controller [0c03]: Intel Corporation 82801H (ICH8 Family) USB2 EHCI Controller #2 [8086:283a] (rev 02)
00:1b.0 Audio device [0403]: Intel Corporation 82801H (ICH8 Family) HD Audio Controller [8086:284b] (rev 02)
00:1c.0 PCI bridge [0604]: Intel Corporation 82801H (ICH8 Family) PCI Express Port 1 [8086:283f] (rev 02)
00:1c.1 PCI bridge [0604]: Intel Corporation 82801H (ICH8 Family) PCI Express Port 2 [8086:2841] (rev 02)
00:1c.5 PCI bridge [0604]: Intel Corporation 82801H (ICH8 Family) PCI Express Port 6 [8086:2849] (rev 02)
00:1d.0 USB controller [0c03]: Intel Corporation 82801H (ICH8 Family) USB UHCI Controller #1 [8086:2830] (rev 02)
00:1d.1 USB controller [0c03]: Intel Corporation 82801H (ICH8 Family) USB UHCI Controller #2 [8086:2831] (rev 02)
00:1d.2 USB controller [0c03]: Intel Corporation 82801H (ICH8 Family) USB UHCI Controller #3 [8086:2832] (rev 02)
00:1d.7 USB controller [0c03]: Intel Corporation 82801H (ICH8 Family) USB2 EHCI Controller #1 [8086:2836] (rev 02)
00:1e.0 PCI bridge [0604]: Intel Corporation 82801 Mobile PCI Bridge [8086:2448] (rev f2)
00:1f.0 ISA bridge [0601]: Intel Corporation 82801HM (ICH8M) LPC Interface Controller [8086:2815] (rev 02)
00:1f.1 IDE interface [0101]: Intel Corporation 82801HM/HEM (ICH8M/ICH8M-E) IDE Controller [8086:2850] (rev 02)
00:1f.2 IDE interface [0101]: Intel Corporation 82801HM/HEM (ICH8M/ICH8M-E) SATA Controller [IDE mode] [8086:2828] (rev 02)
00:1f.3 SMBus [0c05]: Intel Corporation 82801H (ICH8 Family) SMBus Controller [8086:283e] (rev 02)
03:01.0 CardBus bridge [0607]: O2 Micro, Inc. Cardbus bridge [1217:7135] (rev 21)
03:01.4 FireWire (IEEE 1394) [0c00]: O2 Micro, Inc. Firewire (IEEE 1394) [1217:00f7] (rev 02)
09:00.0 Ethernet controller [0200]: Broadcom Corporation NetXtreme BCM5755M Gigabit Ethernet PCI Express [14e4:1673] (rev 02)
0c:00.0 Network controller [0280]: Intel Corporation PRO/Wireless 4965 AG or AGN [Kedron] Network Connection [8086:4229] (rev 61)

Flûte, lspci est disponible sur le CD d’installation mais pas l’initrd…
lsmod peut être remplacé par “cat /proc/modules”.
more doit pouvoir s’arrêter en forçant le nombre de ligne, par exemple “more -23”.
Pour continuer le démarrage, ctrl+d ou exit tout simplement pour quitter le shell. Mais ça n’ira pas plus loin si le disque n’est pas reconnu.

Mais c’est la sortie de lspci qui serait surtout intéressante. On peut accéder aux infos du bus PCI via /sys/bus/pci/devices/ mais ce serait fastidieux. Booter avec un CD d’installation et basculer sur le shell en console 2 ou 3 avec le contrôleur en mode AHCI serait plus simple. Là le contrôleur SATA est en mode IDE, donc ça n’apprend rien.

Alors, depuis un vieux livecd ubuntu, controleur configure en mode ahci dans le bios, le lspci donne :

00:00.0 Host bridge [0600]: Intel Corporation Mobile PM965/GM965/GL960 Memory Controller Hub [8086:2a00] (rev 0c)
00:02.0 VGA compatible controller [0300]: Intel Corporation Mobile GM965/GL960 Integrated Graphics Controller [8086:2a02] (rev 0c)
00:02.1 Display controller [0380]: Intel Corporation Mobile GM965/GL960 Integrated Graphics Controller [8086:2a03] (rev 0c)
00:1a.0 USB Controller [0c03]: Intel Corporation 82801H (ICH8 Family) USB UHCI Contoller #4 [8086:2834] (rev 02)
00:1a.1 USB Controller [0c03]: Intel Corporation 82801H (ICH8 Family) USB UHCI Controller #5 [8086:2835] (rev 02)
00:1a.7 USB Controller [0c03]: Intel Corporation 82801H (ICH8 Family) USB2 EHCI Controller #2 [8086:283a] (rev 02)
00:1b.0 Audio device [0403]: Intel Corporation 82801H (ICH8 Family) HD Audio Controller [8086:284b] (rev 02)
00:1c.0 PCI bridge [0604]: Intel Corporation 82801H (ICH8 Family) PCI Express Port 1 [8086:283f] (rev 02)
00:1c.1 PCI bridge [0604]: Intel Corporation 82801H (ICH8 Family) PCI Express Port 2 [8086:2841] (rev 02)
00:1c.5 PCI bridge [0604]: Intel Corporation 82801H (ICH8 Family) PCI Express Port 6 [8086:2849] (rev 02)
00:1d.0 USB Controller [0c03]: Intel Corporation 82801H (ICH8 Family) USB UHCI Controller #1 [8086:2830] (rev 02)
00:1d.1 USB Controller [0c03]: Intel Corporation 82801H (ICH8 Family) USB UHCI Controller #2 [8086:2831] (rev 02)
00:1d.2 USB Controller [0c03]: Intel Corporation 82801H (ICH8 Family) USB UHCI Controller #3 [8086:2832] (rev 02)
00:1d.7 USB Controller [0c03]: Intel Corporation 82801H (ICH8 Family) USB2 EHCI Controller #1 [8086:2836] (rev 02)
00:1e.0 PCI bridge [0604]: Intel Corporation 82801 Mobile PCI Bridge [8086:2448] (rev f2)
00:1f.0 ISA bridge [0601]: Intel Corporation 82801HEM (ICH8M) LPC Interface Controller [8086:2815] (rev 02)
00:1f.1 IDE interface [0101]: Intel Corporation 82801HBM/HEM (ICH8M/ICH8M-E) IDE Controller [8086:2850] (rev 02)
00:1f.2 SATA controller [0106]: Intel Corporation 82801HBM/HEM (ICH8M/ICH8M-E) SATA AHCI Controller [8086:2829] (rev 02)
00:1f.3 SMBus [0c05]: Intel Corporation 82801H (ICH8 Family) SMBus Controller [8086:283e] (rev 02)
03:01.0 CardBus bridge [0607]: O2 Micro, Inc. Cardbus bridge [1217:7135] (rev 21)
03:01.4 FireWire (IEEE 1394) [0c00]: O2 Micro, Inc. Firewire (IEEE 1394) [1217:00f7] (rev 02)
09:00.0 Ethernet controller [0200]: Broadcom Corporation NetXtreme BCM5755M Gigabit Ethernet PCI Express [14e4:1673] (rev 02)
0c:00.0 Network controller [0280]: Intel Corporation PRO/Wireless 4965 AG or AGN Network Connection [8086:4229] (rev 61)

On voit que le controleur est bien en mode ahci, mais bon… Tu en penses quoi ? Je ne vois pas bcp de différence avec l’autre résultat mis à part le [8086:2829]…

D’après “modinfo ahci | grep 2829” ce contrôleur SATA devrait être supporté par le module ahci du noyau 2.6.32 de Squeeze. Ça devrait être aussi le cas avec le 3.2 de Sid, à vérifier. Dans l’initramfs, le module ahci est-il chargé (/proc/modules), et si non qu’est-ce que ça donne après chargement manuel avec modprobe ?

(La commande more de l’initramfs ne supporte pas l’option pour forcer le nombre de lignes, donc on oublie ça. On peut jouer avec head ou tail et le scrolling par shift+pageup/down mais c’est pas pratique.)

depuis initramfs, la commande cat /proc/modules renvoi :

ata_generic 12439 0 - Live 0xf822b000
ata_piix 211175 0 - Live 0xf8239000
thermal 13103 0 - Live 0xf8226000
thermal_sys 17752 1 thermal, Live 0xf821c000
libata 124981 2 ata_generic,ata_piix, Live 0xf8301000
scsi_mod 135161 1 libata, Live 0xf824e000

Après un “modprobe ahci” pas de changement dans “/proc/modules”… :cry:

J’ai déchargé les 2 modules ata_piix et ata_generic, ils se déchargent bien, et j’ai tenté de recharger ahci (modprobe ahci), sans succès. Ce module refuse de se charger.

Peut être qu’il veut le chemin absolu du module dans la commande modprobe (modprobe /chemin/du/module/ahci) ? Car j’ai essayé de charge un module fictif (modprobe toto, et pareil, il redonne la main, sans erreur, et ne charge bien sur rien du tout)

Hmm, la commande modprobe de l’initramfs n’affiche pas d’erreur si le module n’existe pas.
Le module ahci.ko est-il présent dans l’initramfs, normalement dans /lib/modules//kernel/drivers/ata/ ?
Si non, est-il au moins présent sur la partition racine ? Et dans ce cas, ce serait un problème dans la construction de l’initramfs qui n’inclut pas le module.

[quote=“PascalHambourg”]Hmm, la commande modprobe de l’initramfs n’affiche pas d’erreur si le module n’existe pas.
Le module ahci.ko est-il présent dans l’initramfs, normalement dans /lib/modules//kernel/drivers/ata/ ?
Si non, est-il au moins présent sur la partition racine ? Et dans ce cas, ce serait un problème dans la construction de l’initramfs qui n’inclut pas le module.[/quote]

C’est justement ce que je suis en train de regarder :smiley:
en m’enfoncant dans l’arborescecne /lib/modules/3.2.0-rc7-686-pae/kernel/drivers/ata/, il n’y a pas de module ahci, uniquement :
libata.ko
ata_piix.ko
ata_generic.ko

Il ne risquait pas de se charger… :think:

Du coup, y a t’il un moyen de faire prendre en compte ce module dans la construction de l’initramfs…?

Si le module ahci n’est pas dans l’initramfs, vérifier dans /etc/initramfs-tools/initramfs.conf que MODULES=most et pas dep.
Si pas suffisant ajouter ahci dans /etc/initramfs-tools/modules.
Puis reconstruire l’initramfs.

Alors:

  1. MODULES=most dans /etc/initramfs-tools/initramfs.conf ==> Ca, c’était OK
  2. J’ai rajouté ahci dans /etc/initramfs-tools/modules puis update-initramfs -u
  3. Ca marche :038

Merci Pascal, t’es un chef :023

Qu’en penses tu, ca valait le coup de passer d’ATA à AHCI, niveau performance ?

Je suis quand même étonné que MODULEs=most n’ait pas suffi. Sur ma Squeeze le module ahci est bien dans l’initramfs alors qu’il ne sert pas et que je n’ai rien forcé.
Pour les performances, j’en sais rien, normalement c’est mieux mais faut comparer…

[quote=“PascalHambourg”]Je suis quand même étonné que MODULEs=most n’ait pas suffi. Sur ma Squeeze le module ahci est bien dans l’initramfs alors qu’il ne sert pas et que je n’ai rien forcé.
Pour les performances, j’en sais rien, normalement c’est mieux mais faut comparer…[/quote]

Je ne saurais pas te dire… Je n’avais jamais trafiqué ces fichiers, mais cette SID n’est pas de toute première fraicheur, je l’ai installée y a quelques années (ca doit faire 3 ans), et en 3 ans, sur une sid, il y a parfois des petits problèmes / bug de temps en temps, ca peut peut être expliquer…

Sinon, niveau perf, à première vue, pas de quoi fouetter un chat, mais on dirait que le disque gratte moins qu’avant, et que le système est un peu plus réactif. Cool :dance:

Le mode natif SATA n’influe pas sur les performances “mécaniques”, le débit séquentiel et le temps d’accès. Il ne peut influer que sur l’efficacité de l’exécution des commandes, notamment grâce au NCQ (Native Command Qeueing).

Hmm, effet placebo donc :neutral_face:

Pas forcément placebo. Tu dis que le disque gratte moins, ça peut être l’effet du NCQ.

Oui, ca je pense que c’est bel est bien le cas, il gratte moins, tout du moins, moins longtemps lorsque c’est le cas.