Devices
在沒有 udev 守護程序的系統上生成 /dev/disk/-by-path/ 名稱的命令
在大多數 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
,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