Devices

在沒有 udev 守護程序的系統上生成 /dev/disk/-by-path/ 名稱的命令

  • April 29, 2016

在大多數 Linux 系統上,udev 通常在

/dev/disk/by-uuid/
/dev/disk/by-path/

它指向實際的設備節點(/dev/sda,/dev/sdb等)。

我的系統上沒有 udev,我想手動生成這些符號連結。我知道我可以blkid用來生成by-uuid名稱。

但是如何在不使用 udev的情況下by-path為給定磁碟生成名稱(例如)?/dev/sda1

具體來說,我正在尋找一種方法來查找我的哪些磁碟是通過 iSCSI 從 host 連接的磁碟10.1.14.22。它可能是sdb,或者sdc可能是其他,因為我同時連接到多個(不同的)iSCSI 主機。

這個腳本可以解決問題,至少在大多數典型場景中是這樣。它需要blkid,lsscsised:

#!/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

引用自:https://unix.stackexchange.com/questions/278345