从Mac OS X卷的命令行更改“忽略此卷的所有权”


17

(此问题是我在此站点上提出的另一个问题的副产品。)

新图像始终忽略所有者/组

从“磁盘工具”创建新的磁盘映像时,将自动安装该映像。如果然后在Finder中选择该卷并按Cmd-I(对于信息窗口),则将在窗口底部看到该卷:

在此处输入图片说明

这意味着该卷上的文件所有者和组将被忽略。对于在具有不同用户帐户的计算机之间共享外部驱动器,这非常方便。对于备份卷而言,这不是一个好主意,因为您想保留备份文件的所有者/组信息。

从Finder更改此设置

要更改此设置,只需取消选中该复选框,退出并重新安装映像后该复选框将被记住。

从命令行更改(终端)

除了从Finder挂载映像之外,您还可以使用以下命令从命令行挂载映像(假设映像称为testimage.sparsebundle):

$ hdiutil attach testimage.sparsebundle/

尽管如此,所有者在数量上还是被忽略了。添加该-owners on选项(几乎)等同于取消选中上图中的复选框:

$ hdiutil attach -owners on testimage.sparsebundle/

但是,从Finder(或从不带该-owners on选项的命令行)卸载并重新装载该卷之后,将再次选中该复选框。

有人知道如何使用命令行调用使此更改持久化吗?

Answers:


17

你用diskutil那个。参见diskutil(1)enableOwnershipdisableOwnership。请注意,此设置特定于特定的操作系统安装,因为它存储在中/var/db/volinfo.database。即,如果将磁盘映像复制到新计算机,则该设置将不会保留,但是在重新启动,装入,卸载等所有情况下,它都会保留在一台计算机上。

使用diskutil发现标识,然后更改选项:

$ diskutil list
/dev/disk2
   #:                       TYPE NAME                    SIZE       IDENTIFIER
   0:                            Disk Image             *41.0 MB    disk2
$ sudo diskutil enableOwnership disk2
File system user/group ownership enabled

2
这并不完全准确-diskutil会告诉您需要指定带有安装点的磁盘,这意味着您必须将其指向要重命名的卷的片上。正确的语法(假设磁盘2的片2)为:sudo diskutil enableOwnership / dev / disk2s2如果运行:sudo diskutil list,您将能够查看所有磁盘信息,并为您的卷找到正确的磁盘和片。

我发现必须diskutil enableOwnership在两次装载之间重新调用,否则无法在装载的卷上执行二进制文件和脚本。
psoft 2012年

5

我发现这两个答案都可以使人们记住以下方式来实现所有权:

sudo diskutil enableOwnership <diskname>s<slicenum>

和:

vsdbutil -a /Volume/<volname>

但是,至少在OS X 10.11.3上,情况并非如此:

sudo diskutil disableOwnership <diskname>s<slicenum>

和:

vsdbutil -d /Volume/<volname>

两者都临时更改状态,但是下次我装入该卷时,所有权将重新启用。这似乎是操作系统中的错误。幸运的是,我找到了一个可行的解决方案。弹出要禁用所有权的所有外部磁盘。然后使用以下命令删除适当的数据库:

sudo rm /var/db/volinfo.database

您能举个例子吗,我没有得到代替s <slicenum>的内容
Sun Sun

2

用于vsdbutil将其设置为路径而不是物理驱动器:

vsdbutil -a /Volume/Diskname

尽管该man页面表明已弃用该man页面,diskutil但该页面仍引用了该页面,并且该机制似乎基于卷,UUIDs而不是基于物理磁盘/片ID。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.