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


41

失敗した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を修正しましたが、今はすべて正常です。しかし、次回は、再起動せずにホットスワップインした新しいSATAドライブをLinuxに認識させるにどうすればよいですか?

問題のオペレーティングシステムは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)

更新:ホットスワップが「正常に機能しなかった」ため、おそらく十数件の場合、サーバーの再起動を余儀なくされました。SATAコントローラーを詳しく調べるための回答をありがとう。上記の問題のあるシステム(ホスト名:fs-2)のlspci出力を含めました。そのシステムのホットスワップの観点から、ハードウェアに関して正確にサポートされていないものを理解するために、いくつかのヘルプを引き続き使用できます。lspci以外のどのような出力が役立つか教えてください。

幸いなことに、ホットスワップは現在、当社のサーバー(ホスト名:www-1)の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)

使用しているLinuxカーネルのバージョンでSATAコントローラーのステータスを確認します。バグやプレーンサポートされていない可能性があり
ネイサン

BUS番号は0でしたか、それとも1でしたか?

3
バス0でした。/sys/class/scsi_hostにはhost0からhost5が含まれます。dmesgはata1からata6を示しています。host0にata1の対応、HOST1にATA2の対応など
フィリップ・ダービン

回答:


43

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

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

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

上記で、<n>はバス番号です。


申し訳ありませんが、喜びはありません。そのコマンドを実行しても、最初にドライブを接続したときにトリガーされるのと同じ自動再スキャンのみがトリガーされます。でもありがとう!
ハカマダレ2009

RAIDがディスクを見るためには、raidコントローラーでいくつかの設定を行う必要がある可能性が非常に高いです。私の場合、新しいディスクをレイドに戻す必要がありました。
MikeKulls

sudoルートユーザーに切り替えたり使用したりしても許可が拒否されます。
アーロンフランケ

NVMe SSDから起動したシステムでは、これは新しく接続されたSATA HDを検出するために機能しました。powertopより多くのものをパワーダウンするために使用しているため、ドライブを接続したSATAポートが完全にスリープ状態になっている可能性があります。そのうちの(システムはSATA光学ドライブが接続され、ブート時に検出されているが、それはあまりにも、おそらく眠っていた。)他の人がアクティブドライブ用SATAリンクをリセット避けるために、提案として、数字hostのIDが既に使用されているとそうでないscanものを、新しいドライブに接続した場所のみ。(または、番号付けがわからない場合は、未使用のもの。)
Peter Cordes

18
echo "- - -" >/sys/class/scsi_host/host<n>/scan
       ^ ^
        \_\_______ note spaces between the dashes.

5
これに注意してください:dmesgは、すべてのSATAリンクをハードリセットすることを示しました。本番環境で実行して大量の書き込みを失う前に、テストする価値があります。
イヴァンコジック

12

ある状況でドライブが故障すると、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でチェックする正しいホスト番号のパスが表示されます。


7

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

sudo partprobe


また、「yum install parted」が必要な場合があります
Antonio

partedFTW ...あなたのような通常の容疑者のほかにも、それを知っている必要がありますfdiskgdiskcgdisktestdisk
sjas

6

まだ誰も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で有効にします。また、特にサーバーまたはUEFI上の一部のBIOSには、ディスクごとに「ホットスワップ=有効/無効」設定があり、存在する場合は有効にする必要があります。


1
あなたは私の新しい親友です:D
allyourcode

2

コンピューターを再起動する必要がある理由は次のとおりです...

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

hotswapは正常に動作しているように見えますが、/ dev / sd *がもはや同じではない可能性があります。

これはあなたの問題の答えでしょうか?


うーん、まあ、rescan-scsi-bus.shは、scsiaddがそうであるように、すでに/ proc / scsi / scsiで動作します。とにかく別のサーバーベンダーを試しているので、将来的にはホットスワップが「機能する」かもしれません。
フィリップダービン

4
ええ、私が知る限り、あなたはそれを回避することはできません。これが、ディスクラベルまたはUUIDを使用し、それによって(手動で、またはfstabで)fsをマウントし、それを設定でき、その後変更されない理由です。唯一のトリックは、ブートローダーを新しいドライブにインストールすることですが、GRUBを使用した簡単な実験からですが、再起動しても動作します(マシンのsdaをsd [a、b、c、d]とソフトウェアで置き換えていました) fsのすべてのシステム部分のraid1。
ロナルドポトル

1
fstabなどの構成ファイルで/ dev / sd *デバイスを使用しないでください。名前が常に同じであると想定してはなりません。代わりに、man fstabに表示されるようなUUID = ...構文(引用符なし)を使用する必要があります。UUIDを確認するには、blkidコマンドを使用します。(あるいは、ラベルまたはIDを好む可能性があります。/dev/disk/by-*も参照してください)
Peter

1

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


1

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

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

http://hwraid.le-vert.net/wiki/LSIFusionMPTには多くのドキュメントがありますが、検証したとは言えません。


1

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

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


私が知っている社内のマシンをチェックしただけです。オンボードMarvell 88SE9172およびIntel 7 Series / C210コントローラーを搭載したGigabyte Z77X-UD3Hマザーボードを実行しています
STW 14

1

私はこの質問が古いことを知っていますが、他では報告されなかったいくつかの成功を収めました。今日、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

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

お役に立てれば。


0

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

[root@example ~]# modprobe acpiphp

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

modprobe acpiphp

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


面白い。acpiphpのことは聞いたことがありません。ありがとう。Advanced ConfigurationおよびPower Interface PCI Hot Plugの略語のようです。もちろん、PCIはPeripheral Component Interconnectです。
フィリップダービン

2
acpiphpはPCIホットプラグ、つまりPCIカードのホットアドおよびホットリム用です。いくつかの高価なシステムがこれをサポートしています。また、多くのハイパーバイザー。
デロバート
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.