User Tools

Site Tools


linux:device_uuid

List device UUID / serial number

List all block devices

[root@rhtest1:~/# lsblk
/dev/sr0: UUID="2016-12-22-15-10-02-00" LABEL="CentOS_7_ppc64le" TYPE="iso9660" PTTYPE="dos"
/dev/sda: PTTYPE="dos"
/dev/sdb: UUID="lWgefe-0g0v-Rw8R-oH16-ntlB-cmxL-yJ1GZV" TYPE="LVM2_member"
/dev/sdd: UUID="lWgefe-0g0v-Rw8R-oH16-ntlB-cmxL-yJ1GZV" TYPE="LVM2_member"
/dev/mapper/mpatha: PTTYPE="dos"
/dev/sdc: PTTYPE="dos"
/dev/mapper/mpatha2: UUID="2d558b91-3bc0-4473-a5d2-8124ecfc5edf" TYPE="xfs"
/dev/mapper/mpatha3: UUID="Fekdxv-VOcD-frgW-e6sT-b9Ny-oAGT-cRLNxi" TYPE="LVM2_member"
/dev/mapper/mpathb: UUID="lWgefe-0g0v-Rw8R-oH16-ntlB-cmxL-yJ1GZV" TYPE="LVM2_member"
/dev/mapper/ca-root: UUID="c28f2089-7982-4a13-8daf-849837c29319" TYPE="xfs"
/dev/mapper/ca-swap: UUID="1df7e041-a40b-43f3-8ae9-2d9645e226e3" TYPE="swap"
/dev/mapper/datavg-testlv: UUID="eb42664d-452f-47f4-9a7b-2119707db7e8" TYPE="ext4"

List with tree

[root@rhtest1:~/# lsblk -f
NAME               FSTYPE       LABEL UUID                                   MOUNTPOINT
sda                mpath_member
└─mpatha
  ├─mpatha1
  ├─mpatha2        xfs                2d558b91-3bc0-4473-a5d2-8124ecfc5edf   /boot
  └─mpatha3        LVM2_member        Fekdxv-VOcD-frgW-e6sT-b9Ny-oAGT-cRLNxi
    ├─ca-root      xfs                c28f2089-7982-4a13-8daf-849837c29319   /
    └─ca-swap      swap               1df7e041-a40b-43f3-8ae9-2d9645e226e3   [SWAP]
sdb                mpath_member       lWgefe-0g0v-Rw8R-oH16-ntlB-cmxL-yJ1GZV
└─mpathb           LVM2_member        lWgefe-0g0v-Rw8R-oH16-ntlB-cmxL-yJ1GZV
  └─datavg-testlv ext4               eb42664d-452f-47f4-9a7b-2119707db7e8   /test
sdc                mpath_member
└─mpatha
  ├─mpatha1
  ├─mpatha2        xfs                2d558b91-3bc0-4473-a5d2-8124ecfc5edf   /boot
  └─mpatha3        LVM2_member        Fekdxv-VOcD-frgW-e6sT-b9Ny-oAGT-cRLNxi
    ├─ca-root      xfs                c28f2089-7982-4a13-8daf-849837c29319   /
    └─ca-swap      swap               1df7e041-a40b-43f3-8ae9-2d9645e226e3   [SWAP]
sdd                mpath_member       lWgefe-0g0v-Rw8R-oH16-ntlB-cmxL-yJ1GZV
└─mpathb           LVM2_member        lWgefe-0g0v-Rw8R-oH16-ntlB-cmxL-yJ1GZV
  └─datavg-testlv ext4               eb42664d-452f-47f4-9a7b-2119707db7e8   /test
sr0

Disk info and serial NUMBER

root@SGELLIN119:~# udevadm info --query=all --name=/dev/mapper/mpatha
P: /devices/virtual/block/dm-1
N: dm-1
L: 10
S: disk/by-id/dm-name-mpatha
S: disk/by-id/dm-uuid-mpath-36005033330810012e80000000000007a
S: disk/by-id/lvm-pv-uuid-atrTB1-Jf6u-3k2E-Ia0I-cEyO-ffrO-xxcAcY
S: mapper/mpatha
E: DEVLINKS=/dev/disk/by-id/dm-name-mpatha /dev/disk/by-id/dm-uuid-mpath-36005033330810012e80000000000007a /dev/disk/by-id/lvm-pv-uuid-atrTB1-Jf6u-3k2E-Ia0I-cEyO-ffrO-xxcAcY /dev/mapper/mpatha
E: DEVNAME=/dev/dm-1
E: DEVPATH=/devices/virtual/block/dm-1
E: DEVTYPE=disk
E: DM_ACTIVATION=1
E: DM_MULTIPATH_TIMESTAMP=1564405547
E: DM_NAME=mpatha
E: DM_SUSPENDED=0
E: DM_UDEV_DISABLE_LIBRARY_FALLBACK_FLAG=1
E: DM_UDEV_PRIMARY_SOURCE_FLAG=1
E: DM_UDEV_RULES_VSN=2
E: DM_UUID=mpath-36005033330810012e80000000000007a
E: ID_FS_TYPE=LVM2_member
E: ID_FS_USAGE=raid
E: ID_FS_UUID=atrTB1-Jf6u-3k2E-Ia0I-cEyO-ffrO-xxcAcY
E: ID_FS_UUID_ENC=atrTB1-Jf6u-3k2E-Ia0I-cEyO-ffrO-xxcAcY
E: ID_FS_VERSION=LVM2 001
E: ID_MODEL=LVM PV atrTB1-Jf6u-3k2E-Ia0I-cEyO-ffrO-xxcAcY on /dev/dm-1
E: MAJOR=253
E: MINOR=1
E: MPATH_SBIN_PATH=/sbin
E: SUBSYSTEM=block
E: SYSTEMD_ALIAS=/dev/block/253:1
E: SYSTEMD_READY=1
E: SYSTEMD_WANTS=lvm2-pvscan@253:1.service
E: TAGS=:systemd:
E: USEC_INITIALIZED=13601

Only Serial NUMBER

root@SGELLIN119:~# /lib/udev/scsi_id --whitelisted --device=/dev/sda
36005033330810012e80000000000007a

udev rules basics

Once a device is recognized by the kernel it triggers a series of events. First it populates /sys structures, then the kernel sends a uevent received by 'udev' and, finally, 'udev' creates a device node for the new device or parses the 'udev' rules files, under /etc/udev/rules.d/, in alphanumeric order, to decide what action should be taken.

To query the 'udev' database for device information or the properties of a device from its sysfs representation we can use 'udevadm info':

Export the content of the udev database:

# udevadm info --export-db

Print all sysfs properties of the specified device that can be used in 'udev' rules to match the specified device. It prints all devices along the chain, up to the root of sysfs that can be used in 'udev' rules.

# udevadm info --attribute-walk --name=/dev/<sdc>

For a scsi device, we may use its unique SCSI identifier

'udevd' watch for any changes in rules files and will automatically apply any changes to those files. If that's not the case, one can ask 'udevd' to reload the rules files (reloading rules does not apply any changes to already existing devices) by:

# udevadm control --reload-rules

Request to trigger the execution of all 'udev' rules:

# udevadm trigger

# Writing a simple custom rule # ——————————————————————————————

# A 'udev' rule has two parts: one part that tests certain conditions and one part that # assigns variables (name, permissions, symbolic links, etc) when all conditions are # fulfilled

# 'udev' rule operators # ——————— # # == Compare for equality # != Compare for inequality # = Assign a value to a key # += Add the value to a key that holds a list of entries # := Assign a value to a key and lock the key to prevent any further modification

Some examples of udev rules:

# vi /etc/udev/rules.d/<99-my-custom.rules>

# 1.- Create a symbolic link under /dev/mydisks/ for each matching sd device

   SUBSYSTEM=="block", KERNEL=="sd*", SYMLINK:="mydisks/%k"

If the new device is a block device, then we test if the internal kernel name starts with 'sd'. If both match, we add 'mydisks/%k' to the list of symbolic links to be created for this device

  1. Create a symbolic link and run a command for each sd matching device
   KERNEL=="sd[b-d]", SUBSYSTEM=="block", SUBSYSTEMS=="scsi", DRIVERS=="sd", SYMLINK+="shared/%k", RUN+="/usr/bin/wall MESSAGE: shared/%k  -->  $tempnode"
# ll /dev/sd*
   brw-rw---- 1 root disk 8,  0 Jul  2 17:18 /dev/sda
   brw-rw---- 1 root disk 8,  1 Jul  2 17:18 /dev/sda1
   brw-rw---- 1 root disk 8,  2 Jul  2 17:18 /dev/sda2
   brw-rw---- 1 root disk 8, 16 Jul  2 17:18 /dev/sdb
   brw-rw---- 1 root disk 8, 32 Jul  2 17:18 /dev/sdc
   brw-rw---- 1 root disk 8, 48 Jul  2 17:18 /dev/sdd
# udevadm trigger
   Broadcast message from root@mynode (Wed Jul  2 17:18:44 2014):
   MESSAGE: /dev/sdd
   Broadcast message from root@mynode (Wed Jul  2 17:18:45 2014):
   MESSAGE: /dev/sdb
   Broadcast message from root@mynode (Wed Jul  2 17:18:46 2014):
   MESSAGE: /dev/sdc
# ll /dev/shared/
   total 0
   lrwxrwxrwx 1 root root 6 Jul  2 17:18 sdb -> ../sdb
   lrwxrwxrwx 1 root root 6 Jul  2 17:18 sdc -> ../sdc
   lrwxrwxrwx 1 root root 6 Jul  2 17:18 sdd -> ../sdd

# 3.- Name a network interface bearing a given mac-address (/etc/udev/rules.d/70-persistent-net.rules)

SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="08:00:27:48:a7:ef", ATTR{type}=="1", KERNEL=="eth*", NAME="my_eth0"

# 4.- Create a symbolic link and run a command for a device matching a given SCSI identifier

SUBSYSTEM=="block", KERNEL=="sd?", PROGRAM=="/usr/lib/udev/scsi_id -g -u -d /dev/%k", RESULT=="1ATA_VBOX_HARDDISK_VB0d221c89-8b845902", SYMLINK:="shared/disk01"
# ll /dev/shared
   total 0
   lrwxrwxrwx 1 root root 6 Feb  8 16:18 disk01 -> ../sdb

# 5.- Creating Oracle ASM devices under /dev/oracle/ using disks' SCSI identifiers

ACTION=="add", BUS=="scsi", ENV{ID_SERIAL}=="360c22lm4rr4nzf88df13aa9a0c8", NAME="oracle/DGTEST_01", OWNER="oracle", GROUP="dba", MODE="0660"
linux/device_uuid.txt · Last modified: 2021/01/01 21:25 (external edit)