カレンダー

2019/06
      
202122
23242526272829
30      

広告

Twitter

記事検索

ランダムボタン

バイナリパッチワーク

by 唐草 [2019/06/07]



 間違って削除してしまったデータを復旧することができないか?という依頼が届いた。「そんなことできるわけがない」というのが、率直な感想である。
 PC上のファイルは削除しても目次を消しているだけなので復旧する事ができる場合もある。今回誤削除されてしまったデータは、数千人が利用するサーバ上に置かれたデータだ。膨大な利用者を前に、データの残滓は雑踏に落ちたゴミのように踏み潰されて跡形もなく消えてしまっていることだろう。
 でも、ものは試しということでいくつかのアプローチを試してみることにした。
 消えてしまったデータは、データベースの中身とアップロードされた複数のファイルから構成されている。幸いなことにデータベースのバックアップは、ぼくの手元に残っていた。実に優秀な管理者である。だが、アップロードされたファイルのバックアップは取っていなかった。なにせ全体で500GB以上あるので、そうそう頻繁にバックアップを取れない。機械的に毎日最新のバックアップを行うと、今回のような事故が起きた際に「誤って消されたファイルが消えた」状態のバックアップを作ってしまう。それを考えるとどのタイミングで、どんなバックアップを取るべきなのかを判断するのがいかに難しいかを理解してもらえるだろう。
 サーバに残されたデータをサルベージしていたら奇跡というべき幸運が待っていた。最近削除されたデータを保管しておくゴミ箱的なエリアに、アップロードされたファイルがまだ残っていた。ぼくの手元にあるデータベースのバックアップと、サルベージされたファイル群を組み合わせればデータの復旧を行うことができるのではないだろうか?不可能と思われたプロジェクトに光が差し込んできた。
 ゴミ箱から救出したデータは約100MBの圧縮ファイルだった。展開したら名前が"f012cd28eac54"みたな16進数表記の訳のわからないファイルが200個以上出てきた。たぶんシステム内での名称重複を避けるためにハッシュ化されたファイル名になっているのだろう。コンピュータ的には都合がいいかもしれないが、人間にはさっぱり分からない。
 ここからは、針に糸を通すような作業の連続だった。DBの中身を確認して、名前がハッシュ化されたファイルを、同じくハッシュ化されたフォルダに戻す作業をひたすら繰り返すことになった。規則が分かるまでは手作業だったが、大半はプログラムで一気に処理することに成功した。というか、複雑過ぎて人の手で行える作業ではなかった。
 偶然手元にあったバックアップとゴミ箱の中の圧縮ファイルの中身を縫い合わせるような繊細な作業の末に、ついにデータの復旧に成功した。バイナリの残滓が再び形を取り戻すなんて、作業をしているぼくが一番信じられない結果である。こんなことは二度と起きないだろうし、こんな作業二度とやりたくない。