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