为什么 Linux /etc/fstab UUID 区分大小写?

为什么 Linux /etc/fstab UUID 区分大小写?

我最近在 中添加了一行用于 USB 记忆棒的内容/etc/fstab,以便能够自动安装它,并使用 UUID 来识别设备。

之前我已经有几个外部 ext4 驱动器,它们的 UUID 以小写十六进制字符写成,[0-9a-f]如下所示:

UUID=3eeaaa43-dead-beef-cafe-243bcaaad475 /media/external_2TB ext4 rw,user,noexec,nosuid,nodev,noatime 0 2

我用 检查了我的 USB 记忆棒的 UUID ,得到了一个大写的十六进制 UUID,然后按照与 ext4 行相同的方式以小写的十六进制形式blkid输入它,如下所示:/etc/fstab

UUID=125c-a3eb  /media/usb_8GB vfat defaults,users,umask=0  0 0

mount: special device UUID=125c-a3eb does not exist

然后我想到了一个主意,尝试用大写字母(gU3w在 Vim 中),它工作正常,没有问题。为了确认这一点,我卸载了 UUID,并将 UUID 改回小写,挂载失败,然后改回大写,挂载成功。

据我所知,UUID 是一个十六进制数字,而不是字符串,因此字母的大小写应该无关紧要。但显然事实并非如此。RFC4122将 UUID 定义为“输入时不区分大小写”。我是否遗漏了什么,或者这种行为是否存在mount错误umount

如果重要的话,我正在使用带有自定义内核版本 3.6.8 的 Debian GNU/Linux 7.0 Wheezy。

答案1

笔记:这是推测,基于 Unix/Linux 中设备的典型访问方式以及文件名区分大小写的事实。

Linux 使用 UUID 在 中创建对象/dev/disk/by-uuid。与 Linux 上的任何“文件”一样,名称区分大小写。因此,当通过 UUID 引用磁盘时,比较是作为十六进制字符串上的文件名比较而不是对所述字符串所表示的数据进行二进制比较。

答案2

@sparkie 的回答暗示了这一点,并且原始问题的部分内容是,FAT 分区的 UUID(似乎?)始终需要大写(例如UUID=125C-A3EB),而 ext4 分区的 UUID 始终需要小写(例如UUID=3eeaaa43-dead-beef-cafe-243bcaaad475)。

答案3

对于 vfat,我们实际上看不到完整的 UUID。相反,它是一个卷 ID(序列号)。这些当然不受上述 RFC 的约束。

相关内容