GNU/Linux >> Linux の 問題 >  >> Linux

カーネル ATA 例外が発生した場合、影響を受ける物理ディスクを特定する方法は?

Tobi Hahn の回答に基づいてワンライナーを書きました。

たとえば、ata3 を表すデバイスを知りたい場合:

ata=3; ls -l /sys/block/sd* | grep $(grep $ata /sys/class/scsi_host/host*/unique_id | awk -F'/' '{print $5}')

このようなものが生成されます

lrwxrwxrwx 1 root root 0 Jan 15 15:30 /sys/block/sde -> ../devices/pci0000:00/0000:00:1f.5/host2/target2:0:0/2:0:0:0/block/sde

このコマンドを使用してください:

ls -l /sys/block/sd* | sed 's/.*\(sd.*\) -.*\(ata.*\)\/h.*/\2 => \1/'

私のシステムでは、次の出力が生成されます:

ata1 => sda
ata2 => sdb
ata3 => sdc
ata4 => sdd
ata7 => sde
ata8 => sdf

これは、すべてのディスクのドライブ モデルが同じ場合でも機能します (これらの 6 つのディスクの間には、2 つの異なるモデルしかありません)。これは sysfs の命名に依存し、カーネル 3.10.17 で動作することに注意してください。過去のある時点で、マッピングを取得するのにこれほどクリーンではなかったことは知っていますが、これが機能する最も初期のカーネル バージョンはわかりません。

うまくいかない場合は、マッピングを決定するためのより遠回りな方法について、次のリンクを参照してください。 ata-errors-to-a-device&catid=8:linux&Itemid=25


マッピングは思ったより簡単でした。

dmesg | grep ata2 | head 起動プロセス中にカーネルのドライブのマッピングを提供します。または、 ata2.00 を選択することもできます

[    2.448300] ata2: SATA max UDMA/133 abar [email protected] port 0xfeb0b180 irq 19
[    2.940139] ata2: SATA link up 1.5 Gbps (SStatus 113 SControl 300)
[    2.942143] ata2.00: ATA-8: ST31000340NS, SN05, max UDMA/133
[    2.942149] ata2.00: 1953525168 sectors, multi 16: LBA48 NCQ (depth 31/32)
[    2.944573] ata2.00: configured for UDMA/133
  (and some stuff I'd rather never have to see about drive errors)

ご覧のとおり、これらの行の 1 つに私のドライブのモデル番号 (ST31000340NS) が含まれています。 ) を /dev にマップするために使用できます ファイル:

$ readlink /dev/disk/by-id/*ST31000340NS* | head -n1
../../sda

Linux
  1. Linux – Gitコミットハッシュが与えられた場合、どのカーネルリリースにそれが含まれているのかを知る方法は?

  2. 特定のデバイスのカーネルモジュールを見つける方法は?

  3. uname が壊れています:現在実行中のカーネルを確認するにはどうすればよいですか?

  1. Linux –どのモジュールがカーネルを汚染しているかを判断する方法は?

  2. Lvm物理ボリューム上の不良ブロックをチェックする方法は?

  3. Linux でディスクに書き込みを行っているプロセスを特定する方法

  1. 特定の Linux が 32 ビットか 64 ビットかを判別する方法は?

  2. Linux カーネルは __init 呼び出しの順序をどのように決定しますか?

  3. どの Wi-Fi ドライバーがインストールされているかを調べる方法は?