it-swarm.com.de

Wie lasse ich Linux ein neues SATA / dev / sda-Laufwerk erkennen, das ich ohne Neustart im laufenden Betrieb ausgetauscht habe?

Das Hot-Swap-Auslagern eines ausgefallenen SATA/dev/sda-Laufwerks funktionierte einwandfrei, aber als ich ein neues Laufwerk austauschte, wurde dies nicht erkannt:

[[email protected] ~]# tail -18 /var/log/messages
May 5 16:54:35 fs-2 kernel: ata1: exception Emask 0x10 SAct 0x0 SErr 0x50000 action 0xe frozen
May 5 16:54:35 fs-2 kernel: ata1: SError: { PHYRdyChg CommWake }
May 5 16:54:40 fs-2 kernel: ata1: link is slow to respond, please be patient (ready=0)
May 5 16:54:45 fs-2 kernel: ata1: device not ready (errno=-16), forcing hardreset
May 5 16:54:45 fs-2 kernel: ata1: soft resetting link
May 5 16:54:50 fs-2 kernel: ata1: link is slow to respond, please be patient (ready=0)
May 5 16:54:55 fs-2 kernel: ata1: SRST failed (errno=-16)
May 5 16:54:55 fs-2 kernel: ata1: soft resetting link
May 5 16:55:00 fs-2 kernel: ata1: link is slow to respond, please be patient (ready=0)
May 5 16:55:05 fs-2 kernel: ata1: SRST failed (errno=-16)
May 5 16:55:05 fs-2 kernel: ata1: soft resetting link
May 5 16:55:10 fs-2 kernel: ata1: link is slow to respond, please be patient (ready=0)
May 5 16:55:40 fs-2 kernel: ata1: SRST failed (errno=-16)
May 5 16:55:40 fs-2 kernel: ata1: limiting SATA link speed to 1.5 Gbps
May 5 16:55:40 fs-2 kernel: ata1: soft resetting link
May 5 16:55:45 fs-2 kernel: ata1: SRST failed (errno=-16)
May 5 16:55:45 fs-2 kernel: ata1: reset failed, giving up
May 5 16:55:45 fs-2 kernel: ata1: EH complete

Ich habe ein paar Dinge versucht, damit der Server das neue/dev/sda findet, wie z. B. rescan-scsi-bus.sh , aber sie haben nicht funktioniert:

[[email protected] ~]# echo "---" > /sys/class/scsi_Host/host0/scan
-bash: echo: write error: Invalid argument
[[email protected] ~]#
[[email protected] ~]# /root/rescan-scsi-bus.sh -l
[snip]
0 new device(s) found.
0 device(s) removed.
[[email protected] ~]#
[[email protected] ~]# ls /dev/sda
ls: /dev/sda: No such file or directory

Am Ende habe ich den Server neu gestartet./dev/sda wurde erkannt, ich habe das Software-RAID repariert und jetzt ist alles in Ordnung. Aber wie kann ich Linux beim nächsten Mal dazu bringen, ein neues SATA-Laufwerk zu erkennen, das ich ohne Neustart im laufenden Betrieb ausgetauscht habe?

Das fragliche Betriebssystem ist RHEL5.3:

[[email protected] ~]# cat /etc/redhat-release
Red Hat Enterprise Linux Server release 5.3 (Tikanga)

Die Festplatte ist eine Seagate Barracuda ES.2 SATA 3.0-Gbit/s 500 GB, Modell ST3500320NS.

Hier ist die lscpi-Ausgabe:

[[email protected] ~]# lspci
00:00.0 RAM memory: nVidia Corporation MCP55 Memory Controller (rev a2)
00:01.0 ISA bridge: nVidia Corporation MCP55 LPC Bridge (rev a3)
00:01.1 SMBus: nVidia Corporation MCP55 SMBus (rev a3)
00:02.0 USB Controller: nVidia Corporation MCP55 USB Controller (rev a1)
00:02.1 USB Controller: nVidia Corporation MCP55 USB Controller (rev a2)
00:04.0 IDE interface: nVidia Corporation MCP55 IDE (rev a1)
00:05.0 IDE interface: nVidia Corporation MCP55 SATA Controller (rev a3)
00:05.1 IDE interface: nVidia Corporation MCP55 SATA Controller (rev a3)
00:05.2 IDE interface: nVidia Corporation MCP55 SATA Controller (rev a3)
00:06.0 PCI bridge: nVidia Corporation MCP55 PCI bridge (rev a2)
00:08.0 Bridge: nVidia Corporation MCP55 Ethernet (rev a3)
00:09.0 Bridge: nVidia Corporation MCP55 Ethernet (rev a3)
00:0a.0 PCI bridge: nVidia Corporation MCP55 PCI Express bridge (rev a3)
00:0b.0 PCI bridge: nVidia Corporation MCP55 PCI Express bridge (rev a3)
00:0c.0 PCI bridge: nVidia Corporation MCP55 PCI Express bridge (rev a3)
00:0d.0 PCI bridge: nVidia Corporation MCP55 PCI Express bridge (rev a3)
00:0e.0 PCI bridge: nVidia Corporation MCP55 PCI Express bridge (rev a3)
00:0f.0 PCI bridge: nVidia Corporation MCP55 PCI Express bridge (rev a3)
00:18.0 Host bridge: Advanced Micro Devices [AMD] K8 [Athlon64/Opteron] HyperTransport Technology Configuration
00:18.1 Host bridge: Advanced Micro Devices [AMD] K8 [Athlon64/Opteron] Address Map
00:18.2 Host bridge: Advanced Micro Devices [AMD] K8 [Athlon64/Opteron] DRAM Controller
00:18.3 Host bridge: Advanced Micro Devices [AMD] K8 [Athlon64/Opteron] Miscellaneous Control
00:19.0 Host bridge: Advanced Micro Devices [AMD] K8 [Athlon64/Opteron] HyperTransport Technology Configuration
00:19.1 Host bridge: Advanced Micro Devices [AMD] K8 [Athlon64/Opteron] Address Map
00:19.2 Host bridge: Advanced Micro Devices [AMD] K8 [Athlon64/Opteron] DRAM Controller
00:19.3 Host bridge: Advanced Micro Devices [AMD] K8 [Athlon64/Opteron] Miscellaneous Control
03:00.0 VGA compatible controller: Matrox Graphics, Inc. MGA G200e [Pilot] ServerEngines (SEP1) (rev 02)
04:00.0 PCI bridge: NEC Corporation uPD720400 PCI Express - PCI/PCI-X Bridge (rev 06)
04:00.1 PCI bridge: NEC Corporation uPD720400 PCI Express - PCI/PCI-X Bridge (rev 06)

Update : In vielleicht einem Dutzend Fällen mussten wir Server neu starten, weil Hot Swap nicht "nur funktioniert" hat. Vielen Dank für die Antworten, um mehr über den SATA-Controller zu erfahren. Ich habe die lspci-Ausgabe für das problematische System oben eingefügt (Hostname: fs-2). Ich könnte immer noch Hilfe gebrauchen, um zu verstehen, was in Bezug auf Hot-Swap für dieses System in Bezug auf die Hardware nicht unterstützt wird. Bitte lassen Sie mich wissen, welche andere Ausgabe neben lspci nützlich sein könnte.

Die gute Nachricht ist, dass der Hot-Swap heute auf einem unserer Server (Hostname: www-1) "gerade funktioniert" hat, was für uns sehr selten ist. Hier ist die lspci-Ausgabe:

