ลิงก์ภายใต้ / dev / disk / by-id ถูกสร้างโดย udev ใน /etc/udev/rules.d/50-udev.rules บรรทัดดังกล่าวสามารถพบได้:
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}"
น่าเสียดายที่ไม่พบว่าby-id
symlink นี้มาจากชื่อของอุปกรณ์ แต่มีทางตรงอย่างน้อยหนึ่งทาง:
$ 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
รายการที่คั่นด้วยช่องว่างจะถูกส่งคืน ดังนั้นby-id
เส้นทางที่สามารถพบได้
หรือคุณสามารถรับหมายเลข "คอมโพสิต" ได้โดยตรง:
$ 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
ในID_SERIAL
หลังขีดล่างสุดท้ายคุณสามารถรับหมายเลขซีเรียลได้
ตามที่ฉันเห็นหมายเลขซีเรียลสามารถมีตัวอักษรและตัวเลขและ '-' (ฉันมี SCSI HDDs) ไม่มีใครรู้ข้อ จำกัด เกี่ยวกับหมายเลขซีเรียลหรือไม่ หากสามารถมี '_' ได้วิธีการนี้จะไม่ใช้ระบบกันกระสุน
ID_MODEL
ที่สำคัญสามารถนำมาใช้เพื่อ จำกัด อย่างแม่นยำมากขึ้นจุดเริ่มต้นของหมายเลขที่เป็น (มันดูเหมือนว่าฉัน) 15 ตัวอักษรแรกของมีเพิ่มID_SERIAL
(พื้นที่แทนที่ด้วย '_')
udisks --show-info
.__ But__ จะต้องมีการตั้งข้อสังเกตว่าเมื่อใช้ในโหมดแบทช์หรือโดยทั่วไปในสคริปต์เป็นวิธีที่ช้ากว่าudisks
udevadm