Los enlaces bajo / dev / disk / by-id son creados por udev. En /etc/udev/rules.d/50-udev.rules se pueden encontrar estas líneas:
KERNEL=="sd*[!0-9]|sr*", SYSFS{ieee1394_id}=="*", ENV{ID_SERIAL}="$sysfs{ieee1394_id}", ENV{ID_BUS}="ieee1394"
KERNEL=="sd*[!0-9]|sr*", ENV{ID_SERIAL}=="", IMPORT{program}="/lib/udev/usb_id -x"
KERNEL=="sd*[!0-9]|sr*", ENV{ID_SERIAL}=="", IMPORT{program}="/lib/udev/scsi_id -g -x -s %p -d $tempnode"
KERNEL=="sd*[!0-9]|sr*", ENV{ID_SERIAL}=="", IMPORT{program}="/lib/udev/scsi_id -g -x -a -s %p -d $tempnode"
KERNEL=="nst[0-9]*|st*|sd*[!0-9]|sr*|dasd*[!0-9]|cciss?c", ENV{ID_SERIAL}=="?*", SYMLINK+="disk/by-id/$env{ID_BUS}-$env{ID_SERIAL}"
Lamentablemente, no es trivial descubrir este by-idenlace simbólico a partir del nombre del dispositivo. Pero hay al menos una forma directa:
$ udevinfo -q path -n /dev/sda
/block/sda
$ udevinfo -q symlink -p /block/sda
disk/by-id/scsi-SATA_KINGSTON_SVP100_31JY100MY5SK disk/by-path/pci-0000:00:11.0-scsi-0:0:0:0
Se devuelve una lista separada por espacios. Entonces el by-idcamino se puede encontrar.
O puede obtener directamente el número de serie "compuesto":
$ udevinfo -q env -p /block/sda
ID_VENDOR=ATA
ID_MODEL=KINGSTON_SVP100S
ID_REVISION=CJR1
ID_SERIAL=SATA_KINGSTON_SVP100_31JY100MY5SK
ID_TYPE=disk
ID_BUS=scsi
ID_PATH=pci-0000:00:11.0-scsi-0:0:0:0
En el ID_SERIALdespués de la última subrayado Usted puede obtener el número de serie.
Como veo, un número de serie puede contener caracteres alfanuméricos y '-' (tengo tales discos duros SCSI). ¿Alguien sabe alguna limitación sobre el número de serie? Si puede contener '_', este método no es a prueba de balas.
La ID_MODELclave podría usarse para localizar con mayor precisión el comienzo del número de serie, ya que (me parece) sus primeros 15 caracteres se agregan a ID_SERIAL(espacios reemplazados por '_').
udisks --show-info.__ Pero__ debe tenerse en cuenta que cuando se usa en modo por lotes o generalmente en scripts,udiskses MUCHO más lento queudevadm.