Tobi Hahn の回答に基づいてワンライナーを書きました。
たとえば、ata3 を表すデバイスを知りたい場合:
ata=3; ls -l /sys/block/sd* | grep $(grep $ata /sys/class/scsi_host/host*/unique_id | awk -F'/' '{print $5}')
このようなものが生成されます
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
このコマンドを使用してください:
ls -l /sys/block/sd* | sed 's/.*\(sd.*\) -.*\(ata.*\)\/h.*/\2 => \1/'
私のシステムでは、次の出力が生成されます:
ata1 => sda
ata2 => sdb
ata3 => sdc
ata4 => sdd
ata7 => sde
ata8 => sdf
これは、すべてのディスクのドライブ モデルが同じ場合でも機能します (これらの 6 つのディスクの間には、2 つの異なるモデルしかありません)。これは sysfs の命名に依存し、カーネル 3.10.17 で動作することに注意してください。過去のある時点で、マッピングを取得するのにこれほどクリーンではなかったことは知っていますが、これが機能する最も初期のカーネル バージョンはわかりません。
うまくいかない場合は、マッピングを決定するためのより遠回りな方法について、次のリンクを参照してください。 ata-errors-to-a-device&catid=8:linux&Itemid=25
マッピングは思ったより簡単でした。
dmesg | grep ata2 | head
起動プロセス中にカーネルのドライブのマッピングを提供します。または、 ata2.00
を選択することもできます
[ 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)
ご覧のとおり、これらの行の 1 つに私のドライブのモデル番号 (ST31000340NS
) が含まれています。 ) を /dev
にマップするために使用できます ファイル:
$ readlink /dev/disk/by-id/*ST31000340NS* | head -n1
../../sda