ほとんどのLinuxシステムでは、udevは通常、シンボリックリンクを作成します
/dev/disk/by-uuid/
/dev/disk/by-path/
実際のデバイスノードを指します(/dev/sda
、/dev/sdb
など)。
私のシステムにはudevがありません。これらのシンボリックリンクを手動で生成したいと思います。 blkid
を使用してby-uuid
の名前を生成できることはわかっています。
しかし、udevを使用せずに、特定のディスクのby-path
名(例:/dev/sda1
)を生成するにはどうすればよいですか?
具体的には、ホスト10.1.14.22
からiSCSI経由で接続されているディスクがどのディスクかを見つける方法を探しています。同時に複数の(異なる)iSCSIホストに接続しているため、sdb
、sdc
、またはその他の可能性があります。
このスクリプトは、少なくともほとんどの典型的なシナリオでは、トリックを実行します。 blkid
、lsscsi
およびsed
が必要です:
#!/bin/bash
mkdir -p /dev/disk/by-{path,uuid}
for dev in `blkid -o device | grep -v block`; do
ln -s "$dev" "/dev/disk/by-uuid/$(blkid -o value -s UUID "$dev")"
done
lsscsi -v | sed 'N;s/\n//' |\
sed 's/.*\(\/dev\/\w\+\).*\(pci\)[0-9]\{4\}[^/]\+\/[^/]\+\/\([0-9:.]\+\)[^ ]*\/\([0-9:]\+\)[]].*/\1 \2-\3-scsi-\4/' |\
sed 's/.*\(\/dev\/\w\+\).*\(pci\)[^/]*\/\([0-9:.]\+\)\/ata[^ ]*\/\([0-9:]\+\)[]].*/\1 \2-\3-ata-\4/' |\
while read dev pci; do
pp="/dev/disk/by-path/$pci"
ln -s "$dev" "$pp"
for part in "${dev}"[0-9]*; do
[ -e "$part" ] && ln -s "$part $pp-part${part/$dev/}"
done
done