Wie kann ich den Linux-Kernel anweisen, eine Festplatte vollständig zu ignorieren, als wäre sie nicht einmal verbunden?

18

Beachten

Bitte scrollen Sie nach unten, um die Antwort zu erhalten (sie hat nur wenige Punkte, ist aber die richtige). Das Problem wird durch einen Patch behoben, der ab Kernel 3.12.7 verfügbar ist. Ich hoffe, es wird auch auf frühere zurückportiert.

Mein Laptop ist eine Samsung Chronos Serie 7. Ubuntu Gnome Remix 13.04, mit Intel aktualisierten Treibern.

Ich habe ein Problem mit dem internen SSD-Laufwerk (Kapazität 8G). Es schlägt mit COMRESET und Eingabe- / Ausgabefehlern fehl. Ich bin ziemlich überzeugt, dass das Problem Hardware ist; Leider habe ich kein Windows auf dem Laptop installiert, um zu überprüfen, ob es sich um eine SSD-Konfiguration handelt oder was auch immer.

Das Problem ist, dass die Festplatte von udev erkannt wird:

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

und danach scheitert es bei vielen Überprüfungen, verzögert das Booten, verzögert das Herunterfahren und macht (ich denke) das Anhalten unmöglich.

Kann Linux angewiesen werden, irgendetwas auf dem ata2-Link vollständig zu ignorieren? Ich habe versucht, diese Zeile zu /etc/udev/rules.d/10-local.rules hinzuzufügen

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

aber es geht nicht.

Andererseits, wenn jemand weiß, wie man die SSD zurücksetzt, wenn sie im "Cache" -Modus belassen wurde, ohne Windows zu verwenden ... oder um ein "Live" -Fenster zu booten, um dasselbe zu tun ...

Vielen Dank!

Daten hinzugefügt:

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

WEITERE GEDANKEN:

Könnte dies alles ein Nebeneffekt sein, wenn die Intel Smart Response-Technologie vor der Installation von Linux nicht deaktiviert wird? Wenn ja, wie kann ich überprüfen, ob Windows nicht neu auf dem Computer installiert wurde? Oder ist das ein Schuss in die Dunkelheit? (Im BIOS wird das SSD-Laufwerk nicht angezeigt und es gibt nichts über Intel SRT).

ÜBER DAS KENNZEICHNEN ALS DUPLIKAT:

Ich habe den Titel der Frage geändert. Ich denke nicht, dass die verknüpfte Frage mein Problem beantwortet. Ich weiß definitiv , dass die SSD ausfällt. Ich frage, ob es möglich ist, den Linux-Kernel anzuweisen, überhaupt nicht danach zu suchen.

Rmano
quelle
2
Wenn der Datenträger, den Sie ausblenden möchten, "sdb" ist, können Sie die vollständige Ausgabe von "udevadm info -a -n / dev / sdb" posten.
Roman Raguet
1
Dies ist überhaupt kein Duplikat der verknüpften Frage. Könnten Sie bitte die Markierung als Duplikat aufheben? Ich habe den Titel geändert, um die Frage besser zu vermitteln. Geht es nicht um eine SSD-Prüfung, geht es um eine allgemeine Frage zur Datenträgerverwaltung unter Linux. Vielen Dank!
Rmano
1
Was ist das Problem, wenn Sie nur ... die Festplatte herausziehen?
Braiam
1
Ähnliche Frage zum Super User: Wie deaktiviere ich die Kernelprüfung für das Laufwerk?
ændrük
3
Braiam: Die SSD-Platte ist mit dem Mainboard verlötet .
Rmano

Antworten:

14

Hier gibt es zwei Lösungen: Die eine ist schnell anzuwenden, löst das Problem jedoch nur teilweise, die andere ist vollständig, Sie müssen jedoch Ihren eigenen Kernel kompilieren.

Die richtige Antwort ist ein Kernel-Patch.

Robin H. Johnson hat einen Patch für den SATA-Kerneltreiber geschrieben ( auf der Unix / Linux-Stack-Exchange-Site ), der das Laufwerk vollständig verbirgt.

Update 1 Der Patch ist jetzt upstream (mindestens in 3.12.7 Stable-Kernel), siehe das Git-Repository . Ich habe im Ubuntu-Launchpad nach einem Backport gefragt .

Update 2 Der Patch ist im Standard-Kernel für Ubuntu Trusty Thar 14.04 enthalten. Daher wird jetzt nur der folgende Zusatz zum Boot-Parameter benötigt.

Sobald der Patch installiert ist, wird er hinzugefügt

 libata.force=2.00:disable

Wenn Sie auf die Kernel-Boot-Parameter klicken, wird der Datenträger vor dem Linux-Kernel verborgen. Überprüfen Sie nochmals, ob die Nummer korrekt ist. Das Suchen nach dem Gerätenamen kann helfen:

