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

このスクリプトは、少なくともほとんどの一般的なシナリオではトリックを実行します。blkidlsscsiおよび以下が必要です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

おすすめ記事