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