Comando para gerar / dev / disk / -by-path / name em um sistema sem o daemon udev

8

Na maioria dos sistemas Linux, o udev geralmente cria links simbólicos em

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

que apontam para nós de dispositivos reais ( /dev/sda , /dev/sdb , etc).

Eu não tenho o udev no meu sistema e gostaria de gerar esses links simbólicos manualmente. Eu sei que posso usar blkid para gerar o nome by-uuid .

Mas como posso gerar o nome by-path para um determinado disco (por exemplo, /dev/sda1 ) sem usar o udev?

Especificamente, estou procurando uma maneira de descobrir qual dos meus discos é o disco conectado via iSCSI do host 10.1.14.22 . Pode ser sdb ou sdc ou talvez outro, pois estou conectado a vários hosts iSCSI (diferentes) ao mesmo tempo.

    
por Martin Vegter 22.04.2016 / 15:29

1 resposta

1

Este script faria o truque, pelo menos para a maioria dos cenários típicos. Requer em blkid , lsscsi e 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:]\+\)[]].*/ --scsi-/' |\
  sed 's/.*\(\/dev\/\w\+\).*\(pci\)[^/]*\/\([0-9:.]\+\)\/ata[^ ]*\/\([0-9:]\+\)[]].*/ --ata-/' |\
  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
    
por 29.04.2016 / 09:21