Commande pour générer / dev / disk / -by-path / nom sur un système sans le démon udev

Sur la plupart des systèmes Linux, udev crée généralement des liens symboliques

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

qui pointent vers les nœuds de périphérique réels ( /dev/sda , /dev/sdb , etc.).

Je n'ai pas udev sur mon système, et je voudrais générer ces liens symboliques manuellement. Je sais que je peux utiliser blkid pour générer le nom by-uuid .

Mais comment puis-je générer le nom by-path pour un disque donné (par exemple /dev/sda1 ) sans utiliser udev?

Plus précisément, je cherche un moyen de find lequel de mes disques est le disque connecté via iSCSI à partir de l'hôte 10.1.14.22 . Il pourrait s'agir de sdb , ou de sdc ou peut-être d'autre, puisque je suis connecté à plusieurs hôtes iSCSI (différents) en même time.

Ce script ferait l'affaire, au less pour la plupart des scénarios typiques. Il nécessite sur blkid , lsscsi et 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