Wie deaktiviere ich die Kernelprüfung für das Laufwerk?

9

Ich habe Samsung Laptop mit 30 GB ExpressCache SanDisk SSD auf Mainbord gelötet. SSD ist gestorben (gibt Unmengen von Fehlern, wenn ich versuche, irgendwie darauf zuzugreifen), aber es wird immer noch beim Kernel-Boot geprüft, ich sehe seine Partition, Ubuntus Einheit zeigt das Symbol für das nicht gemountete Laufwerk in der App-Schublade und am schlimmsten ist, dass ich den Laptop nicht aussetzen kann , weil das Senden des Suspend-Befehls an das SSD-Gerät fehlschlägt. Ich habe versucht, den Kernel-Parameter sdb = noprobe zu übergeben, aber es sieht so aus, als ob er im 3.8.0-Kernel (Ubuntu 13.04) längst veraltet ist. Wie kann ich das SATA-Gerät in den letzten Kerneln deaktivieren?

Sergey Melekhin
quelle

Antworten:

1

Zwei Lösungen hier: Eine ist schnell anzuwenden, obwohl das Problem nur teilweise gelöst wird, die andere ist die vollständige, erfordert jedoch, dass Sie Ihren eigenen Kernel kompilieren.

Die richtige Antwort ist ein Kernel-Patch.

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

Update Der Patch ist jetzt Upstream (zumindest im stabilen 3.12.7-Kernel), siehe Git-Repository . Ich habe im Ubuntu-Launchpad nach einem Backport gefragt .

Sobald der Patch installiert ist, fügen Sie hinzu

 libata.force=2.00:disable

Durch die Boot-Parameter des Kernels wird die Festplatte vor dem Linux-Kernel ausgeblendet. Überprüfen Sie noch einmal, ob die Nummer korrekt ist. Die Suche 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

Problemumgehung

Beantwortet von Unix StackExchange-Benutzer Emmanuel unter /unix//a/103742/52205

Sie können das Suspend-Problem zumindest lösen, indem Sie den Befehl ausgeben

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

vor dem Suspendieren.

Um es zu automatisieren, habe ich die folgende Datei hinzugefügt: (Beachten Sie die Flags, es muss ausführbar sein)

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

im Verzeichnis /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

... und jetzt wird das System korrekt angehalten (und fortgesetzt). Ich habe das Snippet hinzugefügt

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

zu /etc/rc.localauch für eine gute Maßnahme.

Rmano
quelle
Danke @Rmano, Echo Zeug hat funktioniert. Es ist jedoch unklar, wo ich eine 99_delete_sdbausführbare Datei ablegen soll. In /etc/rc0.d/vielleicht?
Sergey Melekhin
Entschuldigung --- hat die relevanten Informationen hinzugefügt.
Rmano
5

Ich habe einen Kernel-Patch für Sie geschrieben, der die Möglichkeit implementiert, eine einzelne Festplatte beim Booten zu deaktivieren, sodass Sie sich nicht darum kümmern müssen, sie in udev zu deaktivieren oder beim ersten Start zu warten.

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

Sollte sehr einfach auf viele Kernel angewendet werden können (die Zeile darüber wurde hinzugefügt 2013-05-21 / v3.10-rc1 *, kann aber ohne diese Zeile sicher manuell angewendet werden).

robbat2
quelle
1
Danke für Ihr Bemühen. Vielleicht können Sie kommentieren (für diejenigen, die mit Kernel-Patches nicht so vertraut sind), wie man den Patch anwendet und wie man ihn verwendet (wahrscheinlich sdb=disableals Kernel-Parameter).
Mpy
1
kernel.org/doc/Documentation/applying-patches.txt behandelt das Anwenden von Kernel-Patches im Allgemeinen, aber viele Distributionen haben spezielle Methoden zum Anwenden von Patches. Dieser Patch implementiert insbesondere ein Force-Flag zum Deaktivieren für Libata. Der Benutzer muss es mit libata.force = ID verwenden: Deaktivieren Sie, wobei ID eine Nummer oder ein Zahlentupel ist, das das betreffende Laufwerk identifiziert.
Robbat2
Ich weiß nicht, ob diese Anweisungen: wiki.ubuntu.com/Kernel/BuildYourOwnKernel aktuell sind. Ich werde versuchen, wenn ich kann diese Woche ...
Rmano
Übrigens sollte der Befehl beim Samsung-Laptop wahrscheinlich "libata.force = 2.00: disable" lauten ( grep iSSD /var/log/syslogsollte Ihnen einen Hinweis geben).
Rmano
1
Zu Ihrer Information, es wird mit dem Kernel für 3.13 sowie dem stabilen Kernelbaum zusammengeführt. Die nodisable Option wurde jedoch NICHT akzeptiert.
Robbat2
0

Ich habe dies untersucht und eine Lösung gefunden, die unter Ubuntu recht einfach implementiert werden kann. Die Distribution verwendet kmod, daher sollte das Folgende für diese und jede Distribution, die kmod verwendet, gut funktionieren.

Je nachdem, welchen Treiber Sie verwenden, müssen Sie ihn auf die schwarze Liste setzen , wenn Sie alle SATA-Geräte deaktivieren möchten. Versuchen Sie lsmod | grep sataherauszufinden, welche Treiber Sie verwenden. Dann /etc/modprobe.d/erstellen Sie in Ihrem eine neue Datei mit echo blacklist (module) > blacklist.conf, um sie der Blacklist hinzuzufügen. Erstellen Sie Ihre initramfs mit neu, mkinitramfsdamit sie wirksam werden. Starten Sie neu.

Alternativ können Sie einfach modprobe.blacklist=(module)Ihre Kernel-Parameter hinzufügen .

Tyrannisieren
quelle
1
Es werden alle SATA-Geräte einschließlich der Festplatte deaktiviert, sodass mein Laptop nicht mehr startet. Und die Sata-Unterstützung ist im Kernel kompiliert (nicht als Modul), sodass ich sie nicht auf die schwarze Liste setzen kann.
Sergey Melekhin
Okay, dann öffnen Sie einfach Ihren Laptop und entfernen Sie das Laufwerk ...
Hector
Leider bin ich nicht kompetent genug, um dies zu tun - es ist auf das Hauptbord gelötet und nicht über ein SATA-Kabel angeschlossen. Ich bin mir nicht einmal sicher, ob der Laptop funktionsfähig ist, wenn ich ihn einfach entferne.
Sergey Melekhin