Wie kann man Linux Kernel> 3.0 anweisen, eine fehlerhafte Festplatte vollständig zu ignorieren?

23

Ich habe einen Samsung-Laptop (Chronos s7) mit einer SATA-Festplatte am Bus ata:1, die als /dev/sda8G-SSD erkannt ata:2wird /dev/sdb, und verschiedene andere Geräte an der restlichen SATA-Schnittstelle.

Das Problem ist, dass die SSD-Platte ist

  • mit der Hauptplatine verlötet (unbeweglich)
  • kaputt (es gibt nur I / O-Fehler für jede Operation)
  • es erscheint nicht im BIOS (wahrscheinlich, weil es kaputt ist)

Nun diese Scheibe:

  • verzögert den Startvorgang um drei bis fünf Minuten beim Versuch, die fehlerhafte Festplatte zu untersuchen, was ärgerlich ist;
  • Am ärgerlichsten ist jedoch, dass das System aufgrund eines /dev/sdbFehlers nicht angehalten werden kann .

Beachten Sie, dass ich mit der Verzögerung beim Booten leben kann - was mich beunruhigt, ist die Sache mit dem Fortsetzen / Anhalten.


Die Frage ist also: Kann ich dem Kernel mitteilen, dass er das Gerät nicht einmal auf ata: 2 testen soll?

In einem älteren Kernel (<3.0) gab es, als ich noch ein bisschen in die Quelle graben konnte, einen Befehlszeilenparameter des Stils hdb=ignore, der den Trick getan hätte.

Ich habe alle unten vorgeschlagenen Tricks mit udevund libata:forceKernel-Parametern ausprobiert , ohne Erfolg. Im Einzelnen funktioniert Folgendes nicht:

  1. Hinzufügen /etc/udev/rules.d/einer Datei zu einer der folgenden Dateien (bei vorzeitiger Ausführung wie 00-ignoredisk.rulesoder zu einem späteren Zeitpunkt 99-ignoredisk.rulesoder an beiden Stellen)

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

    Noch

    KERNEL=="sdb", ENV{UDISKS_IGNORE}="1"
    

    Weder viele Zwischenlösungen - Dadurch kann auf die Festplatte nach dem Start nicht zugegriffen werden, sie wird jedoch beim Start geprüft und beim Anhalten immer noch überprüft - was dazu führt, dass das Anhalten fehlschlägt.

  2. Ändern der Systemdateien /lib/udev/rules.d/60-persistent-storage.rules(und udisks, udisks2)

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

    zu

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

    Auch hier hat dies einige Auswirkungen, da die Festplatte vor dem Benutzerbereich maskiert wird, die Festplatte jedoch weiterhin für den Kernel sichtbar ist.

  3. Boote mit allen möglichen Kombinationen (na ja, viele von ihnen) des libata:forceParameters (zB gefunden hier , um zu deaktivieren DMA, niedriger Geschwindigkeit oder was auch immer wegen der fehlerhaften Festplatte) --- funktioniert nicht. Der Parameter wird verwendet, aber der Datenträger wird noch geprüft und fällt aus.

    Vollständig udevadm info -a -n /dev/sdbeingefügt an http://paste.ubuntu.com/6186145/

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

    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
    

    was eindeutig falsch ist. Dennoch:

    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
    

