Depending on the tool/option used a unique identifier may not be always available. For example the default dos partition table type created using fdisk would not generate any unique ID.
Model: Xen Virtual Block Device (xvd) Disk /dev/xvdb: 268GB Sector size (logical/physical): 512B/512B Partition Table: msdos Disk Flags: Number Start End Size Type File system Flags 1 1049kB 268GB 268GB primary ext4 udevadm info --query=property /dev/xvdd1 DEVNAME=/dev/xvdd1 DEVPATH=/devices/vbd-51760/block/xvdd/xvdd1 DEVTYPE=partition ID_PART_ENTRY_DISK=202:48 ID_PART_ENTRY_NUMBER=1 ID_PART_ENTRY_OFFSET=2048 ID_PART_ENTRY_SCHEME=dos ID_PART_ENTRY_SIZE=209713152 ID_PART_ENTRY_TYPE=0x83 ID_PART_TABLE_TYPE=dos MAJOR=202 MINOR=49 SUBSYSTEM=block TAGS=:systemd: USEC_INITIALIZED=634695673On the other-hand if the partition table type was GPT, this could generate several unique IDs which could be used in the udev rule to identify the partition.
fdisk /dev/sdd Command (m for help): g Building a new GPT disklabel (GUID: EC7F1589-8BD2-4C94-8F8F-D22013D40406) Command (m for help): n Partition number (1-128, default 1): First sector (2048-20971486, default 2048): Last sector, +sectors or +size{K,M,G,T,P} (2048-20971486, default 20971486): Created partition 1 Command (m for help): w The partition table has been altered! Calling ioctl() to re-read partition table. Syncing disks. fdisk -l /dev/sdd WARNING: fdisk GPT support is currently new, and therefore in an experimental phase. Use at your own discretion. Disk /dev/sdd: 10.7 GB, 10737418240 bytes, 20971520 sectors Units = sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk label type: gpt Disk identifier: EC7F1589-8BD2-4C94-8F8F-D22013D40406 # Start End Size Type Name 1 2048 20971486 10G Linux filesyste udevadm info --query=property /dev/sdd1 ... ID_PART_ENTRY_DISK=8:48 ID_PART_ENTRY_NUMBER=1 ID_PART_ENTRY_OFFSET=2048 ID_PART_ENTRY_SCHEME=gpt ID_PART_ENTRY_SIZE=20969439 ID_PART_ENTRY_TYPE=0fc63daf-8483-4772-8e79-3d69d8477de4 ID_PART_ENTRY_UUID=573dded4-21f1-48ce-925f-e02c5d94dace ID_PART_TABLE_TYPE=gpt ID_PATH=pci-0000:00:0d.0-ata-4.0 ID_PATH_TAG=pci-0000_00_0d_0-ata-4_0 ... SUBSYSTEM=block TAGS=:systemd:The partition UUID could be found out using blkid as well.
blkid /dev/sdd1 /dev/sdd1: PARTLABEL="data" PARTUUID="573dded4-21f1-48ce-925f-e02c5d94dace"The ID_PART_ENTRY_UUID could be used in the udev rule.
KERNEL=="sd?1",ENV{ID_PART_ENTRY_UUID}=="573dded4-21f1-48ce-925f-e02c5d94dace", SYMLINK+="oracleasm/cgdata1", OWNER="oracle", GROUP="asmadmin", MODE="0660"
Similar to fdisk with g (gpt) option, parted could be used to achieve the same.
parted /dev/xvdd GNU Parted 3.1 Using /dev/xvdd Welcome to GNU Parted! Type 'help' to view a list of commands. (parted) mktable gpt Warning: The existing disk label on /dev/xvdd will be destroyed and all data on this disk will be lost. Do you want to continue? Yes/No? yes (parted) mkpart data 0% 100% (parted) print all Model: Xen Virtual Block Device (xvd) Disk /dev/xvdd: 107GB Sector size (logical/physical): 512B/512B Partition Table: gpt Disk Flags: Number Start End Size File system Name Flags 1 1049kB 107GB 107GB data udevadm info --query=property /dev/xvdd1 DEVLINKS=/dev/disk/by-partlabel/data /dev/disk/by-partuuid/5a081ffa-56e2-467b-82a9-16e3a4f441bd DEVNAME=/dev/xvdd1 DEVPATH=/devices/vbd-51760/block/xvdd/xvdd1 DEVTYPE=partition ID_PART_ENTRY_DISK=202:48 ID_PART_ENTRY_NAME=data ID_PART_ENTRY_NUMBER=1 ID_PART_ENTRY_OFFSET=2048 ID_PART_ENTRY_SCHEME=gpt ID_PART_ENTRY_SIZE=209711104 ID_PART_ENTRY_TYPE=ebd0a0a2-b9e5-4433-87c0-68b6b72699c7 ID_PART_ENTRY_UUID=5a081ffa-56e2-467b-82a9-16e3a4f441bd ID_PART_TABLE_TYPE=gpt MAJOR=202 MINOR=49 SUBSYSTEM=block TAGS=:systemd: USEC_INITIALIZED=685327395