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