web-dev-qa-db-fra.com

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

Remarque

s'il vous plaît faites défiler vers le bas pour la réponse (il y a peu de points mais c'est le bon). Le problème est résolu par un correctif qui sera dans le noyau 3.12.7 et supérieur; J'espère que cela sera rétroprojecté sur les précédents.

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

J'ai un problème avec le lecteur SSD interne (capacité 8G). Il échoue avec COMRESET et des erreurs d’entrée/sortie. Je suis tout à fait convaincu que le problème est matériel; Malheureusement, Windows n’est pas installé sur l’ordinateur portable pour vérifier s’il s’agit d’une 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 nombreuses vérifications, retardant le démarrage, retardant l’arrêt et rendant (je pense) impossible la suspension.

Est-il possible de dire à Linux de complètement ignorer 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'autre part, 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 "en direct" pour faire de même ...

Merci!

Données ajoutées:

Full udevadm info -a -n /dev/sdb collé à 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. Néanmoins:

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 ).

PENSEE SUPPLEMENTAIRE:

Est-ce que tout cela pourrait être un effet secondaire de la non-désactivation de la technologie Intel Smart Response 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 lecteur SSD ne s'affiche pas et il n'y a rien sur Intel SRT).

À PROPOS DU MARQUAGE EN DOUBLE:

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 disque SSD est en panne. Je demande s'il est possible de dire au noyau Linux de ne pas le rechercher du tout.

17
Rmano

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

La bonne réponse est un correctif de noyau.

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

Update 1 Le correctif est maintenant en amont (au moins dans le noyau 3.12.7 stable), voir le référentiel git . J'ai demandé backport dans le tableau de bord Ubunt .

Update 2 Le correctif est dans le noyau standard pour Ubuntu Trusty Thar 14.04; alors maintenant, seul le paramètre suivant au paramètre de démarrage est nécessaire.

Une fois le patch installé, ajoutez

 libata.force=2.00:disable

les paramètres de démarrage du noyau masqueront le disque du noyau Linux. Vérifiez que le nombre 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 de noyau (temporairement et définitivement), vous pouvez vérifier les questions suivantes: Comment puis-je ajouter un paramètre de démarrage du noyau?

Workaround

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

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

avant de suspendre.

Pour le rendre permanent, ajoutez le fichier suivant dans /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 est suspendu (et repris) correctement.

13
Rmano

Vous pouvez essayer de créer la règle udev avec les informations suivantes (sortie de l'info udevadm -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 "SOUS-SYSTÈMES" & "DRIVERS", et "ATTRS {rev}" & ATTRS { modèle} attributs, puis affectez la variable "UDISKS" à l’ignorer.

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

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

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

2) Enfin, actualisez les règles udev avec:

  • Sudo udevadm trigger

NOTE: Avec le 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.

5
Roman Raguet

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

pour 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 lors du prochain démarrage). ouvrez le fichier / etc/modprobe.d/blacklist.conf et ajoutez la ligne suivante:

blacklist ahci 

pour mettre les pilotes SSD en liste noire, il suffit de remplacer ahci par sd

2
Ohad Cohen

https://serverfault.com/questions/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 bas, vous verrez probablement une ligne qui ressemble à ceci:

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

KERNEL == "ram * | boucle * | fd * | nbd * | gnbd * | dm - | md ", GOTO = "persistent_storage_end " Ajoutez" sdb * "à cette seconde ligne, ainsi il ressemble à ceci:

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

Enregistrez, redémarrez et peut-être que ça marche. Si non, eh bien, est-ce post-garantie?

2
K7AAY

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

1
Anudeep Revuri

Je suis allé écrire un correctif de noyau pour vous qui implémente la possibilité de désactiver un seul disque au démarrage, de sorte 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 très facilement à de nombreux noyaux (la ligne au-dessus a été ajoutée le 2013-05-21/v3.10-rc1 *, mais peut être appliquée manuellement et en toute sécurité sans cette ligne).

1
robbat2