(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

Um einen Kernel-Parameter hinzuzufügen (vorübergehend und dauerhaft), können Sie diese Fragen und Antworten prüfen: Wie füge ich einen Kernel-Boot-Parameter hinzu?

Umgehung

Zumindest das Problem der Aktivierung von Suspend-Resume wurde vom Unix StackExchange-Benutzer Emmanuel unter /unix//a/103742/52205 gelöst . Geben Sie als root den folgenden Befehl ein:

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

vor dem Suspendieren.

Um es dauerhaft zu machen, fügen Sie die folgende Datei hinzu /etc/pm/sleep.d/und machen Sie es ausführbar:

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

mit Inhalt:

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

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

Rmano
quelle
1
Vielen Dank für Ihre Erinnerung /sys/block/*/device/delete.
Michael Shigorin
@kikuto --- Ihre vorgeschlagene Änderung schien ein wenig vom Thema abzulenken, aber ich habe einen Link zum Hinzufügen eines Kernel-Boot-Parameters hinzugefügt. Vielen Dank.
Rmano
5

Sie können versuchen, die udev-Regel mit den folgenden Informationen zu erstellen (Ausgabe von 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) Erstellen Sie die udev-Regel.

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

Sie können versuchen, die Schlüssel "SUBSYSTEMS" und "DRIVERS" sowie die Attribute "ATTRS {rev}" und ATTRS {model} " zuzuordnen, und anschließend die Variable " UDISKS " zuweisen , um sie zu ignorieren.

Der Inhalt der Datei 99-hide-ssd.rules wäre:

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

Um die Änderungen in Nano zu speichern ... Ctrl+ O, dann Enterund schließlich Ctrl+ X.

2) Aktualisieren Sie abschließend die udev-Regeln mit:

  • sudo udevadm trigger

HINWEIS: Mit ENV {UDISKS_IGNORE} = "1" wird die Festplatte für Ubuntu 12.10 und 13.04 ignoriert.
Für Ubuntu 12.04 wäre die Variable ENV {UDISKS_PRESENTATION_HIDE} = "1" .

Hoffe das hilft.

Roman Raguet
quelle
Versuchte es, noch SDB wird beim Booten erkannt (und verzögert es). Ich denke, es sollte eine Option für Kernel-Linienparameter geben, aber ich konnte nichts finden ... seufz. Danke trotzdem.
Rmano
@Rmano ... Wenn Sie versuchen, nur den Kernel-Schlüssel zu finden ?. Die Regel wäre KERNEL == "sdb", ENV {UDISKS_IGNORE} = "1" ... um zu sehen, ob die Festplatte in udev erkannt wird.
Roman Raguet
Ich weiß, dass es viel Zeit her ist. aber dieses problem ist immer noch ohne antwort ... keiner der vorschläge hat funktioniert. Trotzdem vielen Dank an alle.
Rmano
2

/server/112147/tell-ubuntu-to-ignore-dead-hard-drive-during-booting schlägt zum Teil vor:

Öffnen Sie als Root /etc/udev/rules.d/60-persistent-storage.rules mit Ihrem bevorzugten Texteditor.

Ein paar Zeilen weiter sehen Sie wahrscheinlich eine Zeile, die so aussieht:

Überspringen Sie Regeln für unangemessene Blockgeräte

KERNEL == "ram * | loop * | fd * | nbd * | gnbd * | dm- | md ", GOTO = "persistent_storage_end" Füge "sdb *" zu dieser zweiten Zeile hinzu, so dass es so aussieht:

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

Speichern, neu starten und vielleicht funktioniert es. Wenn nicht, ist dies eine Nachgarantie?

K7AAY
quelle
Versuchte es, kein Glück. Habe immer noch das sdb Laufwerk und blockiere immer noch den Suspend. Es war einmal eine Befehlszeilenoption sdb = ignore kernel ... Und leider ja, es handelt sich um eine Nachgarantie.
Rmano
Übrigens, ich hatte diese Datei nicht, also habe ich sie hinzugefügt ...
Rmano
2

Wenn Ihre anderen Festplatten nicht ahci oder keine SSD verwenden, können Sie den Kerneltreiber für sie entfernen.

Führen Sie zum Entfernen für diese Sitzung (bis zum nächsten Neustart) Folgendes aus:

sudo rmmod ahci

Um es neu zu laden, führen Sie Folgendes aus:

sudo modprobe ahci

Wenn Sie sehen, dass alles in Ordnung ist, können Sie es jetzt vollständig deaktivieren (laden Sie es nicht beim nächsten Start). Öffnen Sie die Datei /etc/modprobe.d/blacklist.conf und fügen Sie die folgende Zeile hinzu:

blacklist ahci 

auf schwarze Liste ssd Treiber, ersetzen Sie einfach ahci mit sd

Ohad Cohen
quelle
2
Das wird mir ein System ohne Festplatte hinterlassen ... das Hauptlaufwerk ist eingeschaltet ata1, die fehlerhafte SSD ist eingeschaltet ata2. Das Deaktivieren des Ahci-Modus im BIOS macht das System nicht mehr startfähig ...
Rmano
1

Soweit ich weiß, gibt es keine andere Möglichkeit, die Nachricht zu entfernen, als Ihre SSD zu entfernen.

Anudeep Revuri
quelle
Leider ist die SSD (soweit ich weiß) mit dem Mainboard verlötet. Es ist nur ein 8G-Chip.
Rmano
Schneiden Sie eine der LEDs auf dem Chip, suchen Sie am besten die + 5V-Leitung und schneiden Sie diese mit einem X-Acto?
K7AAY
... wenn ich nur wüsste, welcher Chip wo ist. Dann fürchte ich, dass das noch mehr Probleme verursachen könnte (ungesteuerte Drei-Staaten ...).
Rmano
1

Ich habe einen Kernel-Patch für Sie geschrieben, der die Möglichkeit implementiert, eine einzelne Festplatte beim Booten zu deaktivieren, damit Sie sich nicht mit der Deaktivierung in udev oder dem Warten beim ersten Booten befassen müssen.

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

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

robbat2
quelle