水深1024m

技術的なメモとか日記的なもの

dd と僕

自分のメインマシンこと MacBook ProSSDUbuntu インストールディスクを dd して破壊した。

正直書くのも憚られる話で、お前来年から本当に職業エンジニアになれんのって話なのだけど、
本当にクリティカルな状況下でやらかさないよう戒めとしてまとめることにした。
びっくりするほどレベルの低い話。

修士論文の提出も終わり、さてやっと研究室のサーバ環境を更新できるぜぐへへ、
とか思いながらとりあえず転がっていた HP MicroServer に Ubuntu を入れ、
作業用ストレージにしようとしていた。
自宅でも MicroServer を使っていたのでさくさくっと HDD を突っ込み、MicroServer には光学メディアドライブがないので USB メモリからインストールしようといつものようにインストールイメージをダウンロード。
光学メディアのないマシンにインストールを行う方法で代表的なものは、USB メモリ経由で行う方法か PXE ブートだろう。
以前作ってコメントアウト一行の解除で有効化できるようにしてあった PXE + TFTP 環境を使っていれば惨事は防げたと思う。
しかし僕は MBP に USB メモリを差し込み、いつものように dd で書き込みを行った。
行なってしまった。しかも sudo で。

一応それなりのサイズだし、USB2.0 経由なので書き込みにある程度時間がかかるはず。
だが実行のち、プロンプトが一瞬で戻ってきた。
「うおーずいぶん早いな、こんなもんだったっけ」とか思いつつ、ホームディレクトリに戻ろうと cd を入力してリターンキーを押す。
その瞬間ターミナルがグリッチした。
正確には、プロンプトの中にテキストカーソルがめり込んだ。
しかもリターンキーを叩くたびにめり込む箇所が変わる。なんだこれは。
えっ、と思いながら ls してみると、そこに表示されるリストの日本語は全て化け、サイズ表示さえもおかしなことになった。
はー、何かの拍子で LANG か文字コードが変わったりした?でもそんなことは一切してない、と思いながら echo $LANG したが、返ってくるのは ja_JP.UTF-8 という表示。
正直に言うと、最初にターミナルがグリッチした瞬間、自分が何をやったのか直感的には理解していたと思う。信じたくなかったけど。

もうこの段階で、ターミナルに残っていたコマンド履歴を見て、自分がしでかしたことを把握していた。既にパニック状態。
全てのアプリケーションはディスクアクセスした瞬間にクラッシュする。Chrome のタブさえ開けない。
システム領域はたぶんがっつり上書きされていて、メモリに乗っている部分だけが生きている状態なんだろうなと思った。
唯一使えたのは、起動したままのターミナルと夜フクロウくらいだった。
そのメモリ上の夜フクロウから最後に書き込んだのが下記。この投稿直後に夜フクロウもクラッシュした。

凄まじいやらかしどころではなく、既に勝負はついていた。
ターミナルは生きているからまだファイルを移すことくらいはできるのでは、と思い
scp を試したら、最初の1ファイルが転送できたので少しテンションが上がった。
しかし次の瞬間に OS がフリーズした。
決着はついた。僕にできることはマシンの電源を切り、再び投入し、リンゴマークの後に表示される駐車禁止みたいなマークを眺めるだけだった。
その時の僕の様子は下記の tweet に詳しく記載されている。

その日はもう何もできなかった。
小一時間ほど "どうしようBot" と化したあと、研究室の納会があったため偉大な先生方の前で先ほどの事象を報告し、「えっ論文のファイルは???」「論文本体は無事なんですがソースコードが…」みたいなやり取りをして、酒を飲みまくって寝た。

