kern.logエラーメッセージのataX.0識別子を実際の/dev/sdYデバイスにマッピングするにはどうすればよいですか?

kern.logエラーメッセージのataX.0識別子を実際の/dev/sdYデバイスにマッピングするにはどうすればよいですか?

次のkern.logスニペットを検討してください。

 ata4.00: failed command: WRITE FPDMA QUEUED
 ata4.00: cmd 61/00:78:40:1e:6c/04:00:f0:00:00/40 tag 15 ncq 524288 out
        res 41/04:00:00:00:00/04:00:00:00:00/00 Emask 0x1 (device error)
 ata4.00: status: { DRDY ERR }
 ata4.00: error: { ABRT }
 ata4: hard resetting link
 ata4: nv: skipping hardreset on occupied port
 ata4: SATA link up 3.0 Gbps (SStatus 123 SControl 300)
 ata4.00: configured for UDMA/133
 ata4: EH complete

カーネルが実際にどのハードドライブを参照しているかをどのように確認できますかata4.00

その/dev/sdYデバイス名を見つけるには?

ベストアンサー1

対応する/ dev / sdYデバイスはツリーを参照して見つけることができます/sys

$ find /sys/devices | grep '/ata[0-9]\+/.*/block/s[^/]\+$' \
    | sed 's@^.\+/\(ata[0-9]\+\)/.\+/block/\(.\+\)$@\1 => /dev/\2@'

より効率的な/sys巡回を通して(参照lsata.sh):

$ echo /sys/class/ata_port/ata*/../../host*/target*/*/block/s* | tr ' ' '\n' \
    | awk -F/ '{printf("%s => /dev/%s\n", $5, $NF)}'

2ディスクシステムのサンプル出力:

ata1 => /dev/sda
ata2 => /dev/sdb

その後、物理ハードウェアを確実に識別するには、/ dev / sdYをシリアル番号にマップする必要があります。例:

$ ls /dev/disk/by-id -l | grep 'ata.*sd[a-zA-Z]$'

LSSCI

このlssciユーティリティは、マッピングのエクスポートにも使用できます。

$ lsscsi | sed 's@^\[\([^:]\+\).\+\(/dev/.\+\)$@\1,\2@' \
    | awk -F, '{ printf("ata%d => %s\n", $1+1, $2) }'

関連するlsscsi列挙は0から始まり、ata列挙は0から始まります。

システムログ

他の方法がない場合は、システムログ/ログを確認してマッピングをエクスポートできます。

デバイスは、/dev/sdYataX識別子がリストされている順序と同じ順序で作成され、kern.log非ディスクデバイス(ATAPI)と未接続リンクは無視されます。

したがって、次のコマンドはマッピングを表示します。

$ grep '^May 28 2'  /var/log/kern.log.0  | \
   grep 'ata[0-9]\+.[0-9][0-9]: ATA-' | \
   sed 's/^.*\] ata//' | \
   sort -n | sed 's/:.*//' | \
   awk ' { a="ata" $1; printf("%10s is /dev/sd%c\n", a, 96+NR); }'
ata1.00 is /dev/sda
ata3.00 is /dev/sdb
ata5.00 is /dev/sdc
ata7.00 is /dev/sdd
ata8.00 is /dev/sde
ata10.00 is /dev/sdf

(上記のログメッセージは他のシステムで発生したものなので、ata4は表示されません。)

スタートメッセージが循環したため、/var/log/kern.log.0代わりに使用しています。これが最後のブート時間であり、前のメッセージを無視したいので、/var/log/kern.loggrepを実行します。May 28 2

マッピングを確認するには、次の出力を表示していくつかのチェックを実行できます。

$ grep '^May 28 2'  /var/log/kern.log.0  | \
grep 'ata[0-9]\+.[0-9][0-9]: ATA-'
May 28 20:43:26 hn kernel: [    1.260488] ata1.00: ATA-7: SAMSUNG SV0802N, max UDMA/100
May 28 20:43:26 hn kernel: [    1.676400] ata5.00: ATA-5: ST380021A, 3.19, max UDMA/10
[..]

この出力を次の出力とhdparm比較できます。

$ hdparm -i /dev/sda

/dev/sda:

Model=SAMSUNG SV0802N [..]

(カーネル2.6.32-31を使用)

おすすめ記事