Odpovídající /dev/sdY zařízení můžete najít pomocí procházení /sys
strom:
$ find /sys/devices | grep '/ata[0-9]\+/.*/block/s[^/]\+$' \
| sed '[email protected]^.\+/\(ata[0-9]\+\)/.\+/block/\(.\+\)[email protected]\1 => /dev/\[email protected]'
S účinnějším /sys
procházení (srov. lsata.sh):
$ echo /sys/class/ata_port/ata*/../../host*/target*/*/block/s* | tr ' ' '\n' \
| awk -F/ '{printf("%s => /dev/%s\n", $5, $NF)}'
Příklad výstupu ze 2 diskového systému:
ata1 => /dev/sda
ata2 => /dev/sdb
Potom pro spolehlivou identifikaci skutečného hardwaru musíte namapovat /dev/sdY na sériové číslo, např.:
$ ls /dev/disk/by-id -l | grep 'ata.*sd[a-zA-Z]$'
lssci
lssci
nástroj lze také použít k odvození mapování:
$ lsscsi | sed '[email protected]^\[\([^:]\+\).\+\(/dev/.\+\)[email protected]\1,\[email protected]' \
| awk -F, '{ printf("ata%d => %s\n", $1+1, $2) }'
Všimněte si, že příslušný výčet lsscsi začíná od 0, zatímco výčet ata začíná od 0.
Syslog
Pokud nic jiného nefunguje, můžete se podívat na syslog/journal a odvodit mapování.
/dev/sdY
zařízení jsou vytvářena ve stejném pořadí, v jakém jsou identifikátory ataxe uvedeny v kern.log
při ignorování nediskových zařízení (ATAPI) a nepřipojených odkazů.
Následující příkaz tedy zobrazí mapování:
$ 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
(Všimněte si, že ata4 se nezobrazuje, protože výše uvedené zprávy protokolu jsou z jiného systému.)
Používám /var/log/kern.log.0
a ne /var/log/kern.log
protože spouštěcí zprávy jsou již otočeny. Hádal jsem May 28 2
protože to byl poslední čas spouštění a chci ignorovat předchozí zprávy.
Chcete-li ověřit mapování, můžete provést některé kontroly tím, že se podíváte na výstup:
$ 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
[..]
A tento výstup můžete porovnat s hdparm
výstup, např.:
$ hdparm -i /dev/sda
/dev/sda:
Model=SAMSUNG SV0802N [..]
(pomocí jádra 2.6.32-31)
Zde je moje verze, upravená shora. Protože neznám přesné datum spuštění systému (pro testování to bylo před 27 dny) a nevím, který kern.log obsahuje data, která potřebuji (některé mohou být gzipped
v mém systému), používám uptime
a date
Chcete-li vypočítat přibližné datum spuštění systému (v každém případě ke dni), použijte zgrep
pro prohledání všech dostupných souborů kern.log.
Také jsem mírně upravil druhý grep
protože nyní bude zobrazovat také jednotku ATAPI CD/DVD a jednotky ATA-*.
Stále by mohl používat upřesnění (tj. pokud je doba provozuschopnosti systému delší než rok), ale prozatím by měla fungovat OK.
#!/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); }'