如何获取分区的 UUID 并将 Bash 变量定义为与其相等?

如何获取分区的 UUID 并将 Bash 变量定义为与其相等?

我想将 Bash 变量定义PART_ID为等于/dev/sdb1分区的 UUID。我最接近所需答案的是以下输出:

ls -ld /dev/disk/by-uuid/* | grep sdb1

对我来说,这给出了:

lrwxrwxrwx 1 root root 10 Mar 16 17:02 /dev/disk/by-uuid/d26c3e60-0cfb-4118-9dec-1f1819439790 -> ../../sdb1

这对我来说不是一个可接受的设置值PART_ID。相反,应该PART_ID等于的是d26c3e60-0cfb-4118-9dec-1f1819439790

答案1

请注意,这是分区上文件系统的 UUID(或 udev 脚本知道的具有 UUID 的其他结构化数据),而不是分区本身的 UUID(无论如何,并非所有分区方案都会提供用于分区的 UUID)。也可以看看blkid 和 mdadm 的 UUID 之间的区别?

基于 Linux 的系统上获取 FS UUID 的一些选项:

fs_uuid=$(blkid -o value -s UUID /dev/sdb1)
fs_uuid=$(lsblk -no UUID /dev/sdb1)
fs_uuid=$(udevadm info -n sdb1 -q property | sed -n 's/^ID_FS_UUID=//p')
fs_uuid=$(find /dev/disk/by-uuid -lname '*/sdb1' -printf %f)

第一个可能需要超级用户权限或至少需要读取设备的权限。

如果文件系统已挂载,您还可以使用:

fs_uuid=$(findmnt -fn -o UUID /dev/sdb1)

答案2

你可以这样做

PART_ID=$(blkid -o value -s UUID /dev/sdb1)

答案3

把它们放在一起(谢谢你,@Mongrel!):

这将自动获取

DISK=$(mount | grep " $1 type" | awk '{print $1}')
PART_UUID=$(blkid -o value -s UUID ${DISK})
echo "DISK UUID ($1): ${PART_UUID}"

输出:

DISK UUID (/): cf9eb16f-c1fa-45d1-9764-b10f064cc993

相关内容