blkid 返回的信息比预期更多

blkid 返回的信息比预期更多

我正在遵循几年前创建的一个配方,其中有一次我需要使用它blkid来获取文件系统 UUID。

我记录了此命令以及预期的示例返回值:

blkid -o export -s UUID /dev/mapper/thathost_crypt_md3
UUID=JNbF5T-vhSD-3aVv-intG-1Tk2-IEOZ-ABWXYZ

然而,时代在进步,我不再使用 Debian“wheezy”,而是使用“jessie”。我发现在这个更新版本的 Debian 上,同一命令现在有不同的返回值:

blkid -o export -s UUID /dev/mapper/thishost_crypt_sdb
DEVNAME=/dev/mapper/thishost_crypt_sdb
UUID=bddac63e-3510-4d24-a6fb-4d0a89abcdef

blkid 的手册页似乎说应该只包含与该键匹配的值,但其中也-s UUID存在无关的内容。DEVNAME

我有一个解决方法,因为我可以在这两种情况下写这个,但输出结构应该改变似乎很奇怪:

echo "UUID=$(blkid -o value -s UUID /path/to/device)"
UUID=bddac63e-3510-4d24-a6fb-4d0a89abcdef

软件包util-linux版本分别为 2.20.1-5.3 和 2.25.2-6。

问题

  1. 为什么 UUID 形状发生变化?这很重要吗?
  2. 为什么输出格式发生变化?

答案1

DEVNAME 是设备的别名,请参见使用别名的持久设备名称

此外,国际标准似乎要求 UUID 必须为小写。

UUID生成的字符类型

澄清一下,UUID 实际上是一个 128 位值,而不是文本或数字。您可以将它们视为 128 位无符号整数。

2008 年 8 月最新的国际规范指出(重点是我的):

6.5.4 生成 UUID 的十六进制表示的软件不得使用大写字母。注 – 建议所有人类可读格式中使用的十六进制表示形式仅限于小写字母。然而,处理这种表示的软件需要接受 6.5.2 中指定的大写和小写字母。

至于打印 UUID 和别名/DEVNAME

从 util-linux/blkid.c 可以明显看出 DEVNAME 被打印,因为您正在使用-o export

} else if (ctl->output & OUTPUT_EXPORT_LIST) {
        if (num == 1 && devname)
            printf("DEVNAME=%s\n", devname); 

所以我怀疑如果没有-o export它只会打印 UUID,事实上:

$blkid -s UUID /dev/sda2
/dev/sda2: UUID="67169dd7-f319-4402-a9b2-cebcf2f3657a"
$ blkid -o export -s UUID /dev/sda2
DEVNAME=/dev/sda2
UUID=67169dd7-f319-4402-a9b2-cebcf2f3657a

相关内容