udev 데몬이 없는 시스템에서 /dev/disk/-by-path/ 이름을 생성하는 명령

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를 통해 호스트에서 연결되어 있는지 확인하는 방법을 찾고 있습니다 10.1.14.22. 동시에 여러 개의 (다른) iSCSI 호스트에 연결되어 있으므로 일 수도 sdb있고 다른 것일 수도 있습니다.sdc

답변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

관련 정보