让 diskutil 命令在 OSX Mavericks 单用户模式下运行

让 diskutil 命令在 OSX Mavericks 单用户模式下运行

我目前正在编写一些单用户模式维护脚本。我目前的目标是能够在单用户模式下使用 diskutil 命令执行权限修复和磁盘格式化。在以前的 OS X 版本中执行此任务很简单,只需挂载根分区并启动以下启动守护程序即可:

com.apple.diskmanagementd

com.apple.diskarbitrationd

之后我只需要运行以下命令即可成功修复权限:

diskutil repairpermissions /

然而,在 Mavericks 中,此命令不再起作用,我不明白为什么。运行 diskutil 命令(即使没有参数)也会返回一条简单且无用的消息:

Killed: 9

我不知道这是怎么回事。除了 diskutil 所需的磁盘仲裁守护进程外,我的维护脚本还加载了以下守护进程:

com.apple.notifyd

com.apple.syslogd

com.apple.configd

com.apple.kuncd

com.apple.kextd

com.apple.KernelEventAgent

com.apple.distnoted.xpc.daemon

com.apple.aslmanager

com.apple.opendirectoryd

com.apple.coreservicesd

com.apple.securityd

com.apple.fseventsd

com.apple.cfprefsd.xpc.daemon

无论我加载上述所有守护进程还是只加载之前运行 diskutil 所需的两个守护进程,我都会得到相同的响应。如果我选​​择从单用户模式启动(通过加载 /System/Library/LaunchDaemons 的全部内容),我可以在计算机完成启动过程后使用 diskutil。

是否有人更了解 Mac OS 内部工作原理,可能确定缺少了什么?

答案1

我不确定是什么导致了这个问题,但似乎不是缺少守护进程——我尝试加载/System/Library/LaunchDaemons除 之外的所有内容com.apple.WindowServer.plist,但仍然以同样的方式失败。它甚至在运行 时也失败了diskutil,而通常只会打印使用情况摘要。此外,“Killed: 9”表明它本身并没有崩溃,而是其他东西(launchd?)正在杀死它。

无论如何,还是有一点好消息:diskutil repairpermissions它实际上只是程序的一个前端repair_packages,并且似乎在单用户模式下运行良好(即使没有加载任何守护进程):

/usr/libexec/repair_packages --repair --standard-pkgs

格式化磁盘可能会更困难。您可能需要考虑使用gptnewfs_hfs等。

答案2

el capitan 现在正在保护权限,即使使用 /usr/libexec/repair_packages --repair --standard-pkgs(感谢),也无法修复权限 - 要修复的文件系统是只读的 - 有什么提示吗? 谨致问候并致谢 Martin

相关内容