如何将Mac OS X上卷的UUID更改为SPECIFIED值?

弓箭手

这类似于此处提出的问题:

如何更改Mac OS X 10.6上卷的UUID?

唯一的区别是我想将其更改为特定值,而不是随机值。hfs.util似乎只是随机的。

我考虑过修改hfs.util源,以允许我指定值。当我四处浏览代码以寻找从哪里开始进行更改时,我想起了为什么C不是我最喜欢的语言。几次编译错误和段错误之后,我失去了尝试修改此工具的热情。休息一会后,我愿意再次尝试。但是,我认为必须有一种更简便的方法来更改我不知道的卷的UUID。

因此,在我再浪费时间之前,没有人知道一种简单的方法吗?还是有任何C专家愿意加入我的努力,使hfs.util将UUID更改为指定值?

这是我为了能够从源OS X 10.6.8编译该工具而进行的更改:

hfsutil_jnl.c:

47: #include <hfs_fsctl.h>

hfsutil_main.c:

80: #include <uuid/uuid.h>
81: /* REMOVED */

并且,如本文所述,将fs.c中第166行的以下内容添加到hfsutil_main.c中(因为namespace.h在系统上不存在):

static unsigned char kFSUUIDNamespaceSHA1[] = {0xB3,0xE2,0x0F,0x39,0xF2,0x92,0x11,0xD6,0x97,0xA4,0x00,0x30,0x65,0x43,0xEC,0xAC};

最后,我抓取了此文件并将其添加到工作目录http://www.opensource.apple.com/source/xnu/xnu-1456.1.26/bsd/hfs/hfs_fsctl.h

模拟文件

我尚未研究hfs.util的源代码,可能对您来说有用为时已晚,但我认为我可以提供一些有用的信息。

用于HFS +卷的UUID似乎是UUID规范涵盖的所有变体,并且是版本3类型,即名称空间和名称,通过MD5转换为UUID(请参阅Wikipedia上的详细信息)。

实际的磁盘标识符(在规范中代替名称)似乎只有64位,可以通过在Apple用作卷标识符的名称空间的UUID之前添加,然后根据规范转换为128位UUID MD5哈希。

这不涉及计算机组件值,当前时间等。这些值用于其他类型的UUID。但是,它确实涉及一个“名称空间” UUID(以标识我们正在“命名”磁盘卷的事实),然后是一个“名称”(磁盘的实际标识符)。

让我想到的一件事不仅是@chriv的声明,它的代码似乎仅使用64位,还包括SuperDuper附带的“秘密”实用程序处理UUID的方式!

超级骗子!Mac OS X的备份实用程序具有一个“隐藏”命令行工具,该工具可让您检索和设置卷UUID。但它同时检索并将其设置为64位序列(以十六进制表示)。看来这些位与Apple磁盘实用程序报告的实际值完全不同。

有关更多信息,请参见:

http://www.shirt-pocket.com/forums/archive/index.php/t-1186.html

http://www.shirt-pocket.com/forums/archive/index.php/t-6173.html

注意:请通读这些支持讨论,因为似乎有些陷阱,例如有时需要重新启动。


更新

我看了一眼苹果公司的消息。我确认我上面写的内容。磁盘上保存的是该卷的64位标识符(它是通过获取一组伪随机数据位的SHA1哈希的前64位来随机生成的:正常运行时间,引导时间,主机ID,主机名,内核发行版)字符串,内核版本字符串,平均负载,VM统计信息和当前时间)。

在版本3 UUID中,这是一个“名称”。因此,磁盘上保存的是卷的64位“名称”,而不是UUID。

这些工具报告的128位UUID不会保存,出于显示目的,每次都会从“名称”和“命名空间”(命名空间是固定的,并且OP必须手动将其添加到kFSUUIDNamespaceSHA1常量)中进行计算。源,因为缺少包含它的标头:它表示卷“名称”的“名称空间”,这是实际保存在卷上以标识它们的64位内容)。

从“名称”到UUID很容易(基本上,您将标准算法应用于版本3 UUID),但是从UUID回到“名称”基本上是不可能的。换句话说,OP的答案是:可能知道卷的“名称”(例如,如果要将备份还原到新磁盘,并且已经保存了其名称以及数据) ,但如果您只知道UUID,则不会。正确设置名称得到预期的UUID,但是您需要该名称,并且无法根据UUID进行计算。


关于苹果代码的注释(阅读这些代码并看一下代码,一切都会变得很清楚):

如我所写,磁盘上所有的都是“名称”。仅使用第3版算法(用于“名称空间”中“名称”的UUID)来计算UUID,以用于可视化。

  • kFSUUIDNamespaceSHA1是“名称空间”常量,如上所述。
  • uuid_create_md5_from_name是版本3 UUID算法,用于计算给定“名称空间”和“名称”的版本3 UUID。
  • GenerateVolumeUUID生成一个新的随机“名称”(注意:尽管有函数名称,但仅是“名称”,而不是UUID)。

根据当前是否安装了卷,设置和获取“名称”到磁盘是不同的。“名称”存储在该卷的“查找器信息”中。可以使用getattrlistsetattrlist来获取和设置已装载卷的“ Finder Info”数据,但是如果未装载该卷,它们将直接访问该卷数据(毕竟,这是unix,而未装载的卷是一个块可以通过根目录作为文件访问的设备)。

  • SetVolumeUUIDSetVolumeUUIDRawSetVolumeUUIDAttrGetVolumeUUIDGetVolumeUUIDRawGetVolumeUUIDAttr确实读取/写入“名称”(同样,尽管名称如此,它们仅处理卷的“名称”,而不处理UUID)。* Raw函数通过设备“文件”处理未装入的卷的直接访问,* Attr函数使用get / setattrlist API。普通的将检查是否已安装该卷,然后调用相应的* Raw / * Attr版本。