[[email protected] ~]# lspci
00:00.0 RAM memory: nVidia Corporation MCP55 Memory Controller (rev a2)
00:01.0 ISA bridge: nVidia Corporation MCP55 LPC Bridge (rev a3)
00:01.1 SMBus: nVidia Corporation MCP55 SMBus (rev a3)
00:02.0 USB Controller: nVidia Corporation MCP55 USB Controller (rev a1)
00:02.1 USB Controller: nVidia Corporation MCP55 USB Controller (rev a2)
00:04.0 IDE interface: nVidia Corporation MCP55 IDE (rev a1)
00:05.0 IDE interface: nVidia Corporation MCP55 SATA Controller (rev a3)
00:05.1 IDE interface: nVidia Corporation MCP55 SATA Controller (rev a3)
00:05.2 IDE interface: nVidia Corporation MCP55 SATA Controller (rev a3)
00:06.0 PCI bridge: nVidia Corporation MCP55 PCI bridge (rev a2)
00:08.0 Bridge: nVidia Corporation MCP55 Ethernet (rev a3)
00:09.0 Bridge: nVidia Corporation MCP55 Ethernet (rev a3)
00:0b.0 PCI bridge: nVidia Corporation MCP55 PCI Express bridge (rev a3)
00:0c.0 PCI bridge: nVidia Corporation MCP55 PCI Express bridge (rev a3)
00:0f.0 PCI bridge: nVidia Corporation MCP55 PCI Express bridge (rev a3)
00:18.0 Host bridge: Advanced Micro Devices [AMD] K10 [Opteron, Athlon64, Sempron] HyperTransport Configuration
00:18.1 Host bridge: Advanced Micro Devices [AMD] K10 [Opteron, Athlon64, Sempron] Address Map
00:18.2 Host bridge: Advanced Micro Devices [AMD] K10 [Opteron, Athlon64, Sempron] DRAM Controller
00:18.3 Host bridge: Advanced Micro Devices [AMD] K10 [Opteron, Athlon64, Sempron] Miscellaneous Control
00:18.4 Host bridge: Advanced Micro Devices [AMD] K10 [Opteron, Athlon64, Sempron] Link Control
00:19.0 Host bridge: Advanced Micro Devices [AMD] K10 [Opteron, Athlon64, Sempron] HyperTransport Configuration
00:19.1 Host bridge: Advanced Micro Devices [AMD] K10 [Opteron, Athlon64, Sempron] Address Map
00:19.2 Host bridge: Advanced Micro Devices [AMD] K10 [Opteron, Athlon64, Sempron] DRAM Controller
00:19.3 Host bridge: Advanced Micro Devices [AMD] K10 [Opteron, Athlon64, Sempron] Miscellaneous Control
00:19.4 Host bridge: Advanced Micro Devices [AMD] K10 [Opteron, Athlon64, Sempron] Link Control
03:00.0 VGA compatible controller: Matrox Graphics, Inc. MGA G200e [Pilot] ServerEngines (SEP1) (rev 02)
04:00.0 PCI bridge: NEC Corporation uPD720400 PCI Express - PCI/PCI-X Bridge (rev 06)
04:00.1 PCI bridge: NEC Corporation uPD720400 PCI Express - PCI/PCI-X Bridge (rev 06)
09:00.0 SCSI storage controller: LSI Logic / Symbios Logic SAS1064ET PCI-Express Fusion-MPT SAS (rev 04)
44
Philip Durbin

Wenn Ihr SATA-Controller Hot-Swap unterstützt, sollte er "nur funktionieren (tm)".

Um einen erneuten Scan eines SCSI-BUS zu erzwingen (jeder SATA-Port wird als SCSI-BUS angezeigt) und neue Laufwerke zu finden, verwenden Sie:

echo "0 0 0" >/sys/class/scsi_Host/host<n>/scan

In der obigen Abbildung ist <n> die BUS-Nummer.

45
user1797
echo "- - -" >/sys/class/scsi_Host/host<n>/scan
       ^ ^
        \_\_______ note spaces between the dashes.
19
Noah

Wenn ein Laufwerk unter bestimmten Umständen ausgefallen ist, merkt Linux nicht, dass Sie es tatsächlich physisch aus dem Array gezogen haben. Wenn Sie dieses Problem haben (wie ich es heute Morgen getan habe), können Sie Folgendes tun:

echo 1 > /sys/block/<devnode>/device/delete

Z.B. In meinem Fall war/dev/sda fehlgeschlagen und ich wollte den Server nicht neu starten, also tat ich Folgendes:

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

Danach war das neue Laufwerk (das tatsächlich bereits physisch hinzugefügt wurde) sofort sichtbar.

Wenn es zu diesem Zeitpunkt nicht sichtbar ist, können Sie auch einen erneuten Scan erzwingen:

echo "- – -" > /sys/class/scsi_Host/host<n>/scan

Dieses "- - -" ist ein Platzhalter für Kanal, ID und LUN, sodass Sie den Scan auf eine bestimmte Teilmenge beschränken können, indem Sie stattdessen Zahlen angeben.

Bevor Sie beginnen, können Sie auch:

readlink /sys/block/<devnode>

Daraufhin wird der Pfad mit der richtigen Hostnummer angezeigt, über den Sie/proc/scsi/scsi nach dem Entfernen auf Verschwinden prüfen können.

14
karora

Wie wäre es damit (scheint in Ubuntu zu funktionieren):

Sudo partprobe

8
user59282

Ich kann nicht glauben, dass noch niemand AHCI erwähnt hat ... Ihr SATA-Controller muss sich im AHCI-Modus befinden, um Hot-Swap zu ermöglichen. Überprüfen Sie dies, indem Sie sich den von Ihnen verwendeten Treiber ansehen:

[email protected]:~ # find /sys -name sdk
/sys/devices/pci0000:00/0000:00:11.0/ata5/Host4/target4:0:0/4:0:0:0/block    /sdk
/sys/block/sdk
/sys/class/block/sdk

[email protected]:~ # readlink /sys/devices/pci0000:00/0000:00:11.0/driver
../../../bus/pci/drivers/ahci

[email protected]:~ # lspci -k | less
[... big long output... search for ahci or your pci address, or use the awk below ...]

[email protected]:~ # lspci -k | awk '$1 == "00:11.0" {x=1}; x && /in use/ {print $0; exit}'
    Kernel driver in use: ahci

Sehen Sie, wie dort "ahci" steht.

Wenn dies nicht der Fall ist, aktivieren Sie es einfach in Ihrem BIOS. Außerdem haben einige BIOS-Dateien, insbesondere auf Servern oder UEFI, die Einstellung "Hot Swap = aktiviert/deaktiviert" pro Festplatte, die Sie auch aktivieren sollten, falls vorhanden.

6
Peter

Hier ist, warum ich den Computer neu starten musste ...

Ich habe gerade mein/dev/sdc getauscht. Ich habe scsiadd -r 3 0 0 verwendet, um die alte Festplatte vor dem Herausziehen auszuschalten. Nach der Installation der neuen Festplatte wurde die neue Festplatte nicht als/dev/sdc, sondern als/dev/sdd angezeigt. Nach einem Neustart wird die Festplatte erneut als/dev/sdc angezeigt.

Es scheint also, dass Hotswap funktioniert. Ok, es kann nur sein, dass/dev/sd * nicht mehr dasselbe ist.

Könnte dies eine Antwort auf Ihr Problem sein?

2
Peter

Der Fusion-MPT SAS Controller, den Sie haben, ist ein Low-End-RAID-Controller. Wenn Sie ihn nicht für RAID verwenden, bietet er möglicherweise immer noch eine nicht hilfreiche Ebene der Behinderung/Abstraktion.

Möglicherweise müssen Sie den RAID-Controller mit mpt-Status oder lsiutil durchsuchen, damit er den Bus tatsächlich scannt.

http://hwraid.le-vert.net/wiki/LSIFusionMPT hat eine gute Menge an Dokumentation, aber ich kann nicht sagen, dass ich sie überprüft habe.

1
aij

In einigen Fällen muss der Hot-Swap möglicherweise im BIOS des Motherboards und/oder des SATA-Controllers aktiviert werden. Dies hängt vollständig von der Marke und dem Modell beider ab. Wenn Sie jedoch integrierte SATA-Controller haben, die sollten Hotswap unterstützen, lohnt es sich, das Motherboard-BIOS zu durchsuchen. SATA-Karten verfügen möglicherweise über eigene BIOS-Einstellungen oder nicht, viele Karten der unteren Preisklasse jedoch nicht, Karten mit Serverqualität jedoch normalerweise.

