Journaling の壊れた HDD の復旧

Time Machine 用に使っていた FireWIre の外付け HDD が mount できなくなりました。2 つの partition に分割してあり、片方 (/dev/disk1s12) は正常に使用できるものの、もう一方 (/dev/disk1s10) だけが mount できない状態です。また、Disk Utility で検証しても問題は報告されず、単に mount のみができない症状でした。Mount しようとすると、"The disk "Time Machine HD" could not be mounted. Try running First Aid on the disk and then retry mounting." と出ていました。

dmesg で error が出ていないかを調べてみると、"journal magic is bad" という error を吐いていることが分かりました。

$ sudo dmesg
Password:
(略)
jnl: disk1s10: open: journal magic is bad (0x0 != 0x4a4e4c78)
hfs: late jnl init: failed to open/create the journal (retval 0).
(略)

この HDD は、HFS+ の journaling 有りで format してあるため、恐らく journaling の部分で何か異常が発生したのでしょう。Disk Utility 経由で mount を試みてみても、同様の error が dmesg で取得されました。

ここ を参考に、diskutil コマンドを使うことで解決しました。

まずは Terminal から、journaling を切ってみます。

$ diskutil disableJournal /dev/disk1s10
An error occurred journaling the filesystem: Could not mount disk (-9954)

Mount できないという error が出たので、さらに force という引数をつけて実行しました。

$ diskutil disableJournal force /dev/disk1s10
An error occurred journaling the filesystem: The underlying task reported failure on exit (-9972)

ここでも何か error が出たものの、Disk Utility から /dev/disk1s10 を mount できるように変わっていました。このままでは journaling が無効になっているなので、再度 diskutil を使って journaling を有効にします。

$ diskutil enableJournal /dev/disk1s10
Journaling has been enabled for volume Time Machine HD on disk1s10

今度はもう error は出ませんでした。

以上で、mount できなくなってしまった HDD を (初期化せずに) 再度使えるようにできました。恐らく、USB の HDD でも同じ対処でいけるはずです。USB 接続の HDD でも同様に解決できると、コメント欄で Red Eyes さんにご報告頂きました。