我有一些 OS X 代码,它使用卷的 UUID 进行一些计算。我正在为 Windows 重写这些计算。我有一个要求,对于给定的驱动器,计算在两个操作系统上产生完全相同的结果;不可能更改计算以使用更好的数据,例如磁盘的序列号。
不幸的是,我找不到关于这个 UUID 的太多信息。我在 Windows 上能找到的最接近的数据是已安装的卷名,它采用 GUID 的形式;巧合的是,OS X 上的卷的 UUID 也是 GUID。
Windows 上安装的卷名是否与 OS X 上的 UUID 相同?卷是否知道自己的 UUID,或者这种关系是操作系统所拥有的?
答案1
在仔细研究了 Darwin 源代码后,我发现 VolumeUUID 存储在 Volume Header 中的 FinderInfo 下。
请参阅http://www.opensource.apple.com/source/hfs/hfs-191.1/hfs_util/hfsutil_main.c
还可以浏览此处了解更多信息:http://www.opensource.apple.com/source/hfs/hfs-191.1/
HFS+ VolumeUUID 与 GPT 中该分区的 UUID 无关。我刚刚检查了我的系统,GPT 中的“唯一分区 GUID”与此系统上我的主启动分区的 HFS+ VolumeUUID 完全不同。
许多其他文件系统也嵌入了某种唯一 ID,尽管不一定是 UUID/GUID。
为了记录,这里是唯一 ID 的位置,例如,在某些其他文件系统格式上:
- NTFS:引导扇区,卷序列号字段,8字节
- FAT 系列:扩展 BIOS 参数块,卷 ID, 4字节
- 外部家庭:超级块,s_uuid,16字节