如何以模式锁定 macOS 卷以进行独占读/写访问?

Posted

技术标签:

【中文标题】如何以模式锁定 macOS 卷以进行独占读/写访问?【英文标题】:How to modally lock a macOS volume for exclusive read/write access? 【发布时间】:2020-10-17 03:12:30 【问题描述】:

我正在编写一个需要能够读取并可能修改实时卷的磁盘工具。

如果卷正在使用中,例如如果是启动卷,则不能简单地卸载卷来执行这些操作。

磁盘工具(或底层的diskutil 工具)能够在运行急救或通过“分区”对话框调整启动卷的大小时锁定已安装的卷。

我可以使用什么 API 来完成同样的任务? IE。我必须进行哪些调用才能锁定卷(并刷新挂起的写入),以及(可选)如何最好地锁定 UI,以便用户不会意外使用同时尝试修改卷的其他应用程序?

我可以接受私有框架和其他未记录的方式。毕竟,这是一个修复程序。它不会出现在 Mac App Store 中;)

【问题讨论】:

私有框架是否适合您?您可能会在 DiskManagement 框架中找到有用的东西。不确定是否有任何公开内容。 【参考方案1】:

看来fcntl (fd, F_FREEZE_FS) 是解决方案。

我通过查看命令fsck_apfs 的代码找到了这个调用。它实际上为“live fsck (lock down for verify-only)”提供了“-l”选项。

现在我知道要寻找什么,我意识到它也记录在 Amit Singh 的 Mac OS X Internals 书中。

【讨论】:

以上是关于如何以模式锁定 macOS 卷以进行独占读/写访问?的主要内容,如果未能解决你的问题,请参考以下文章

独占锁定文件,然后删除/移动它

使用读写锁实现线程同步

Semaphore

您不具有对数据库的独占访问权限这一次。如果继续进行更改,您可能无法将其保存

ASP网页制作中,在连接Access数据库时,总是出现数据库被以独占方式打开,或者是没有访问权限

独占打开文件/锁定文件