Napsal jsem jeden řádek na základě odpovědi Tobiho Hahna.
Chcete například vědět, jaké zařízení znamená ata3:
ata=3; ls -l /sys/block/sd* | grep $(grep $ata /sys/class/scsi_host/host*/unique_id | awk -F'/' '{print $5}')
Vytvoří něco takového
lrwxrwxrwx 1 root root 0 Jan 15 15:30 /sys/block/sde -> ../devices/pci0000:00/0000:00:1f.5/host2/target2:0:0/2:0:0:0/block/sde
Použijte tento příkaz:
ls -l /sys/block/sd* | sed 's/.*\(sd.*\) -.*\(ata.*\)\/h.*/\2 => \1/'
V mém systému to vytváří výstup:
ata1 => sda
ata2 => sdb
ata3 => sdc
ata4 => sdd
ata7 => sde
ata8 => sdf
To bude fungovat, i když všechny disky mají stejný model jednotky (mezi těmito 6 disky jsou pouze dva různé modely). Všimněte si, že to závisí na pojmenování sysfs a funguje v mém jádře 3.10.17. Vím, že v určitém okamžiku v minulosti nebylo načítání mapování tak čisté, ale nejsem si jistý, pro kterou nejstarší verzi jádra to bude fungovat.
Pokud to pro vás nefunguje, podívejte se na tento odkaz pro podrobnější způsob určování mapování:http://www.miriup.de/index.php?option=com_content&view=article&id=84:mapping-linux-kernel- ata-errors-to-a-device&catid=8:linux&Itemid=25
Ukázalo se, že mapování bylo jednodušší, než jsem si myslel.
dmesg | grep ata2 | head
poskytuje mapování jednotky během procesu spouštění jádra. Nebo můžete jít na ata2.00
hned.
[ 2.448300] ata2: SATA max UDMA/133 abar [email protected] port 0xfeb0b180 irq 19
[ 2.940139] ata2: SATA link up 1.5 Gbps (SStatus 113 SControl 300)
[ 2.942143] ata2.00: ATA-8: ST31000340NS, SN05, max UDMA/133
[ 2.942149] ata2.00: 1953525168 sectors, multi 16: LBA48 NCQ (depth 31/32)
[ 2.944573] ata2.00: configured for UDMA/133
(and some stuff I'd rather never have to see about drive errors)
Jak vidíte, jeden z těchto řádků obsahuje číslo modelu mého disku (ST31000340NS
), který pak mohu použít k mapování na /dev
soubor:
$ readlink /dev/disk/by-id/*ST31000340NS* | head -n1
../../sda