2009年09月26日

snapshot-rsync

PC上に日々作られ、変化し、消えていくデータのスナップショットを保存することを目的とした自作ツールです。 他のツールと組み合わせた使い方などはこちら

前書き

pdumpfs (こちらこちら) というツールの存在を知り、日々ホームディレクトリのスナップショットを取るようになりました。 このツールはハードリンクを使ってスナップショット機能を実現しており、 ディスク容量を多く必要とせず日々の状態を保存できます。

便利に使わせていただいていたのですが、 ディスクを一台しか積めない玄箱 HG を使うようになって困りました。 ネットワーク越しにスナップショットを保存できればいいのに、 ということで探してみると pdumpfs-rsync (こちらにあったはず) というツールがありました。 しばらく使っていたのですがどうも自分の使い方と合わない部分もあり、 再びネットワークを探しますが pdumpfs のデータをそのまま引き継げるものは見つかりませんでした。

しかし調べているうちに rsync に --link-dest というオプションが追加されていることを知りました。 pdumpfs と同じように、同一データにはハードリンクを作成する、というものです。 (pdumpfs ができた当時、このオプションはなかったようです。)

だったらあれこれ探すよりシェルスクリプトで作っちゃった方が早いかも、 ということでできあがったのが本ツールです。

snapshot-rsync

snapshot-rsync (ダウンロードはこちら。) は pdumpfs 互換の動作をするスナップショット・バックアップツールです。 保存先のディレクトリに 年/月/日 というディレクトリを作り、スナップショットを作成します。

また内部で rsync を使用しているため、リモートホストにあるデータを保存対象にすることができますし、 逆にリモートホストにスナップショットを作成することも可能です。

以下のようにコマンドラインで指定します。

snapshot-rsync [ options ] target save-dir [ options for rsync ]

target にはバックアップの対象となるディレクトリを、save-dir には保存先のディレクトリを指定します。 ただし rsyncに渡す関係上、: (コロン)を含むディレクトリを正しく扱えません。

オプション 内容
-h, --help usage を表示します。
-v, --version バージョン情報を表示します。
--first 環境を作成します。初回起動時のみ実行してください。
--debug コマンドの実行を行いません。 内部でどのようなコマンドが実行されるかを表示します。

使い方

ディレクトリ target を別なディレクトリ save-dir に保存したい場合の手順を説明します。

すでに pdumpfs や本ツールによるスナップショットデータがあるのでなれば、 初回起動時のみ --first オプションを使って環境作成を行います。 これにより save-dir に前日の日付から作成されたダミーのディレクトリとシンボリックリンクが用意されます。

$ snapshot-rsync --first target save-dir

続いて本番実行、--first を取り除いて実行します。 初回なので指定したディレクトリ以下の全てのデータがコピーされます。 (ディレクトリ target 自体を保存対象にしたくない場合は target ではなく target/ と指定します。 このあたり rsync の仕様によるものです。)

$ snapshot-rsync target save-dir

以上で終了です。 翌日以降実行すれば、追加、変更されたファイルのみがコピーされ、その他のファイルにはハードリンクが作成されるはずです。 ("ls -i 前日のファイル 当日のファイル" や "du -sh 前日 当日" で確認してください)

続いてネットワーク越しの指定を行いたい場合の説明です。 初回起動時に --first による環境作成が必要であることは、リモートであっても同じです。

ターゲットとしてリモートホストのディレクトリを指定したい場合は、以下のように指定してください。

$ snapshot-rsync remote:target save-dir

また保存先をリモートにしたい場合は、以下のように指定してください。

$ snapshot-rsync target remote:save-dir

保存先ディレクトリ以降に指定したオプションはそのまま rsync に引き渡されます。 例えば保存するディレクトリを制限するため rsync の --exclude-from オプションを指定したい場合は、 以下のように最後に付け足して下さい。

$ snapshot-rsync target save-dir --exclude-from ~/.config/snapshot-rsync/excludes
(.config/snapshot-rsync/excludes) : (ターゲットを target/ とした場合は 該当部分を削除) /target/.Trash/ /target/tmp/
変更履歴
  • 2009-09-26: snapshot-rsync 0.2 を公開
    • 一般公開するにあたり大幅に書き換え。
  • ????-??-??: snapshot-rsync 0.1 を作成。(いつだろう?)
タグ:プログラム
posted by 大津 at 18:48 | 記事 | Comment(1)
この記事へのコメント
参考にさせていただき、2011年頃から自分サーバの日次バックアップを取り続けて、「忘れていました」。

今回サーバ移行を進めており、新しいサーバのバックアップにも使わせていただきます。

ありがとうございます。
Posted by けんた at 2017年06月05日 22:18
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。
×

この広告は1年以上新しい記事の投稿がないブログに表示されております。