新潟の空は今日も灰色/東京の空は今日も青空

知識も技術も文章力もないので練習しています。新潟から東京へ移住しました。

afioでバックアップ

仕事で使ったときのことの備忘録。学生時代にも一度使いましたが、改めて自分の確認のため。

用途としては単純なファイルのバックアップです。ファイルをまとめてアーカイブにして任意の場所に保存できます。tarcpioでも同じようなことはできますが、それらと違って、バイナリレベルで破損しても読める部分は書き出してくれるので若干信頼性は上です。

インストール

まず、インストール。とりあえず、RedhatLinux環境を想定していますが、インストール直後の状態のyumのレポジトリではインストールできないので、RPMforgeリポジトリ導入(RPMforge) - CentOSで自宅サーバー構築などを参考にしてRPMforgeを使えるようにしておくと良いと思います。そこまで終わったらrootでコマンド発行。

# yum install afio -y

これで完了。

バックアップ

使うオプションは、-o(バックアップアーカイブを作成)、-x(所有者情報を含ませる)、-v(処理内容の詳細を表示)、-Z(アーカイブを圧縮、展開や確認の時にも必要)、-L(ログファイルを出力)、-t(バックアップしたアーカイブの中身の確認)、-i(バックアップファイルを展開) 位になるのかと思います。

afioは対象となるディレクトリ・ファイルを直接指定することも可能ですが、圧縮などの機能を使う場合にはパイプでディレクトリ・ファイルのリストを渡してあげた方が良いと思います。たとえば、カレントディレクトリ以下すべてのディレクトリ・ファイルをバックアップするときには、

$ find . | afio -oxvZ アーカイブのファイル名

などと指定してあげると良いと思います。また、ファイルなどを選別したい場合には、findコマンドのオプションやgrepへのパイプなんかで絞り込むと良いと思います。

$ find . -name "*.html" | afio -oxvZ アーカイブのファイル名
$ find . | grep "hoge" | afio -oxvZ アーカイブのファイル名

もちろん、愚直にこんな方法も。本当に対象が限られている場合にのみ使った方が良いと思いますが。

$ echo hoge.txt\nfuga\n | afio -oxvZ アーカイブのファイル名

差分バックアップ

afioでバックアップを取る際にはログファイルをはき出すことができます。

$ find . | afio -oxvZ -L ログファイル アーカイブのファイル名

このときにはき出したログファイルの日付を利用して、crontabなどで定期実行すれば差分バックアップを利用できます。findコマンドに-cnewer(作成日時が指定ファイルより新しいファイルだけを標準出力に渡すオプション)をつければできます。

$ find . -cnewer 古いログファイル | afio -oxvZ -L ログファイル バックアップ先ファイル名

毎回はき出されるログファイルを基準にすれば小さい差分ファイルがいっぱいできる差分バックアップ(累積差分バックアップと言ったりするそうです)、フルバックアップを取ったときのログをずっと基準にし続ければ、徐々にファイルサイズが大きい差分ができあがる差分バックアップになります。復元の手間はファイルサイズと違って前者の方がファイルの数だけ復元の回数が増えるため大きく、後者の方は小さくなります。

確認

次のコマンドでバックアップしたアーカイブの中身を確認できます。xやvのオプションをつけなければもっとシンプルな表示になります。

$ afio -txvZ アーカイブのファイル名

復元

いざというときの復元は以下のコマンド。カレントディレクトリに、ディレクトリ構造を保持したまま展開されます。

$ afio -ivxZ アーカイブのファイル名

最後に

日本語でafioの情報を載せているサイトだと、xオプションに言及しているところがちょっと少ない印象です。単なるファイルバックアップでも、/home以下に各ユーザが設置している実行ファイルとかまでカバーしようとすると、重要になってくる気がするのですがいかがでしょうか。