GNU/Linux >> Belajar Linux >  >> Linux

Bagaimana cara memetakan pengidentifikasi ataX.0 dalam pesan kesalahan kern.log ke perangkat /dev/sdY yang sebenarnya?

Anda dapat menemukan perangkat /dev/sdY yang sesuai dengan menelusuri /sys pohon:

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

Dengan /sys yang lebih efisien traversal (lih. lsata.sh):

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

Contoh keluaran dari sistem 2 disk:

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

Kemudian, untuk mengidentifikasi perangkat keras aktual secara andal, Anda perlu memetakan /dev/sdY ke nomor seri, mis.:

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

lsci

lssci utilitas juga dapat digunakan untuk menurunkan pemetaan:

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

Perhatikan bahwa pencacahan lsscsi yang relevan dimulai dari 0 sedangkan pencacahan ata dimulai dari 0.

Syslog

Jika tidak ada yang berhasil, seseorang dapat melihat syslog/journal untuk mendapatkan pemetaan.

/dev/sdY perangkat dibuat dalam urutan yang sama dengan pengidentifikasi ataX disebutkan dalam kern.log sambil mengabaikan perangkat non-disk (ATAPI) dan tautan yang tidak terhubung.

Dengan demikian, perintah berikut menampilkan pemetaan:

$ 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

(Perhatikan bahwa ata4 tidak ditampilkan karena pesan log di atas berasal dari sistem lain.)

Saya menggunakan /var/log/kern.log.0 dan bukan /var/log/kern.log karena pesan boot sudah diputar. Saya mengerti May 28 2 karena ini adalah waktu boot terakhir dan saya ingin mengabaikan pesan sebelumnya.

Untuk memverifikasi pemetaan, Anda dapat melakukan beberapa pemeriksaan dengan melihat keluaran dari:

$ 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
[..]

Dan Anda dapat membandingkan keluaran ini dengan hdparm keluaran, misalnya:

$ hdparm -i /dev/sda

/dev/sda:

Model=SAMSUNG SV0802N [..]

(menggunakan Kernel 2.6.32-31)


Ini versi saya, dimodifikasi dari atas. Karena saya tidak tahu tanggal pasti sistem di-boot (untuk pengujian ini adalah 27 hari yang lalu), dan saya tidak tahu kern.log mana yang berisi data yang saya perlukan (beberapa mungkin gzipped di sistem saya), saya menggunakan uptime dan date untuk menghitung perkiraan tanggal boot sistem (to the day, anyway), lalu gunakan zgrep untuk mencari melalui semua file kern.log yang tersedia.

Saya juga sedikit memodifikasi grep kedua pernyataan, karena sekarang juga akan menampilkan drive CD/DVD ATAPI serta drive ATA-*.

Itu masih dapat menggunakan penyempurnaan (yaitu jika waktu aktif sistem lebih dari satu tahun), tetapi seharusnya berfungsi dengan baik untuk saat ini.

#!/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. Cara membuat kata sandi acak di linux menggunakan /dev/random

  2. Linux:Perbedaan Antara /dev/console , /dev/tty Dan /dev/tty0?

  3. Kapan Menggunakan /dev/random Vs /dev/urandom?

  1. Perbedaan Antara /var/log/messages, /var/log/syslog, Dan /var/log/kern.log?

  2. Kapan saya harus menggunakan /dev/shm/ dan kapan saya harus menggunakan /tmp/?

  3. Linux:Perbedaan antara /dev/console , /dev/tty dan /dev/tty0

  1. Bagaimana cara mengganti harddisk yang gagal di RAID perangkat lunak Linux

  2. Bagaimana Linux Menangani Beberapa Pemisah Jalur Berturut-turut (/home////username///file)?

  3. gema atau cetak /dev/stdin /dev/stdout /dev/stderr