walkingmask’s development log

IT系の情報などを適当に書いていきます

MENU

クラウドドライブを使った分散バックアップ

卒論に向けて、クラウドを活用した分散バックアップ用の、Mac 向けスクリプト及びデーモンを作りました。

github.com

使用方法

使うためには、各クラウドドライブアプリをインストール・ログインして、ホームディレクトリ以下 (iCloud Drive は別) にそれぞれのアプリ専用のディレクトリが存在している必要があります。

例えば、Google Drive であれば ~/Google Drive/ のように。

できたら、以下のコマンドを実行すると、インタラクティブにインストールが実行される予定です。

bash ./install.sh

利用するクラウドドライブ

今回、利用したクラウドドライブは以下の 3 つです。

これ以外も、対応できればしたいところですが、取ったアプローチ的な理由で、これ以外のものを使うのは難しく、また、3 つバックアップをできれば十分と考え、これ以上の対応は考えませんでした。

注意

以下の点について、注意してください。

  • クラウド上に置いても良い情報であるか考える
    • 機密情報など
  • バックアップが必要か考える
    • GitHub などで管理しているものは必要ないはず
  • クラウドドライブの容量
    • 上限を超えて保存はできない。特に Dropbox
  • ローカルストレージの容量
    • この方法の場合 バックアップするデータ * (クラウドドライブの数 + 1) の容量を取る
    • ローカルストレージを圧迫しないように、同期するディレクトリを制限しておく
  • 各種アプリは常駐型なので一定のメモリを喰う
  • Google Drive にアップロードしたファイルを落とす時、dotfiles の先頭の “.” が “_” になる

背景

大学に入って以来、教員をや技術職員の方から、バックアップの重要性について口すっぱく聞かされてきました。

  • PC はある日突然逝く
  • 最低三箇所に分散する
  • 卒論直前にデータ飛ばした人もいる

といった内容をよく聞き、特に三番目はやばいということで、一年前にクラウドを利用したバックアップ方法を考案しました。

クラウド、特に異なるドメインで分散すれば、物理ドライブよりは安心かなという考えです。

一年間利用して、幸いにも役立つシーンにはまだ遭遇していませんが、動作は正常のようです。

アプローチ

まず、それぞれのクラウドドライブ上にバックアップを取ることを考えました。

もっとも単純な方法は、ブラウザを通して、一定時間ごとに手動でデータをアップロードすることです。

しかし、これではあまりに手間がかかり、非効率で、忘れる可能性もあります。

そこで、それぞれのクラウドドライブ専用のアプリケーションをインストールし、次のようなアプローチを取りました。

  1. バックアップを前提とした作業用のディレクトリを用意する
    • バージョン管理をしていないかつバックアップが必要とされる作業は全てここでする
  2. クラウドドライブのディレクトリに作業用ディレクトリを rsync するスクリプトを作る
  3. Mac の launchd に自動で定期的にスクリプトを実行してもらう
  4. あとは、各種アプリが勝手にクラウド上にアップロードしてくれる

たったこれだけです。ファイルサイズでフィルタリングするような動作も組み込んでいます。

欠点はありますが、今のところ、うまく動いているようです。

今後

  • rsyncssh できるリモートサーバなら使えるので、その辺を扱えるようになったら嬉しいかも?
  • もっと良い方法があれば教えて欲しい
  • みんなのバックアップ戦略を教えて欲しい
  • バグありそう (特に急拵えのインストーラ)

まとめ

コントリビュート大歓迎です。