web-dev-qa-db-ja.com

再起動せずにホットスワップした新しいSATA / dev / sdaドライブをLinuxに認識させるにはどうすればよいですか?

故障したSATA/dev/sdaドライブのホットスワップアウトは問題なく動作しましたが、新しいドライブにスワップすると、認識されませんでした。

[root@fs-2 ~]# 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

rescan-scsi-bus.sh のように、サーバーに新しい/ dev/sdaを見つけさせるためにいくつかのことを試みましたが、機能しませんでした:

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

サーバーを再起動してしまいました。/dev/sdaが認識され、ソフトウェアRAIDを修正しました。しかし、次回は再起動せずにLinuxにホットスワップした新しいSATAドライブを認識させるにはどうすればよいですか

問題のオペレーティングシステムはRHEL5.3です。

[root@fs-2 ~]# cat /etc/redhat-release
Red Hat Enterprise Linux Server release 5.3 (Tikanga)

ハードドライブは、Seagate Barracuda ES.2 SATA 3.0 Gb/s 500 GB、モデルST3500320NSです。

Lscpiの出力は次のとおりです。

[root@fs-2 ~]# 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:おそらく12のケースで、ホットスワップが「機能しない」ため、サーバーの再起動を余儀なくされました。 SATAコントローラーを詳しく調べるための回答をありがとうございます。上記の問題のあるシステム(ホスト名:fs-2)のlspci出力を含めました。そのシステムのホットスワップに関して、ハードウェアでサポートされていないものを正確に理解するために、いくつかのヘルプを使用できます。 lspci以外にどのような出力が役立つかを教えてください。

良いニュースは、私たちのサーバーの1つ(ホスト名:www-1)でホットスワップが「正常に動作した」ことです。 lspciの出力は次のとおりです。

[root@www-1 ~]# 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

SATAコントローラーがホットスワップをサポートしている場合、「正常に動作する(tm)」はずです。

SCSIバス(各SATAポートはSCSIバスとして表示されます)を強制的に再スキャンして新しいドライブを見つけるには、次のコマンドを使用します。

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

上記の<n>はBUS番号です。

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

ある状況でドライブに障害が発生した場合、Linuxは実際にアレイから物理的にプルしたことに気づきません。あなたがその問題を抱えている場合(私が今朝行ったように)、次のことができます。

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

例えば。私の場合、/ dev/sdaが失敗し、サーバーを再起動したくなかったので、次のようにしました。

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

それを行った後、新しいドライブ(実際には既に物理的に追加されていた)がすぐに表示されました。

この時点で表示されない場合は、これを実行して強制的に再スキャンすることもできます。

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

その「---」はそれぞれチャネル、ID、およびLUNのワイルドカードであるため、代わりに数値を指定して、スキャンを特定のサブセットに制限できます。

始める前に、次のこともできます。

readlink /sys/block/<devnode>

これにより、削除後に/ proc/scsi/scsiで非表示になるかどうかをチェックするための正しいホスト番号のパスが表示されます。

14
karora

これはどうですか(Ubuntuで動作するようです):

須藤パーツプローブ

8
user59282

誰もまだAHCIについて言及していないとは信じられません...ホットスワップを有効にするには、SATAコントローラーをAHCIモードにする必要があります。使用しているドライバーを見てこれを確認してください:

root@peter:~ # 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

root@peter:~ # readlink /sys/devices/pci0000:00/0000:00:11.0/driver
../../../bus/pci/drivers/ahci

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

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

そこに "ahci"と書かれているのを見てください。

そうでない場合は、BIOSで有効にします。また、一部のBIOS、特にサーバーまたはUEFIには、ディスクごとに「ホットスワップ=有効/無効」設定があり、存在する場合は有効にする必要があります。

6
Peter

これが、コンピュータを再起動する必要があった理由です...

/ dev/sdcをホットスワップしました。古いディスクを取り出す前に、scsiadd -r 3 0 0を使用して古いディスクの電源を切りました。次に、新しいディスクをインストールした後、新しいディスクは/ dev/sdcではなく、/ dev/sddとして表示されました。再起動後、ディスクは再び/ dev/sdcとして表示されます。