(SSD-Daten von http://ubuntuforums.org/showthread.php?t=1935699&p=11739579#post11739579 ).

Rmano
quelle
Entschuldigung, wenn dies zu offensichtlich ist, aber da Sie in Ihrer Frage nicht berücksichtigt haben: Haben Sie sichergestellt, dass der Gerätename oder die UUID nicht in aufgeführt sind /etc/fstab? Denn die Verzögerung beim Booten könnte früher durch den Kernel oder udev verursacht werden, was anscheinend der Fall ist, aber auch später durch fsck beim Lesen fstab.
Teresa e Junior
Ja, in Systemdateien wird / dev / sdb (oder seine Partitionen) nicht erwähnt. Die Verzögerung ist noch vor dem Start von init ... es befindet sich in einem kthread (da der Startvorgang parallel fortgesetzt wird), aber auf einer grundlegenderen Ebene. Aber eigentlich ist die Startverzögerung das kleinere Problem - wenn ich die Festplatte nur während des Suspend / Resume ignorieren könnte, so dass Suspend funktioniert, bin ich glücklich. (Danke trotzdem).
Rmano
Verwenden Sie in initrd? wenn ja wessen?
Hildred
@hildred: Ich verwende Stock Kernel und Initramfs von Ubuntu 13.04. Ich kann AHCI oder alle SATA dort deaktivieren, aber dann ist mein System tot - überhaupt keine Festplatten.
Rmano
Debian (und Umbutu) kompilieren das ata-Subsystem als Modul. Haben Sie versucht, Parameter für das Modul festzulegen, wenn es von der initrd geladen wird?
Hildred

Antworten:

26

libatahat überhaupt keine Noprobe-Option; das war eine alte IDE-Option ...

Aber ich habe einen Kernel- Patch für Sie geschrieben, der ihn implementiert. Es sollte sich sehr leicht auf viele Kernel anwenden lassen (die Zeile darüber wurde 2013-05-21 / v3.10-rc1 * hinzugefügt, kann aber ohne diese Zeile sicher manuell angewendet werden).

Update Der Patch ist jetzt upstream (zumindest in 3.12.7 Stable Kernel). Es ist im Standard-Kernel enthalten, der mit Ubuntu 14.04 (das auf 3.13-stable basiert) ausgeliefert wird.

Sobald der Patch installiert ist, wird er hinzugefügt

 libata.force=2.00:disable

Wenn Sie auf die Kernel-Boot-Parameter klicken, wird die Festplatte vor dem Linux-Kernel verborgen. Überprüfen Sie nochmals, ob die Nummer korrekt ist. Das Suchen nach dem Gerätenamen kann hilfreich sein (natürlich müssen Sie die Kernelmeldungen überprüfen, bevor Sie die Boot-Parameter hinzufügen):

(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

Die wichtige Nummer ist die ata2.00in der ersten Zeile oben.

robbat2
quelle
Vielen Dank. Ich werde versuchen, es zu überprüfen, sobald ich weiß, wie ich einen Kernel auf meinem Ubuntu kompilieren und installieren kann. Leider habe ich eine sehr komplexe Woche vor
mir
1
+1 Es ist eindeutig besser als der Trick, den ich gepostet habe. Ich hoffe es wird offiziell.
Emmanuel
1
Ok, habe den Patch getestet. Es klappt. Wenn Sie es upstream pushen müssen, kann ich mein Tested-by: zum Patch hinzufügen --- Sie haben meine wahre E-Mail in meinem Profil. Ich habe es installiert, indem ich (mit Macken) die Anweisungen in wiki.ubuntu.com/Kernel/BuildYourOwnKernel befolgt habe .
Rmano
1
@ illuminÉ --- habe gerade die Antwort in diesem Sinne bearbeitet --- warte darauf, dass sie genehmigt wird.
Rmano
1
Ein weiterer Grund, GENTOO ZU LIEBEN !!
Eyoung100
15

Hardwareprobleme haben physikalische Hardwarelösungen. Haben Sie darüber nachgedacht, die Stromversorgung des Laufwerks zu lösen oder zu unterbrechen?

BEARBEITEN: Ok, wenn dies keine Option ist, wird dies zuvor zum Hot-Pluging einer Festplatte verwendet. Damit können Sie Ihr Laufwerk deaktivieren.

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

Beachten Sie, dass jeder andere Prozess einen Scan des SATA-Busses erzwingen und ihn dann zurücksetzen kann. Versuchen Sie dies, bevor Sie den Laptop in den Ruhezustand versetzen.

Bearbeitet von OP: es hat funktioniert . Ich habe die folgende Datei hinzugefügt:

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

mit Inhalt:

#!/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

... und jetzt wird das System korrekt angehalten (und fortgesetzt).

Emmanuel
quelle
1
Wenn es nur wahr wäre. Ich kann nicht einmal sagen, welcher Chip (oder welche Chips) das SSD-Laufwerk ist - die meisten sind unmarkiert. Und das Ausschalten eines Chips ist nicht sicher - was ist mit nicht angesteuerten Drei-Zustands-Pins? Ich öffnete den Laptop und hoffte, dass das SSD-Laufwerk mit einer Art Tochterplatine verbunden war. Kein Glück. (Und außerdem besteht die größte Schwierigkeit beim Schreiben von Kerneltreibern darin, schlecht entworfene Hardware zu umgehen.)
Rmano
@Rmano Wie wird der Trick "Löschen" ausgeführt?
Emmanuel
ES FUNKTIONIERT --- Ich kann nach dem "Löschen" -Trick aussetzen. Vielen Dank. (Es verzögert immer noch den Start, aber gut - kein Problem).
Rmano
Vielen Dank für die Erinnerung delete.
Michael Shigorin
3

BIOS

Wird dieses Gerät in keiner Weise über Ihr BIOS angezeigt?

Oft werden Festplatten in einem "Auto" -Modus konfiguriert. Ich überprüfe, ob diese Geräte in einem deaktivierten Zustand sind, und aktiviere sogar explizit nur eine Festplatte und deaktiviere alles andere.

Kernel-Boot-Optionen

Oft können Sie verschiedene Subsysteme deaktivieren, damit sie vom bootenden Linux-Kernel nicht automatisch erkannt werden, indem Sie verschiedene Boot-Optionen verwenden, die als Switches an ihn übergeben werden können.

Die meisten, wenn nicht alle Optionen sind hier aufgelistet:

Linux in aller Kürze

Möglicherweise möchten Sie das O'Reilly-Buch Linux Kernel in Kürze lesen , insbesondere Kapitel 7: Anpassen eines Kernels .

Dieses Buch wird von seinem Autor Greg Kroah-Hartman auf seiner persönlichen Website kostenlos zur Verfügung gestellt. Das gesamte Buch kann ebenfalls heruntergeladen werden.

slm
quelle
Nein, das BIOS hat keine Spur von dieser Festplatte. Ich kann die Festplatte und die DVD sehen und nicht mehr. Bevor dies fehlschlug, wurde es in Windows (jetzt gibt es keine Fenster mehr im System) als Beschleunigungscache für die Hauptfestplatte verwendet. Ich habe versucht, den AHCI-Modus auf "Legacy", "Off", "Yes" oder "Auto" (für alle Festplatten) zu setzen, aber das hat nichts geändert oder (für "Off") das System einfach nicht gebootet.
Rmano
Die andere Methode, die ich in der Vergangenheit verwendet habe, ist, wenn der Kernel bootet, um es über Grub (Kernel-Boot-Optionen) mitzuteilen noide=..... Es gibt eine Vielzahl weiterer Optionen, die Sie dem Boot-Kernel zur Verfügung stellen können, um die automatische Erkennung von Hardware zu deaktivieren.
slm
Die Festplatte ist SATA (SCSI), keine IDE. Und die hdb=noprobeOptionen wurden noch nicht an SCSI übergeben (ich glaube, sie wurden um 2.6.x entfernt), so dass es keine Option sdb=noprobeoder gibt (sobald ich weiß) ata:2=noprobe. Ich habe (fast) die gesamte kernel-parameters.txtDatei in der Kernelquelle gelesen und kann den richtigen Parameter nicht finden. Wenn Sie jemanden kennen, sagen Sie es bitte in einer Antwort --- Ich werde wirklich dankbar sein.
Rmano
@Rmano - Ich muss mehr graben, um es zu finden. Ich erinnere mich an verschiedene Optionen im Zusammenhang mit der Festplatten- und Buserkennung, aber nicht über den Kopf.
slm
@ Rmano - was ist mit der Option:libata.dma=
slm
0

Linux-Methode zum Überprüfen der Sperre: sudo hdparm -I /dev/sdX(mit X = a..z; Sie müssen natürlich wissen, auf welchem ​​Gerät sich Ihr Laufwerk befindet). Am Ende der (großen) ausgegeben, müssen Sie sich bei in den letzten 10 Zeilen zu lesen: *not* locked.

Syntax-Fehler
quelle