然后是实现该工具功能的“高级”功能:

  • DoGetUUIDKey获取“名称”,调整字节顺序,然后计算要显示的UUID。
  • DoChangeUUIDKey创建一个随机的新“名称”,并将其写入卷中。

因此,您可以做的最好的事情就是重新编码嵌入在Shirt Pocket的SuperDuper中的小命令行工具的相同功能!(请参阅我上面发布的链接)。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何将Mac OS X上的Login Shell从bash更改为zsh?

来自分类Dev

如何将Mac OS X钥匙串与SSH密钥一起使用?

来自分类Dev

如何将Mac OS X .app作为一个文件置于版本控制下?

来自分类Dev

如何将Mac OS X无线适配器置于监视模式

来自分类Dev

如何将ISO映像安装到Mac OS X中的特定文件夹?

来自分类Dev

如何将现有的VMWare Fusion从Mac OS X加载到Windows PC?

来自分类Dev

如何将文件从Mac OS X桌面获取到远程服务器?

来自分类Dev

如何将os ubuntu 14.04完全更改为Windows?

来自分类Dev

如何将Mac Pro 1.1从OS X 10.6.8升级到OS X 10.9 Mavericks?

来自分类Dev

如何将id更改为uuid?

来自分类Dev

如何将Subversion 1.7安装到Mac OS?

来自分类Dev

如何将 os.system() 调用更改为 subprocess.call() 以获取以下代码

来自分类Dev

如何将OS值传递给sql

来自分类Dev

VMware ESXi 6.0-如何将Mac Pro的光盘驱动器传递(添加)到VM(运行OS X Mountain Lion)?

来自分类Dev

如何将下载的文件(音频、文档)自动保存到 mac os x 沙盒应用程序中的用户下载文件夹?

来自分类Dev

如何在Mac OS X中将文件的创建时间更改为较新的日期?

来自分类Dev

Mac OS X如何设置$ PATH的值?

来自分类Dev

如何在OS X中将终端背景更改为照片

来自分类Dev

在Mac OS X Yosemite上卷曲本地主机名

来自分类Dev

将Mac OS X终端重置为默认值

来自分类Dev

如何将“ \”更改为“ /”

来自分类Dev

如何在Mac OS X 10.9 Mavericks中将Vim从“ -xterm_clipboard”更改为“ + xterm_clipboard”?

来自分类Dev

如何在Mac OS X中更改新帐户的默认值?

来自分类Dev

如何从Mac OS X更改Windows域密码?

来自分类Dev

如何使CRFSuite在Mac OS X上运行?

来自分类Dev

如何从Mac OS X卸载Puppet?

来自分类Dev

如何从Terminal找出Mac OS X版本?

来自分类Dev

安装Anaconda3会将Mac OS X的默认Python版本更改为3.4吗?

来自分类Dev

安装Anaconda3会将Mac OS X的默认Python版本更改为3.4吗?

Related 相关文章

  1. 1

    如何将Mac OS X上的Login Shell从bash更改为zsh?

  2. 2

    如何将Mac OS X钥匙串与SSH密钥一起使用?

  3. 3

    如何将Mac OS X .app作为一个文件置于版本控制下?

  4. 4

    如何将Mac OS X无线适配器置于监视模式

  5. 5

    如何将ISO映像安装到Mac OS X中的特定文件夹?

  6. 6

    如何将现有的VMWare Fusion从Mac OS X加载到Windows PC?

  7. 7

    如何将文件从Mac OS X桌面获取到远程服务器?

  8. 8

    如何将os ubuntu 14.04完全更改为Windows?

  9. 9

    如何将Mac Pro 1.1从OS X 10.6.8升级到OS X 10.9 Mavericks?

  10. 10

    如何将id更改为uuid?

  11. 11

    如何将Subversion 1.7安装到Mac OS?

  12. 12

    如何将 os.system() 调用更改为 subprocess.call() 以获取以下代码

  13. 13

    如何将OS值传递给sql

  14. 14

    VMware ESXi 6.0-如何将Mac Pro的光盘驱动器传递(添加)到VM(运行OS X Mountain Lion)?

  15. 15

    如何将下载的文件(音频、文档)自动保存到 mac os x 沙盒应用程序中的用户下载文件夹?

  16. 16

    如何在Mac OS X中将文件的创建时间更改为较新的日期?

  17. 17

    Mac OS X如何设置$ PATH的值?

  18. 18

    如何在OS X中将终端背景更改为照片

  19. 19

    在Mac OS X Yosemite上卷曲本地主机名

  20. 20

    将Mac OS X终端重置为默认值

  21. 21

    如何将“ \”更改为“ /”

  22. 22

    如何在Mac OS X 10.9 Mavericks中将Vim从“ -xterm_clipboard”更改为“ + xterm_clipboard”?

  23. 23

    如何在Mac OS X中更改新帐户的默认值?

  24. 24

    如何从Mac OS X更改Windows域密码?

  25. 25

    如何使CRFSuite在Mac OS X上运行?

  26. 26

    如何从Mac OS X卸载Puppet?

  27. 27

    如何从Terminal找出Mac OS X版本?

  28. 28

    安装Anaconda3会将Mac OS X的默认Python版本更改为3.4吗?

  29. 29

    安装Anaconda3会将Mac OS X的默认Python版本更改为3.4吗?

热门标签

归档