![如何获取分区的 UUID 并将 Bash 变量定义为与其相等?](https://linux22.com/image/85651/%E5%A6%82%E4%BD%95%E8%8E%B7%E5%8F%96%E5%88%86%E5%8C%BA%E7%9A%84%20UUID%20%E5%B9%B6%E5%B0%86%20Bash%20%E5%8F%98%E9%87%8F%E5%AE%9A%E4%B9%89%E4%B8%BA%E4%B8%8E%E5%85%B6%E7%9B%B8%E7%AD%89%EF%BC%9F.png)
我想将 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