Comment désactiver le sondage du noyau pour le lecteur?

9

J'ai un ordinateur portable Samsung avec un SSD SanDisk ExpressCache de 30 Go soudé sur le mainbord. Le SSD est mort (donne des tonnes d'erreurs lorsque j'essaie d'y accéder d'une manière ou d'une autre), mais il est toujours sondé au démarrage du noyau, je vois que c'est la partition, l'unité d'Ubuntu affiche l'icône du lecteur non monté dans le tiroir de l'application, et pire que tout, je ne peux pas suspendre l'ordinateur portable , car l'envoi de la commande suspend au périphérique ssd échoue. J'ai essayé de passer le paramètre du noyau sdb = noprobe, mais il semble qu'il soit obsolète depuis longtemps dans le noyau 3.8.0 (Ubuntu 13.04). Comment puis-je désactiver le périphérique sata dans les noyaux récents?

Sergey Melekhin
la source

Réponses:

1

Deux solutions ici: l'une est rapide à appliquer, même si elle ne résout le problème que partiellement, l'autre est la solution complète mais vous oblige à compiler votre propre noyau.

La bonne réponse est un correctif du noyau.

Robin H. Johnson a écrit un correctif pour le pilote du noyau SATA (le trouver dans le site d'échange de pile Unix / Linux ) qui cache complètement le lecteur.

Mise à jour Le patch est maintenant en amont (au moins dans le noyau stable 3.12.7), voir le dépôt git . J'ai demandé un backport dans le tableau de bord Ubuntu .

Une fois le patch installé, ajouter

 libata.force=2.00:disable

aux paramètres de démarrage du noyau masquera le disque du noyau Linux. Vérifiez que le numéro est correct; la recherche du nom de l'appareil peut aider:

(0)samsung-romano:~% dmesg | grep iSSD
[    1.493279] ata2.00: ATA-8: SanDisk iSSD P4 8GB, SSD 9.14, max UDMA/133
[    1.494236] scsi 1:0:0:0: Direct-Access     ATA      SanDisk iSSD P4  SSD  PQ: 0 ANSI: 5

solution de contournement

Répondu par Emmanuel, utilisateur d'Unix StackExchange, dans https://unix.stackexchange.com/a/103742/52205

Vous pouvez au moins résoudre le problème de suspension en exécutant la commande

echo 1 > /sys/block/sdb/device/delete

avant de suspendre.

Pour l'automatiser, j'ai ajouté le fichier suivant: (notez les drapeaux, il doit être exécutable)

-rwxr-xr-x 1 root root 204 Dec  6 16:03 99_delete_sdb

dans l'annuaire /etc/pm/sleep.d/

#!/bin/sh

# Tell grub that resume was successful

case "$1" in
    suspend|hibernate)
        if [ -d /sys/block/sdb ]; then
            echo Deleting device sdb 
            echo 1 > /sys/block/sdb/device/delete       
        fi
        ;;
esac

... et maintenant le système se suspend (et reprend) correctement. J'ai ajouté l'extrait

if [ -d /sys/block/sdb ]; then
      echo Deleting device sdb 
      echo 1 > /sys/block/sdb/device/delete     
fi

à /etc/rc.localtrop, pour faire bonne mesure.

Rmano
la source
Merci @Rmano, les échos ont fonctionné. Mais il n'est pas clair, où dois-je placer 99_delete_sdble fichier exécutable? Dans /etc/rc0.d/peut-être?
Sergey Melekhin
Désolé --- a ajouté les informations pertinentes.
Rmano
5

Je suis allé et j'ai écrit un correctif de noyau pour vous qui implémente la possibilité de désactiver un seul disque au démarrage, afin que vous n'ayez pas à vous soucier de le désactiver dans udev, ni d'attendre lors du démarrage initial.

http://dev.gentoo.org/~robbat2/patches/3.13-libata-disable-disks-by-param.patch

Devrait s'appliquer à de nombreux noyaux très facilement (la ligne ci-dessus a été ajoutée le 2013-05-21 / v3.10-rc1 *, mais peut être appliquée en toute sécurité manuellement sans cette ligne).

robbat2
la source
1
Merci pour vos efforts. Peut-être pouvez-vous commenter (pour ceux qui ne sont pas familiers avec les correctifs du noyau), comment appliquer le correctif et comment l'utiliser (probablement en sdb=disabletant que paramètre du noyau).
mpy
1
kernel.org/doc/Documentation/applying-patches.txt couvre l'application des correctifs du noyau en général, mais de nombreuses distributions ont des méthodes spécifiques d'application des correctifs. Ce correctif implémente plus spécifiquement un indicateur de force «désactiver» pour les libata. L'utilisateur devra l'utiliser avec libata.force = ID: désactiver où ID est un tuple number ou number.number identifiant le lecteur en question.
robbat2
Je ne sais pas si ces instructions: wiki.ubuntu.com/Kernel/BuildYourOwnKernel sont à jour. J'essaierai si je peux cette semaine ...
Rmano
Soit dit en passant, dans le cas de l'ordinateur portable Samsung, la commande devrait probablement être "libata.force = 2.00: disable" ( grep iSSD /var/log/syslogdevrait vous donner un indice).
Rmano
1
Pour info, il est fusionné au noyau pour 3.13 ainsi qu'à l'arborescence stable du noyau. L'option nodisable n'a PAS été acceptée cependant.
robbat2
0

J'ai fait des recherches et trouvé une solution qui peut être implémentée assez facilement sur Ubuntu. La distribution utilise kmod, donc ce qui suit devrait fonctionner correctement sur cela et toute distribution qui utilise kmod.

Selon le pilote que vous utilisez, vous devrez le mettre sur liste noire si vous souhaitez désactiver tous les périphériques SATA. Essayez de lsmod | grep satadéterminer le ou les pilotes que vous utilisez. Ensuite, dans votre /etc/modprobe.d/créez un nouveau fichier avec echo blacklist (module) > blacklist.confpour l'ajouter à la liste noire. Reconstruisez vos initramfs avec mkinitramfspour qu'il prenne effet. Redémarrez.

Alternativement, ajoutez simplement modprobe.blacklist=(module)à vos paramètres de noyau.

Hector
la source
1
Il désactivera tous les périphériques SATA, y compris le disque dur, de sorte que mon ordinateur portable ne démarrera plus. Et le support sata est compilé dans le noyau (pas en tant que module), donc je ne peux pas le mettre sur liste noire.
Sergey Melekhin
D'accord, alors ouvrez simplement votre ordinateur portable et retirez le lecteur ...
Hector
Malheureusement, je ne suis pas assez compétent pour le faire - il est soudé sur le mainbord, non attaché via un câble sata. Je ne suis même pas sûr que l'ordinateur portable sera fonctionnel si je le supprime.
Sergey Melekhin