我正在遵循几年前创建的一个配方,其中有一次我需要使用它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。
问题
- 为什么 UUID 形状发生变化?这很重要吗?
- 为什么输出格式发生变化?
答案1
DEVNAME 是设备的别名,请参见使用别名的持久设备名称
此外,国际标准似乎要求 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