クローン戦争、あるいはバックアップが写真を食い尽くす

クローン戦争、あるいはバックアップが写真を食い尽くす

たまには自分の愚かさを公に認めるのは、心の健康に良いことかもしれません。ちょっとした精神的な自己鞭打ちのようなものですね。皆さんはもうご存知だと思いますが、私がバックアップにどれほど執着しているか、この話で少しばかりのシャーデンフロイデ(他人の不幸を喜ぶ気持ち)を楽しんでいただけると思います。バックアップのせいで、2ヶ月もの間、気づかないうちにデータを失っていたのです。そう、バックアップがデータを食い尽くしたのです。

データ損失のウサギ穴に落ちる— 事の発端は、広報担当者から、iPhone やカメラ付き iPod touch で簡単にパノラマ写真が作れる Boinx Software の iOS アプリ「You Gotta See This」を試してみたかと尋ねるメールを受け取ったことでした。アプリは問題なく動作しましたが、パノラマ写真のアスペクト比が極端に広いため、仕上がりに満足できませんでした。広報担当者にこのことを説明しようと、iPhoto を起動して最近作成したパノラマ写真と、比較用にほぼ同じシーンを撮影した画像を 1 枚取り出しました。ところが、iPhoto を起動しても、欲しい写真は
見つかりませんでした。さらによく見ると、最後に表示されていたイベントは 2 か月前のものでした。しまった。

データロスはいつも、自分が何か愚かなことをして、その結果がどうなるか分かっている時に感じる、胃が締め付けられるような恐ろしい感覚を引き起こします。問題は、バックアップディスク上のiPhotoライブラリパッケージを使っていたことにすぐに気づきました。パニックに陥った私は、最初はTime Machineを責めました。というのも、Time Machineを信用していなかったからです。しかし、落ち着いてから、Time Machineのせいではなく、私のバックアップ戦略、そしてiPhoto(これはiPhoto '09でしたが、iPhoto '11にも脆弱性があると思われます)と、もう一つの強敵であるSpotlightのせいだと気づきました。

以前からかなり自信に満ちていた私のバックアップ戦略は、3つの要素から成り立っています。まず、Time Machineを使って、Mac Proの2台目の内蔵ドライブのパーティションにアーカイブバックアップを送信します。次に、オフサイトバックアップと二次アーカイブバックアップとして、CrashPlan+を使ってホームフォルダ全体をインターネット経由で友人のMacに接続されたハードドライブにバックアップします。3つ目に、迅速な復旧とメインハードドライブ(Zeus)が突然故障した場合に備えて、Carbon Copy Clonerを使って起動ドライブのクローンを2台目の内蔵ハードディスクの別のパーティション(DoppleZeus)に作成します。このクローンは毎晩Macがスリープ状態になる前に実行されます。

通常、DoppleZeusをマウントしても問題ありません。アプリケーションは通常、以前の場所またはデフォルトの場所( など~/Documents)をデフォルトで選択するため、ファイルを開いたり保存したりする際に、メインドライブ(Zeus)とクローン(DoppleZeus)が混同されることはありません。2008年初頭にMac Proを購入して以来、この方法は問題なく機能しています。

しかし、iPhoto のことは考えていませんでした。Option キーを押しながら iPhoto '09 を起動して iPhoto ライブラリを切り替えると、iPhoto は iTunes のような標準の「開く」ダイアログを表示しません。代わりに、Spotlight で検出できるすべての iPhoto ライブラリ パッケージを一覧表示するカスタム ダイアログが表示されます。DoppleZeus は Zeus の完全なクローンなので、iPhoto はどちらでも同じライブラリを表示し、ダイアログの下部に表示されるパスだけが異なります。どうやら、8 月のある時点で、何かをテストするために iPhoto ライブラリを切り替え、元に戻した際に誤って DoppleZeus のバックアップ バージョンを選択してしまったようです。(iPhoto は、Spotlight 環境設定パネルの「プライバシー」リストにあるディスク上の iPhoto ライブラリを認識しませんが、そのディスクを Spotlight の「プライバシー」リストに追加する前にそのディスク上のライブラリを選択した場合、iPhoto はそれ以降、 Spotlight の設定に関係なく、
の com.apple.iPhoto.plist ファイルにライブラリの場所を記憶します。)~/Library/Preferences


