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

kern.log エラー メッセージの ataX.0 識別子を実際の /dev/sdY デバイスにマップする方法は?

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); }'

Linux
  1. / dev/randomを使用してLinuxでランダムパスワードを生成する方法

  2. Linux:/ dev / console、/ dev / tty、/ dev / tty0の違いは?

  3. /var/log/messages、/var/log/syslog、および/var/log/kern.logの違いは?

  1. /dev/random または /dev/urandom を base64 でエンコードする方法は?

  2. /dev/sda と /dev/sdb をどのように交換しますか?

  3. /dev/shm/ と /tmp/ はいつ使用する必要がありますか?

  1. Linux:/dev/console 、 /dev/tty 、 /dev/tty0 の違い

  2. Linux が /dev/tty と /dev/tty0 を使用する方法

  3. echo または print /dev/stdin /dev/stdout /dev/stderr