Comment puis-je dire au noyau Linux d'ignorer complètement un disque comme s'il n'était même pas connecté?


18

Remarquer

Veuillez faire défiler vers le bas pour la réponse (elle a peu de points mais c'est la bonne). Le problème est résolu par un correctif qui sera dans le noyau 3.12.7 et supérieur; J'espère qu'il sera également porté sur les précédents.

Mon ordinateur portable est un Samsung Chronos série 7. Ubuntu Gnome Remix 13.04, avec des pilotes Intel mis à jour.

J'ai un problème avec le disque SSD interne (capacité 8G). Il échoue avec COMRESET et des erreurs d'entrée / sortie. Je suis convaincu que le problème vient du matériel; malheureusement, je n'ai pas Windows installé sur l'ordinateur portable pour vérifier si c'est une question de configuration SSD ou autre.

Le problème est que le disque est reconnu par udev:

KERNEL[9.515930] add      /devices/pci0000:00/0000:00:1f.2/ata2/host1/target1:0:0/1:0:0:0/block/sdb (block)
ACTION=add
DEVNAME=sdb
DEVPATH=/devices/pci0000:00/0000:00:1f.2/ata2/host1/target1:0:0/1:0:0:0/block/sdb
DEVTYPE=disk
MAJOR=8
MINOR=16
SEQNUM=1785
SUBSYSTEM=block
UDEV_LOG=3

et après cela, il échoue dans de nombreux contrôles, retardant le démarrage, retardant l'arrêt et rendant (je pense) la suspension impossible.

Est-il possible de dire à Linux d'ignorer complètement quoi que ce soit sur le lien ata2? J'ai essayé d'ajouter cette ligne à /etc/udev/rules.d/10-local.rules

SUBSYSTEMS=="pci"  DRIVERS=="ahci" KERNELS=="ata2" OPTIONS=="ignore_device"

mais ça ne marche pas.

D'un autre côté, si quelqu'un sait comment réinitialiser le SSD s'il était laissé en mode "cache" sans utiliser Windows ... ou démarrer une fenêtre "live" pour faire de même ...

Merci!

Données ajoutées:

udevadm info -a -n /dev/sdbCollé complet sur http://paste.ubuntu.com/6186145/

smartctl -i /dev/sdb -T permissive donne:

root@samsung-romano:/home/romano# smartctl -i /dev/sdb -T permissive
smartctl 5.43 2012-06-30 r3573 [x86_64-linux-3.8.0-31-generic] (local build)
Copyright (C) 2002-12 by Bruce Allen, http://smartmontools.sourceforge.net

Vendor:               /1:0:0:0
Product:              
User Capacity:        600,332,565,813,390,450 bytes [600 PB]
Logical block size:   774843950 bytes
>> Terminate command early due to bad response to IEC mode page

ce qui est clairement faux. Cependant:

root@samsung-romano:/home/romano# fdisk -b 512 -C 970 -H 256 -S 63 /dev/sdb
fdisk: unable to read /dev/sdb: Input/output error

(Données SSD de http://ubuntuforums.org/showthread.php?t=1935699&p=11739579#post11739579 ).

PENSÉE SUPPLÉMENTAIRE:

Tout cela pourrait-il être un effet secondaire de la technologie Intel Smart Response non désactivée avant l'installation de Linux? Si oui, comment puis-je le vérifier avant de réinstaller une fenêtre sur la machine? Ou c'est un coup dans le noir? (Dans le bios, le disque SSD ne s'affiche pas et il n'y a rien sur Intel SRT).

À PROPOS DU MARQUAGE COMME DUPLICAT:

J'ai changé le titre de la question; Je ne pense pas que la question liée réponde à mon problème. Je sais positivement que le SSD échoue. Je demande s'il est possible de dire au noyau Linux de ne pas sonder du tout.


2
Si le disque que vous souhaitez masquer est "sdb", pourriez-vous s'il vous plaît publier la sortie complète de "udevadm info -a -n / dev / sdb"?.
Roman Raguet

1
Ce n'est pas du tout un double de la question liée. Pourriez-vous s'il vous plaît le décocher comme doublon? J'ai changé le titre pour mieux transmettre la question. Il ne s'agit pas d'une vérification SSD, il s'agit d'une question générale sur la gestion des disques sous Linux. Merci!
Rmano

1
Quel est le problème avec juste ... débrancher le disque?
Braiam


3
Braiam: le disque SSD est soudé à la carte mère.
Rmano

Réponses:


14

Deux solutions ici: l'une est rapide à appliquer, bien qu'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 (à trouver sur le site d'échange de pile Unix / Linux ) qui cache complètement le lecteur.

Mise à jour 1 Le patch est désormais 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 .

Mise à jour 2 Le correctif est dans le noyau standard pour Ubuntu Trusty Thar 14.04; maintenant, seul l'ajout suivant au paramètre de démarrage est nécessaire.

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

Pour ajouter un paramètre du noyau (bot temporairement et définitivement), vous pouvez vérifier cette Q&R: Comment ajouter un paramètre de démarrage du noyau?

solution de contournement

Au moins, le problème d'activation de la suspension-reprise a été résolu par Emmanuel, utilisateur d'Unix StackExchange, dans /unix//a/103742/52205 . En tant que root, exécutez la commande:

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

avant de suspendre.

Pour le rendre permanent, ajoutez le fichier suivant /etc/pm/sleep.d/et rendez-le exécutable:

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

avec contenu:

#!/bin/sh

# Delete the failing disk so that it will not block suspend

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

... et maintenant le système se suspend (et reprend) correctement.


1
Merci de l'avoir rappelé /sys/block/*/device/delete.
Michael Shigorin

@kikuto --- votre modification proposée semblait un peu hors sujet, mais j'ai ajouté un lien vers la façon d'ajouter un paramètre de démarrage du noyau. Je vous remercie.
Rmano

5

Vous pouvez essayer de créer la règle udev avec les informations suivantes (sortie de udevadm info -a -n / dev / sdb).

INFO:

looking at parent device '/devices/pci0000:00/0000:00:1f.2/ata2/host1/target1:0:0/1:0:0:0':
    KERNELS=="1:0:0:0"
    SUBSYSTEMS=="scsi"
    DRIVERS=="sd"
    ATTRS{rev}=="SSD "
    ATTRS{type}=="0"
    ATTRS{scsi_level}=="6"
    ATTRS{model}=="SanDisk iSSD P4 "
    ATTRS{state}=="running"
    ATTRS{queue_type}=="none"
    ATTRS{iodone_cnt}=="0x309"
    ATTRS{iorequest_cnt}=="0x30a"
    ATTRS{queue_ramp_up_period}=="120000"
    ATTRS{timeout}=="30"
    ATTRS{evt_media_change}=="0"
    ATTRS{ioerr_cnt}=="0x1d6"
    ATTRS{queue_depth}=="1"
    ATTRS{vendor}=="ATA     "
    ATTRS{device_blocked}=="0"
    ATTRS{iocounterbits}=="32"

1) Créez la règle udev.

  • sudo nano /etc/udev/rules.d/99-hide-ssd.rules

Vous pouvez essayer de faire correspondre les clés "SUBSYSTEMS " & "DRIVERS" et les attributs "ATTRS {rev}" & ATTRS {model} , puis affecter la variable "UDISKS" pour l'ignorer.

Le contenu du fichier 99-hide-ssd.rules serait:

SOUS-SYSTÈMES == "scsi", DRIVERS == "sd", ATTRS {rev} == "SSD", ATTRS {model} == "SanDisk iSSD P4", ENV {UDISKS_IGNORE} = "1"

Pour enregistrer les modifications dans nano ... Ctrl+ O, puis Enteret enfin Ctrl+ X.

2) Enfin rafraîchissez les règles udev avec:

  • sudo udevadm trigger

REMARQUE: Avec ENV {UDISKS_IGNORE} = "1", il ignorera le disque pour Ubuntu 12.10 & 13.04.
Pour Ubuntu 12.04, la variable serait ENV {UDISKS_PRESENTATION_HIDE} = "1" .

J'espère que cela t'aides.


J'ai essayé, toujours sdb est détecté au démarrage (et le retarde). Je pense que devrait être une option de paramètre de ligne du noyau, mais je n'ai rien trouvé ... soupir. Merci quand même.
Rmano

@Rmano ... Si vous essayez de faire correspondre uniquement la clé du noyau?. la règle serait KERNEL == "sdb", ENV {UDISKS_IGNORE} = "1" ... pour voir si le disque est détecté dans udev.
Roman Raguet

Je sais que c'était il y a longtemps. mais ce problème est toujours sans réponse ... aucune des suggestions n'a fonctionné. Merci à tous de toute façon.
Rmano

2

/server/112147/tell-ubuntu-to-ignore-dead-hard-drive-during-booting suggère en partie:

En tant que root, ouvrez /etc/udev/rules.d/60-persistent-storage.rules avec votre éditeur de texte préféré.

Quelques lignes plus loin, vous verrez probablement une ligne qui ressemble à ceci:

ignorer les règles pour les périphériques bloqués inappropriés

KERNEL == "ram * | loop * | fd * | nbd * | gnbd * | dm- | md ", GOTO = "persistent_storage_end" Add "sdb *" à cette deuxième ligne, donc cela ressemble à ceci:

KERNEL == "ram * | loop * | fd * | nbd * | gnbd * | dm- | md | sdb *", GOTO = "persistent_storage_end"

Enregistrez, redémarrez et peut-être que cela fonctionne. Sinon, eh bien, est-ce la post-garantie?


J'ai essayé, pas de chance. Ayez toujours le lecteur sdb, bloquant toujours la suspension. Il était une fois une option de ligne de commande du noyau sdb = ignore ... Et malheureusement oui, c'est une post-garantie.
Rmano

BTW, je n'avais pas ce fichier, alors je l'ai ajouté ...
Rmano

2

Si vos autres disques n'utilisent pas ahci, ou ne sont pas SSD, vous pouvez supprimer le pilote du noyau pour eux.

à supprimer pour cette session (jusqu'au prochain redémarrage), exécutez:

sudo rmmod ahci

pour le recharger, lancez:

sudo modprobe ahci

si vous voyez que tout va bien, vous pouvez maintenant le désactiver totalement (ne le chargez pas au prochain démarrage). ouvrez le fichier /etc/modprobe.d/blacklist.conf et ajoutez la ligne suivante:

blacklist ahci 

pour mettre les pilotes ssd sur liste noire, remplacez simplement ahci par sd


2
Cela me laissera un système sans disque ... le lecteur principal est ata1allumé, le SSD défaillant allumé ata2. La désactivation du mode ahci dans le bios rend le système non
démarrable

1

D'après ce que je sais, il n'y a aucun moyen de supprimer le message, à part retirer votre SSD.


Malheureusement, le SSD est (pour ce que je sais) soudé à la carte mère. C'est juste une puce 8G.
Rmano

Couper une des leds sur la puce, trouver de préférence la ligne + 5V et la couper avec un X-Acto?
K7AAY

... si je savais seulement ce qu'est une puce et où elle se trouve. Ensuite, je crains que cela puisse créer encore plus de problèmes (non piloté à trois états ...).
Rmano

1

Je suis allé et j'ai écrit un correctif pour le noyau 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).

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.