daichi.dev

OSXシングルユーザーモードでUSBメモリをマウントする

@daichirata

会社のiMacをYosemiteにアップデートした際に、徳が足りず何かが色々とうまく行かなかったせいでOSが起動しなくなってしまった。PRAMやSMCのクリアでもどうにもならず(そもそもリセットで何とかなった試しは無いが)、半ば諦めつつシングルユーザーモードで起動した所ログイン出来たのでUSBメモリをマウントしてデータを復旧した。

シングルユーザーモードで起動する方法は、

この際に、私の環境ではiPhoneとか周辺機器をつないでいる場合シングルユーザーモードが起動せずハマったので気をつけた方がいい。PRAMをリセットするとスピーカー音量もクリアされてしまうのでひたすら起動音をオフィスに流すことになる。PRAMはリセットしないほうがいいと思う。それか最後の手段に取っておくべきだ。

USBメモリのマウント

シングルユーザーモードでログインした場合ルートデバイスがReadOnlyでマウントされている。ログインした際のコンソールの最後にも出力されているが、

mount –uw /

コマンドを実行することで書き込みが出来るようになるので色々と試行錯誤したい場合は実行しておく。ログインした際の出力には他にもfsckとか有用な事が書かれているしOSXのバージョンによっても微妙に更新されているようなのでしっかりと読んでおいたほうが良い。

肝心のUSBメモリだが、シングルユーザーモードではデーモンが起動しないためUSBメモリをつないでも自動的にマウントされて書き込めるなんてことは無い。なので自分でマウントあるいはフォーマットからやる必要がある。USBメモリ以外の外部のストレージを繋いでいない場合、disk1s2というデバイスとしてos側から見えるのでそのデバイスをマウントしてあげよう。

まずUSBメモリが何のファイルシステムでフォーマットされているかを確認する。

fstyp /dev/disk1s2

ntfsとかhfsと出力されるはずなので、次はマウント用のディレクトリを作成する。

midir -p /tmp/mnt/drive2

最後に、先程のファイルシステムに合わせてマウントする。

mount –t hfs /dev/disk1s2 /tmp/mnt/drive2

後はデータをマウントしたディレクトリに移動してサルベージしてあげよう。

余談

ちなみに、USBメモリを使わずともSambaとかnfsとかのネットワークストレージに接続するとか、そもそもログインできてるならscpとかで他のマシンに転送すればいいかと最初は思っていたが上で書いたようにデーモンが起動しないためネットワーク周りの機能が使えないのでダメだった。(/etc/rc.d以下の起動スクリプトを手動で実行すれば行けるみたいだが徳が足りないのかうまく行かなかった。)

これを機にOSXのある程度の環境構築を自動化したのでその知見はそのうち書きたい。特に、defaults周りはあまりまとまった情報が無いので積極的に公開していくことで皆から知見を分けてもらいつつ徳を積みたい。