Wenn ich mich richtig erinnere, musste ich dies mit einer Reihe von Gigabyte-Motherboards und vielleicht einigen anderen Marken tun. Ich brauchte es, damit ein Hot-Swap-SATA-Fach funktioniert. Wenn die Funktion deaktiviert ist, hat das Entfernen des Laufwerks keine Probleme verursacht, aber ein neues Laufwerk wurde erst nach einem Neustart registriert. Wenn die Einstellung wie erwartet aktiviert wurde, wurden Laufwerke, die in das Fach gelegt wurden, sofort hochgefahren und standen dem Betriebssystem zur Verfügung.

1
STW

Meine DVD auf meinem Fedora 16-Computer ist mit einer SATA-Schnittstelle verbunden. Es war verschlossen und ließ sich nicht öffnen oder schließen. Durch Ausführen von partprobe als root funktionierte meine CD-ROM/DVD wieder. Ich denke, es wird auf einer anderen Maschine helfen, auf der ich gelegentlich Probleme mit dem Hot-Swap habe. Vielen Dank!

1
Stuart Edge

Ich weiß, dass diese Frage alt ist, aber ich hatte einige Erfolge, die ich an keiner anderen Stelle gesehen habe. Hatte heute ähnliche Probleme mit einem Dell Precision 380. Irgendwann hat es funktioniert, indem eine Kombination der folgenden Aktionen ausgeführt wurde:

echo "- - -" > /sys/class/scsi_Host/host2/scan
echo 1 > /sys/class/scsi_device/2:0:0:0/device/reset
echo 1 > /sys/devices/pci0000:00/0000:00:1f.2/rescan
echo 1 > /sys/devices/pci0000:00/0000:00:1f.2/reset

WARNUNG : Dies kann auch andere ATA-Geräte im System stören. Wenn Sie Dateisysteme auf diesen Geräten bereitgestellt haben, wird dies wahrscheinlich schlecht enden. Meine Situation war mir egal, aber deine vielleicht.

Welche der oben genannten Befehle in welcher Reihenfolge benötigt werden, ist mir derzeit nicht bekannt. Einige Befehle müssen möglicherweise wiederholt werden. Wenn ich raten müsste, würde ich tun in der oben gezeigten Reihenfolge tun, dann am Ende noch einmal scsi_Host scannen. Ich habe bei meinen Erkundungen noch einige mehr gemacht.

Der erste Befehl (scsi_Host scan) weist den SCSI-Midlayer an, alle Busse nach neuen/geänderten Geräten zu durchsuchen. Der zweite Befehl versucht, das SCSI-Ziel (Festplattengerät) zurückzusetzen. Die letzten beiden arbeiten mit dem Treiber für den AHCI-Controller selbst.

Ich fand die fraglichen Gegenstände hauptsächlich durch detaillierte Untersuchung und kühne Experimente.

Sie können scsi_device-Knoten dem Gerätehersteller und -modell zuordnen (indem Sie mit grep die Dateinamen vor dem Inhalt drucken):

grep . /sys/class/scsi_device/*/device/model

Die erste Ziffer der SCSI-Geräte-ID sollte die scsi_Host-Nummer sein. Sie können dann scsi_Host-Knoten ihren Geräteknoten zuordnen mit:

ls -l /sys/class/scsi_Host

Ich vermute, ich werde nie die Chance bekommen, mich weiter zu verfeinern, deshalb wollte ich diese Informationen in der Hoffnung teilen, andere näher zu bringen. Wenn ich weitere Informationen erhalte, werde ich diese Antwort entsprechend bearbeiten.

Hoffe das hilft.

1
Ben Scott

Damit der Hotplug funktioniert, muss das acpiphp-Modul geladen sein.

[[email protected] ~]# modprobe acpiphp

wenn dies beim Booten funktionieren soll, müssen Sie dies natürlich so konfigurieren, dass es beim Booten geladen wird. Eine Möglichkeit besteht darin, /etc/rc.modules (das von rc.sysinit aufgerufen wird) zu erstellen/bearbeiten und die folgende Zeile hinzuzufügen:

modprobe acpiphp

denken Sie daran, wenn Sie diese Datei zu chmod + x erstellen, wie sie auf diese Weise aufgerufen wird.

0
nox