これが何を意味するかはご想像がつくでしょう。写真をインポートするたびに、DoppleZeusのバックアップディスク上のiPhotoライブラリにインポートされ、翌日の夕方、Carbon Copy ClonerがDoppleZeusをZeusと全く同じ外観に保つための私の指示に従って、それらの写真を削除したのです。

iPhotoをあまり使っていなかったので、気づくまでに2ヶ月もかかりました。つまり、8月中旬以降にインポートした写真がすべて消えてしまったのです。しかも、完全に消えてしまい、復元の見込みは全くありませんでした。Time MachineとCrashPlanはどちらもZeusをバックアップするものの、DoppleZeusはバックアップしないため、これらの写真はバックアップされておらず、そもそもバックアップされたドライブ上には存在していなかったのです。

この問題の回避方法を説明する前に、ハッピーエンドがあります。私はiPhone 4とCanon PowerShot SD870の2台のカメラで写真を撮っています。シャッターチャンスがなくてPowerShot SD870をポケットに入れ忘れた時はiPhoneを使います。思い出した時はいつでも、写真がきれいに撮れるPowerShotを使います。しかし、この夏は忙しかったので、iPhotoにインポートしたのはiPhoneで撮った写真だけだったことが判明しました。「良い」写真はすべてPowerShotのSDカードに残っています。フィルムの現像を何ヶ月も忘れることが多かった1980年代の両親に少し似ているような気がします。というわけで、8月中旬からiPhoneで撮った写真がすべて消えてしまったのは残念ですが、それほど大きな問題ではありません

この問題は極めて特殊なので、テストのために私ほど頻繁にiPhotoライブラリを切り替える人は少ないでしょう。しかし、iPhotoのOptionキーを押しながら起動して切り替える場合は注意が必要です。あるいは、Fat Cat SoftwareのiPhoto Library Managerを使うと、Spotlightに頼ってすべてのiPhotoライブラリを探すのではなく、切り替えたいiPhotoライブラリを手動で指定する必要があります。

予防は万全— では、今後このような事態を再発させないためにはどうすればいいのでしょうか?また、Carbon Copy ClonerやShirt PocketのSuperDuperを使って別のハードディスクにクローンを作成している人は、どうすれば良いのでしょうか?友人のAndrew LaurenceがTwitterで、バックアップは目につかず、忘れやすく、読み取り専用で、遠くに置かなければならないとコメントし、まさに私が必要としていたヒントをくれました。

私の三本柱のバックアップ戦略を見ると、CrashPlan のバックアップは 4 つの基準をすべて満たしています。デスクトップ上のパーティションアイコンを除けば、Time Machine のバックアップは目に見えない場所に保管されており、実質的には読み取り専用です。これは、Time Machine がバックアップを含むフォルダのアクセス権を管理し、ユーザーが書き込みできないようにしているためです。(Time Machine は、動作中に混乱を招くため、忘れられないというテストには不合格です。また、インターネット経由でのバックアップを可能にすることで、忘れられないというテストにも不合格です。)Carbon Copy Cloner の設定は、私が Mac から離れている夜間にのみ実行されるため、忘れられない場所に保管されていますが、簡単に読み取り専用にする方法がないため(Carbon Copy Cloner はディスクに書き込む必要があるため)、遠く離れた場所に保管したくありません

肝心なのは、残りの目標、つまりMacを使っている間はCarbon Copy Clonerのバックアップ先を見えないようにすることです。そのためには、Carbon Copy Clonerのバックアップ実行直前にDoppleZeusボリュームをマウントし、実行後にアンマウントします。Time Machineパーティションとディスクを共有せず、専用のディスクにDoppleZeusボリュームを配置すれば、ドライブの回転速度がそれほど上がらず、消費電力もわずかに節約できるという嬉しい副次効果があります。

