exFAT 卷标长度:11 还是 15 个字符?

exFAT 卷标长度:11 还是 15 个字符?

网络上有大量参考资料指出,exFAT 卷的最大标签长度应为 11 个字符。但是,我知道有两种方法可以超过这个长度:

  1. exfatlabel使用exfat-utils 包中的Linux 工具;

  2. 在 Windows 7 下,使用“右键单击驱动器”上下文菜单中的“格式化”选项来格式化 USB 设备。请注意,Windows 8.1 下的相同选项不再允许长度超过 11 个字符的标签。

以上两种方式都允许卷标长度最多为 15 个字符,且不会产生其他明显的不良影响。

大家知道这是怎么回事吗?微软在从 Windows 7 过渡到 Windows 8.1 时纠正了这个问题,这表明这可能是一个错误,或者是某种未定义或其他可疑的行为。

答案1

exFAT 将卷标存储在一个特殊的目录条目中。整个条目的大小始终为 32 个字节,因此“文件名”和“卷标”条目都有 30 个字节的空间用于文本本身 - 这意味着15 个 UCS-2 代码点从技术上来说,可以存储。(卷标只有一个条目,而文件名可以跨越多个。)

然而,exFAT 1.0 规范美国专利 20090164440(第 21 页,第 23 表)指出标签长度字节的有效范围是 0 到 11 之间,并将该目录条目的剩余空间标记为“保留”。

因此,我的猜测是,微软决定故意将 exFAT 标签限制为与 FAT 相同的大小,以减少与其他软件(例如难以更新的设备固件)的兼容性问题。(也许另一种实现试图在 FAT 和 exFAT 之间共享代码,而长标签导致其崩溃?)

(FAT 以完全相同的方式存储卷标,因此由于使用 8.3 文件名字段,它具有 11 字节的限制。)

同时,exfat-utils 要么不是完全按照规范编写的(也许其中的部分内容是逆向工程的),要么根本不关心这个问题,并充分利用了可用空间。

这么长的标签是非标准的,但使用起来可能是安全的——这些多余的字节不太可能曾经不能再用于其他用途,因为微软知道重新利用它们会与老的过去人们创建的 15 字节标签。如果他们在 Win7 中允许它,他们必须长期支持它。

相关内容