06
をトラバースすることで、対応する /dev/sdY デバイスを見つけることができます ツリー:
$ find /sys/devices | grep '/ata[0-9]\+/.*/block/s[^/]\+$' \
| sed '[email protected]^.\+/\(ata[0-9]\+\)/.\+/block/\(.\+\)[email protected]\1 => /dev/\[email protected]'
より効率的な 13
トラバーサル (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
29
ユーティリティを使用してマッピングを取得することもできます:
$ lsscsi | sed '[email protected]^\[\([^:]\+\).\+\(/dev/.\+\)[email protected]\1,\[email protected]' \
| awk -F, '{ printf("ata%d => %s\n", $1+1, $2) }'
関連する lsscsi 列挙は 0 から始まり、ata 列挙は 0 から始まることに注意してください。
シスログ
他に何も機能しない場合は、syslog/journal を調べてマッピングを取得できます。
33
デバイスは、ataX 識別子が 45
に列挙されるのと同じ順序で作成されます 非ディスク デバイス (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 は表示されないことに注意してください。)
58
を使用しています 65
ではありません ブート メッセージはすでにローテーションされているためです。 78
を grep します これが最後の起動時間であり、以前のメッセージを無視したいからです。
マッピングを確認するには、次の出力を見ていくつかのチェックを行うことができます:
$ 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
[..]
そして、この出力を 85
と比較できます 出力例:
$ hdparm -i /dev/sda
/dev/sda:
Model=SAMSUNG SV0802N [..]
(カーネル 2.6.32-31 を使用)
これが私のバージョンで、上記から変更されています。システムが起動された正確な日付がわからないため (これをテストするために 27 日前でした)、どの kern.log に必要なデータが含まれているかもわかりません (いくつかは 96
私のシステムでは)、私は 101
を使用します と 119
おおよそのシステム起動日を計算するには (とにかくその日まで)、次に 128
を使用します 使用可能なすべての kern.log ファイルを検索します。
2番目の 137
も少し修正しました これは、ATAPI CD/DVD ドライブと ATA-* ドライブも表示されるためです。
まだ改良を使用できますが (つまり、システムの稼働時間が 1 年を超える場合)、今のところ問題なく動作するはずです。
#!/bin/bash
uptime=$(uptime | awk -F' ' '{ print $3" "$4 }' | sed s/,//)
date=$(date -d "$uptime ago" | awk '{print $2" "$3 }')
zgrep "$date" /var/log/kern.log* | \
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); }'