从脚本获取 / 文件系统的 UUID

从脚本获取 / 文件系统的 UUID

如何获取包含/文件系统的卷的 UUID?到目前为止,我发现最好的方法是blkid -o list。但这种输出是人类可读的,很难解析。也许有更好的方法?

我需要使用系统特定的模板来参数化配置管理。

请注意,blkid对于那些将来可能重复使用我的问题结果的人来说,陷阱是:blkid缓存以前运行的结果/etc/blkid.tab。这意味着blkid第一次以非 root 用户身份运行不会返回任何数据。此外,在 root 运行后以非 root 用户身份运行blkid将返回过时(可能不正确)的数据。

答案1

使用findmnt

$ findmnt /        
TARGET SOURCE       FSTYPE OPTIONS
/      /dev/md127p1 ext4   rw,relatime,stripe=256,data=ordered
$ findmnt / -o UUID
UUID
046a554b-d9f5-4b23-82e6-ffaeb98284aa
$ findmnt / -o UUID -n
046a554b-d9f5-4b23-82e6-ffaeb98284aa

它还有几个选项来控制如何查找信息以及如何呈现信息(包括 JSON 输出!)。它是软件包的一部分mount,因此可以在任何 Ubuntu 安装中使用。

答案2

另一个解决方案:

lsblk -nr -o UUID,MOUNTPOINT | grep -Po '.*(?= /$)'
  • -n抑制标题(不是真正需要的,但解析起来更安全)
  • -r制作原始输出(使其解析更安全)
  • -o UUID,MOUNTPOINT仅包含必要信息

答案3

您可以使用lsblk命令输出 UUID,但您需要分区的设备名称(例如 /dev/sda2)。您可以使用命令df并修剪输出来获取此信息。使用命令替换将设备名称提供给lsblk。看来您需要 sudo 才能访问 UUID,尽管 lsblk 的正常输出不需要它:

sudo lsblk -n -o UUID "$(df -P / | tail -n1 | cut -d' ' -f1)"

答案4

将值调整mountpoint为相关文件系统的当前挂载点:

dev="$(exec awk -v mountpoint='/' '($2 == mountpoint){ print $1; quit; }' /proc/mounts)" &&
sudo blkid -o export -- "$dev" | sed -ne 's/^UUID=//p'

相关内容