家に帰ってきて一応 Time Machine の日付を見たが、最後のバックアップは8月であった。
(家では基本的に MBP を断続的にしか使わないこともあり、中断されることが多かった)
その後しばらくの間はこの MBP について何かやる気が全く起きず、データ救出を試みたのは数日後。
とりあえず開腹して SSD を取り出し、testdisk をかける。
Deeper Search で複数パーティションが検出され、おおおーとテンションが上がったのもつかの間、
それは Lion がインストール時に作成する非常用ブートパーティションの残骸であった。
既に何をする気力も残っていないので、そのまま放置して、時間ができたら mountain lion でも入れなおすかーということになった。

事態が動いたのは最近。やっと OS を入れなおすくらいに気分が回復し、
mountain lion をダウンロードしてインストールをはじめる。
ここであることに気づいた。

「インストール時と全く同じセクタ、同じサイズでクイックフォーマットしてインストールすれば、インストール後に削除ファイル回復系のツールで取り出せるのでは???????」

全く大したことではないのだがそれなりに現実味があることもあり、久々にテンションが上がった。
はやる気持ちで OS をインストールし、PhotoRec をかけてみる。
ものすごい勢いでファイルがヒットしまくる。
ここまでくるとテンションは上がりっぱなしで、7割くらい理由不明な勝利の予感を感じていた。
対象ファイル数が膨大なだけに、探すのには骨が折れそう(PhotoRec ではファイルツリーやファイル名までは再現されない)だが、この中に修士課程を共に過ごしたファイルがあるというだけで元気が出る。

一日くらいかけてサーチが完了した。数万件のファイルがヒットして復元されている。
最初のディレクトリを探す。うーんアプリケーション関連のファイルしかなさそうだ。しかし Omnigraffle の内部ファイルっぽいものなど、かつて自分が使っていた環境にあったものがそこにはあり、この調子なら自分のユーザディレクトリ下にあったファイルが見つかるのも時間の問題だろう。
どうやれば早いかな、plist ファイルとか結構あるけど捜索対象ではないし消してしまうか、日本語を含むファイル探せば早いかな、etc....


自分でホームディレクトリに FileVault (暗号化) をかけていてどう頑張っても復旧が無理ということに気づくまで、そう時間はかからなかった。


かくして、僕の MBP は修士課程2年間を共に戦った頃の記憶を全て失い転生した。
dd するときは指差し確認。人間はミスをせずにはいられない生き物ですね。
おしまい。


追記
この話を大学関係のちょっとアレな友人たちとしていたところ、
犯罪者っぽいTシャツを作ってくれた。いい友人に囲まれて幸せです。
http://clubt.jp/product/249779.html
大事なオペレーションをする日にはこのTシャツを着ようと思う。

追記2
ブックマークコメントで「バックアップ取ってないのがそもそもの問題」というご指摘を多数いただきました。
全くもってその通りなのですが、被害状況についてちょっと盛っちゃった感があるので追記しておきます。
実際のところ、本文にもありますが"8月までは TimeMachine でバックアップが取れていた"という状態で、
2年間のうち半分以上くらいは救い出せそうな気配です。(実際のところこれから先使うファイルが無さそうなのでリストアしてませんが、モノ自体はそれなりに堅牢なストレージにあります)
自宅外で使うことがほとんどで、自宅でもバックアップが完了する前に出かけてしまうことが多々あったので
クラウドストレージにでも突っ込んでおくべきでしたね。反省。
他にも、プレゼンに使うファイルだとか、そういうものは別なサーバに移してあったりもするので
被害数としては正直そんなに多くないかもなーと思っています。むしろ"やっちまった"ことへの精神的なダメージが。
お仕事として触るものは当然2重3重4重くらいまでバックアップは考えるもので、
心配性なので(説得力0だけど)管理していたサーバのバックアップ状況とかをモニタしたりしているものですが、
自分の環境となるとまーそんなに大したものないしなーと思ってしまう節がありました。失ってから気づくパターンですね。

論文そのものはもちろん git で自分のローカル以外の場所で管理していたので被害はなく、
実験しながら書き換えていたソースコードとか置いていたデータに被害がという感じでした。
まあ、バックアップは取れていて大前提ということは間違いないですね。
ということで、追記でした。ふげー。