実際、Carbon Copy Clonerのドキュメントには、ポストフライトスクリプトを使ってバックアップ後にボリュームをアンマウントするスクリプトが記載されていますが、Carbon Copy Clonerは宛先ボリュームの存在を確認するため、プリフライトスクリプトではボリュームをマウントできないと記載されています。代わりに、ドキュメントでは、別の方法でドライブをマウントし、Carbon Copy Clonerがドライブの存在を確認した時点でバックアップを開始するようにすることを推奨しています。

ディスクを特定のタイミングでマウントする方法は無数にあることは間違いありませんが、私はStairways SoftwareのKeyboard Maestroを使って、適切なタイミングで短いシェルスクリプトを実行することにしました。スクリプトはシンプルですdiskutil mount disk0s2(ディスク識別子(disk0s2ビット)はコマンド で確認できますdisktool -l)。


アンマウント スクリプトについては、Carbon Copy Cloner のドキュメントからスクリプトをテキスト ファイルにコピーし、UnmountDoppleZeus-CCC.sh として保存し~/Library/Scripts、Carbon Copy Cloner の詳細設定ダイアログで指定してタスクを保存し、ディスクが表示されるたびに Carbon Copy Cloner がタスク全体を実行するように設定しました。



Keyboard Maestro がディスクをマウントし、Carbon Copy Cloner がクローン操作を認識して実行し、ポストフライト スクリプトがディスクをアンマウントすることで、完璧に動作します。

実は、解決すべき問題がもう1つあります。再起動するたびにDoppleZeusボリュームが自動的にマウントされてしまいます。幸いなことに、これはログイン時に実行される別のKeyboard Maestroマクロで簡単に解決できます。このマクロはDoppleZeusをすぐにアンマウントするだけです。(このマクロを実行する場合は、「DoppleZeus」をディスク名に置き換えてください。)


今のところ、私のバックアップ戦略ではSuperDuperを使用していませんが、これも非常に人気があり、複製を作成するのに便利なプログラムです。ただし、少し異なるアプローチが必要です。バックアップ前にディスクをマウントする必要はありません。SuperDuperは必要に応じて自動的にマウントするからです。また、外付けハードディスクやリムーバブルディスクを使用している場合は、SuperDuper
のバックアップオプションの「一般」ビューにある「正常に完了した場合」ポップアップメニューから「取り出し」を選択することで、SuperDuperの実行後にディスクをアンマウントできます。つまり、内蔵ディスクを使用していない場合は、これで完了です。


しかし、私はMac Proの内蔵ハードディスクのパーティションをバックアップ先として使っています。Finderのサイドバーには内蔵ディスクの取り出しボタンがないため、現在のバージョンのSuperDuperでは取り出し可能として認識されません。SuperDuperの作者であるDave Nanian氏によると、次のマイナーリビジョンでこの問題は修正される予定です(おそらく彼は自分の名前の前に付けた時に形容詞のように聞こえるようにするために、このプログラムをSuperDuperと名付けたのでしょう。明らかに私は「ベストセラー」というタイトルの本を書く必要があるようです)。

その間に、Dave は必要な処理を実行し、バックアップしたディスクをアンマウントする独立したプロセスをフォークするスクリプトを提供しました。

#!/bin/sh
nohup /bin/bash -c "sleep 30; diskutil unmount \"$4\"" &

このスクリプトを使用するには、上記の 2 行を UnmountDoppleZeus-SD.sh というテキスト ファイルに入力し~/Library/Scripts、以下のターミナル コマンドで実行可能としてマークするだけです。

chmod u+x /Users/adam/Library/Scripts/UnmountDoppleZeus-SD.sh

次に、SuperDuper の詳細オプションでそれを指定し、適切な時間に SuperDuper が実行されるようにスケジュールを設定すると、すべてがうまくいきました。

見えない場所— つまり、Carbon Copy Cloner と SuperDuper のどちらを使ってハードディスクの起動可能な複製を作成するかに関わらず、クローンは必要な時だけマウントされ、それ以外の時は適切にアンマウントされて見えないようにすることができます。そうすれば、私が iPhoto ライブラリで犯したようなミスを防げるはずです。

Idfte
Contributing writer at Idfte. Passionate about sharing knowledge and keeping readers informed.