したがって、hotswapは正常に機能しているようです。/dev/sd*が同じではなくなっている可能性があります。

これはあなたの問題の答えになりますか?

2
Peter

Fusion-MPT SASお使いのコントローラーはローエンドのRAIDコントローラーです。RAIDに使用していない場合でも、障害/抽象化の役に立たない層を提供している可能性があります。

実際にバスをスキャンするには、mpt-statusまたはlsiutilを使用してRAIDコントローラーを突く必要がある場合があります。

http://hwraid.le-vert.net/wiki/LSIFusionMPT にはかなりの量のドキュメントがありますが、確認したとは言えません。

1
aij

マザーボードやSATAコントローラのBIOSでホットスワップを有効にする必要がある場合があります。これは、両方のメーカーとモデルに完全に依存しますが、オンボードSATAコントローラーがある場合、すべきホットスワップをサポートしているので、マザーボードのBIOS全体を確認する価値があります。 SATAカードには独自のBIOS設定がある場合とない場合がありますが、多くのローエンドカードにはありませんが、サーバーグレードのカードには通常あります。

私が正しく思い出せば、数ギガバイトのマザーボードでこれを行う必要がありました。ホットスワップSATAトレイが機能するために必要でした。機能を無効にしてドライブを削除しても問題は発生しませんでしたが、再起動するまで新しいドライブは登録されませんでした。設定を有効にすると期待どおりに機能し、トレイに配置されたドライブがすぐに起動し、OSで使用できるようになりました。

1
STW

Fedora 16マシンのDVDはSATAインターフェイスに接続されています。ロックされていて、開閉できませんでした。ルートとしてpartprobeを実行すると、私のcdrom/DVDが再び動作します。私は時々ホットスワップの問題がある別のマシンで役立つと思います。ありがとう!

1
Stuart Edge

この質問が古いことは知っていますが、他では報告されていないいくつかの成功がありました。今日、Dell Precision 380でも同様の問題がありました。最終的には、次のいくつかの組み合わせを実行することで機能しました。

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

警告:これにより、システム上の他のATAデバイスも混乱する可能性があります。それらのデバイスにファイルシステムをマウントした場合、それはひどく終了する可能性があります。私の状況は気にしませんでしたが、あなたの状況はそうかもしれません。

上記のコマンドのどれがどの順序で必要なのかは、現時点では不明です。一部のコマンドは繰り返す必要がある場合があります。推測する必要がある場合は、上記の順序で実行し、最後にもう一度別のscsi_Hostをスキャンします。私は自分の探索でかなり多くのことを行いました。

最初のコマンド(scsi_Host scan)は、SCSIミッドレイヤーにすべてのバスをスキャンして新しいデバイスまたは変更されたデバイスを探すように指示します。 2番目のコマンドは、SCSIターゲット(ディスクデバイス)のリセットを試みます。最後の2つは、AHCIコントローラー自体のドライバーを使用しています。

問題のアイテムは主に詳細な調査と大胆な実験で見つかりました。

Scsi_deviceノードをデバイスの製造元とモデルに一致させることができます(grepを使用して、コンテンツの前にファイル名を出力します)。

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

SCSIデバイスIDの最初の桁は、scsi_Host番号である必要があります。次に、scsi_Hostノードをデバイスノードと一致させることができます。

ls -l /sys/class/scsi_Host

私はこれ以上洗練する機会は決してないだろうと思うので、他の人との距離を縮めることを期待してこの情報を共有したかった。さらに情報が得られた場合は、この回答を編集して反映させます。

お役に立てれば。

1
Ben Scott

ホットプラグを機能させるには、acpiphpモジュールをロードする必要があります。

[root@example ~]# modprobe acpiphp

明らかにこれをブート時に機能させたい場合は、ブート時にロードされるように構成する必要があります-1つの方法は/etc/rc.modules(rc.sysinitによって呼び出されます)を作成/編集して次の行を追加することです:

modprobe acpiphp

この方法で呼び出されるため、このファイルを作成してchmod + xするかどうかを覚えておいてください。

0
nox