Linuxでのファイルバックアップツールには、tar, rsync, unison等色々ありますが、ここではbup
というツールを試してみました。
日本語の情報があまりに少ないので、色々試してみた結果をメモ程度に残しておきます。
bup
とは
bup
とは、git
と互換性のあるデータ構造を用いてファイルのバックアップを行うツールであり、操作体系もgit
と似通っています。git
との相違点として以下のような点があります。
- デフォルトでリポジトリがホームディレクトリ(
~/.bup/
)に置かれる。(バックアップ先がリモートサーバーの場合はリモート上の~/.bup/
) - 基本的にリポジトリがシステムごとに1個しか存在しないので、バックアップに名前を付けることができる。(この名前は
git
でいうbranch
に相当)
bup
を用いたバックアップ
通常のバックアップ手順
-
bup init
... システムにbup
リポジトリを作成(1回のみ) -
bup index dir1/filename
... ファイルをINDEX
に登録 -
bup save -n dir1 dir1
... ファイルをバックアップ(コミットを作成)
bup init
bup init
を実行すると、ホームディレクトリに~/.bup
ディレクトリが作成されます。このディレクトリはgitでいう.git
ディレクトリと同じ構造であり互換性があります。
bup index dir1/file1
以下のようなフォルダ階層を仮定します。
├── dir1
│ ├── dir3
│ │ └── file5
│ ├── file1
│ └── file2
├── dir2
│ ├── file3
│ └── file4
└── mnt
bup index
では、バックアップを行いたいファイルを指定します。例えばbup index dir1/file1
とすれば上記のfile1
がバックアップ対象としてINDEX
されます。また、bup index dir1/dir3
のようにすればdir3
中のすべてのファイル、すなわちfile5
がバックアップ対象となります。バックアップ対象は同時に複数指定することもできます。
bup save -n dir1 dir1
bup save
では、INDEX
されたファイルをバックアップします。この際、~/.bup
に-n
で指定した名前のブランチが作成され、変更内容のコミットが作成されます。このときのコミットメッセージは以下のようなものになります。
bup save
Generated by command:
['/usr/lib/bup/cmd/bup-save', '-n', 'dir1', 'dir1/']
なお、バックアップされるディレクトリはINDEX
されたものの中で指定されたディレクトリdir1
以下のもののみとなります。すなわち、dir2
以下のファイルをINDEX
した状態でbup save -n dir1 dir1
をしたとしても当該ファイルのバックアップは行われず、INDEX
されたままになります。
リモートへのバックアップ
bup save
の際、リモートを指定することでリモートサーバーにバックアップを行うことが出来ます。
$ bup save -r host:path -n dir1 dir1
ここでhost
ではsshで接続する際のホスト名を指定します。path
を省略するとデフォルトのパス(~/.bup
)が使用されます。