====== 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/
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
- 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"