私は現在、いくつかのシングルユーザーモードのメンテナンススクリプトを書いています。私の現在の目標は、シングルユーザーモードでdiskutilコマンドを使用して権限の修復とディスクのフォーマットを実行できるようにすることです。以前のバージョンのOSXでこのタスクを実行するのは、ルートパーティションをマウントし、次の起動デーモンを起動するだけでした。
com.Apple.diskmanagementd
com.Apple.diskarbitrationd
その後、アクセス許可を正常に修復するには、次のコマンドを実行するだけで済みました。
diskutil repairpermissions /
ただし、マーベリックスでは、このコマンドは機能しなくなり、その理由がわかりません。 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の動作に以前必要だった2つだけをロードしても、同じ応答が返されます。シングルユーザーモードから起動することを選択した場合(/ System/Library/LaunchDaemonsのコンテンツ全体をロードすることにより)、コンピューターが起動プロセスを終了した後、diskutilを使用できます。
Mac OSの内部動作に精通している人が、何が欠けているのかを判断できるでしょうか。
何が問題を引き起こしているのかわかりませんが、デーモンが欠落しているようには見えません。/System/Library/LaunchDaemons
を除くすべてをcom.Apple.WindowServer.plist
にロードしようとしましたが、それでも同じように失敗しました。 diskutil
を実行するだけでも失敗します。これは通常、使用状況の概要を出力するだけです。また、「Killed:9」は、それ自体がクラッシュしていないことを示していますが、他の何か(launchd
?)がそれを殺しています。
とにかく、ちょっとした朗報があります。diskutil repairpermissions
は実際にはrepair_packages
プログラムのフロントエンドであり、シングルユーザーモードでは正常に動作するようです(デーモンがまったくロードされていない場合でも)。 :
/usr/libexec/repair_packages --repair --standard-pkgs
ディスクのフォーマットはおそらくもっと難しいでしょう。 gpt
、newfs_hfs
などの使用を検討する必要がある場合があります。