ログに次のような内容が記録されます:
10月2日 22:11:21 jupiterカーネル: [439646.093111] ata4.00: 例外 Emask 0x0 SAct 0x0 SErr 0x0 アクション 0x6 10月2日 22:11:21 jupiterカーネル: [439646.093144] ata4.00: BMDMA統計0x6 10月2日 22:11:21 jupiterカーネル: [439646.093176] ata4.00: コマンド失敗: WRITE DMA EXT 10月2日 22:11:21 jupiterカーネル: [439646.093206] ata4.00: cmd 35/00:98:00:0d:ff/00:02:42:00:00/e0 タグ0 dma 339968 出力 10月2日 22:11:21 jupiterカーネル: [439646.093282] ata4.00: ステータス: { DRDY ERR } 10月2日 22:11:21 jupiterカーネル: [439646.093306] ata4.00: エラー: { ICRC ABRT } 10月2日 22:11:21 jupiterカーネル: [439646.093353] ata4: ソフトリセットリンク 10月2日 22:11:21 jupiterカーネル: [439646.265242] ata4.00: UDMA/133用に構成 10月2日 22:11:21 jupiterカーネル: [439646.265268] ata4: EH完了
今、どのディスクを交換すればよいのか疑問に思っています。しかし、「ataX.YZ」と /dev/disk/ エントリ間の明確なマッピングが見つかりません。
答え1
dmesg からさらに詳しい情報を取得できます。
dmesg | grep ata
何かのようなもの:
[ 2.345126] ata2.00: ATA-8: WDC WD20EARX-00PASB0, 51.0AB51, max UDMA/133
それは私の Wester Digital ハードドライブです。
1 つのモデルのドライブが複数ある場合 (上記の方法が役に立たない場合) は次の方法があります。
SCSI ホストから ata* ID へのマッピングを見つけます。
$ egrep "^[0-9]{1,}" /sys/class/scsi_host/host*/unique_id /sys/class/scsi_host/host0/unique_id:1 /sys/class/scsi_host/host1/unique_id:2 /sys/class/scsi_host/host2/unique_id:3 /sys/class/scsi_host/host3/unique_id:4
SCSI ホストから sd* ID へのマッピングを見つけます。
$ ls -l /sys/block/sd* ... /sys/block/sda -> ../devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda ... /sys/block/sdb -> ../devices/pci0000:00/0000:00:1f.2/host1/target1:0:0/1:0:0:0/block/sdb
これで、host* 識別子を介してこれら 2 つの結果をリンクできます。したがって、その場合、ata2 で問題が発生している場合は、unique_id 2 → host1 を探し、次に which sd* is host1 → sdb を探します。
私もワンライナーを考えてみました。それが堅牢かどうかはわかりません。まず、ata* を変数として設定する必要があります。
FAIL=ata1
次に以下を実行します:
echo "$FAIL -> $(ls -l /sys/block/ | grep $(grep "^$(echo $FAIL | cut -c 4-)" /sys/class/scsi_host/host*/unique_id | sed "s/.*\(host[0-9]\{1,\}\).*/\1/") | awk '{print $8}')"
次のような結果が返されるはずです:
ata1 -> sda
答え2
私のサーバーのいくつかでは、1 つの scsi_host に 2 つ以上のデバイスがあります。正しいかどうかはわかりませんが、ターゲットによって区別できると想定しており、私の場合はうまくいきました。
ls -l /sys/block/sd*
lrwxrwxrwx 1 root root 0 2012-02-08 08:15 /sys/block/sda -> ../devices/pci0000:00/0000:00:01.0/0000:01:00.0/host3/target3:0:0/3:0:0:0/block/sda
lrwxrwxrwx 1 root root 0 2012-02-08 08:15 /sys/block/sdb -> ../devices/pci0000:00/0000:00:1f.2/host6/target6:0:0/6:0:0:0/block/sdb
lrwxrwxrwx 1 root root 0 2012-02-08 08:15 /sys/block/sdc -> ../devices/pci0000:00/0000:00:1f.2/host7/target7:0:0/7:0:0:0/block/sdc
lrwxrwxrwx 1 root root 0 2012-02-08 08:15 /sys/block/sdd -> ../devices/pci0000:00/0000:00:1f.2/host8/target8:0:0/8:0:0:0/block/sdd
lrwxrwxrwx 1 root root 0 2012-02-08 08:15 /sys/block/sde -> ../devices/pci0000:00/0000:00:1f.2/host9/target9:0:0/9:0:0:0/block/sde
lrwxrwxrwx 1 root root 0 2012-02-08 08:15 /sys/block/sdf -> ../devices/pci0000:00/0000:00:1f.2/host10/target10:0:0/10:0:0:0/block/sdf
lrwxrwxrwx 1 root root 0 2012-02-08 08:15 /sys/block/sdg -> ../devices/pci0000:00/0000:00:1f.2/host11/target11:0:0/11:0:0:0/block/sdg
lrwxrwxrwx 1 root root 0 2012-02-08 08:15 /sys/block/sdh -> ../devices/pci0000:00/0000:00:1c.4/0000:04:00.0/host13/target13:0:0/13:0:0:0/block/sdh
lrwxrwxrwx 1 root root 0 2012-02-08 08:15 /sys/block/sdi -> ../devices/pci0000:00/0000:00:1c.4/0000:04:00.0/host13/target13:0:1/13:0:1:0/block/sdi
シンプルな bash スクリプト:
#!/bin/bash
#inspired by http://askubuntu.com/questions/64351/how-to-match-ata4-00-to-the-apropriate-dev-sdx-or-actual-physical-disk
for d in /sys/block/sd*
do
s=`basename $d`
h=`ls -l $d | egrep -o "host[0-9]+"`
t=`ls -l $d | egrep -o "target[0-9:]*"`
a2=`echo $t | egrep -o "[0-9]:[0-9]$" | sed 's/://'`
a=`cat /sys/class/scsi_host/$h/unique_id`
echo "$s -> ata$a.$a2"
done
出力は次のようになります。
sda -> ata4.00
sdb -> ata7.00
sdc -> ata8.00
sdd -> ata9.00
sde -> ata10.00
sdf -> ata11.00
sdg -> ata12.00
sdh -> ata14.00
sdi -> ata14.01
答え3
今では遅すぎますが、他の読者のために...「どのディスクを交換すればよいのか迷っています」というあなたの他の質問にも答えなければなりませんでした。
ICRC エラー フラグは、ほとんどの場合、不良な SATA ケーブルに関連付けられており、簡単に交換/テストできます。ドライブへの電源に障害がある場合、ICRC フラグが上がる可能性がわずかにあります。
しかし確かなのは、いいえドライブに何らかの問題がある証拠です。SATA ケーブルを交換してください。