在大多数 Linux 系统上,udev 通常在以下位置创建符号链接
/dev/disk/by-uuid/
/dev/disk/by-path/
指向实际设备节点(/dev/sda
、/dev/sdb
等)。
我的系统上没有 udev,我想手动生成这些符号链接。我知道我可以用来blkid
生成by-uuid
名称。
但是如何在不使用 udev 的情况下生成by-path
给定磁盘(例如/dev/sda1
)的名称?
具体来说,我正在寻找一种方法来查找我的哪个磁盘是通过 iSCSI 从主机连接的磁盘10.1.14.22
。它可能是sdb
,或者sdc
可能是其他,因为我同时连接到多个(不同的)iSCSI 主机。
答案1
这个脚本可以解决问题,至少对于大多数典型场景来说是这样。它需要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