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

Dav*_*d G 8 windows-7 usb-flash-drive volume-label

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

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

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

以上两种方法都允许卷标长达 15 个字符而没有其他明显的不良影响。

关于这里发生了什么的任何想法?Microsoft 在从 Windows 7 到 Windows 8.1 的过渡中纠正了这个问题的事实表明,这可能是一个错误,或者某种其他类型的未定义或其他有问题的行为。

use*_*686 9

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

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

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

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

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

只要标签是非标准的,但可能是安全的使用-这是不可能的,那些备用字节将永远被重用为别的,因为微软知道,再利用他们会抵触15字节的标签,人们在过去创建的。如果他们在Win7中允许它,他们必须长期支持它。