| Hisashi Morita ( @ 2005-12-18 21:45:00 |
[Unix][Administration][Backup] pdumpfs tools: pdumpfs-clean, pdumpfs-rsync
pdumpfs tools: pdumpfs-clean, pdumpfs-rsync
---------------------------------------- ---
pdumpfsをさらに便利にするツールを安井卓さんが公開されている。pdumpf sでバックアップしたディレクトリを適当に間引いて削減するpdumpfs-clea nと、リモートホストのファイルをpullバックアップするpdumpfs-rsyn c. どちらも便利なのでメモしておく。
残念なことに、現時点ではどちらもDebianパッケージになっていない。幸い1ファ イルなので、CVS先端からもらってきて/usr/local/binあたりに置けば 一応動く。
こんな感じで簡単に掃除できる。デフォルトでは、ここ1週間分および2年前までのファ イルをそれなりに残してくれる。
ただし乱雑に使っているホストだと数時間かかるかもしれない。
pull型なので、リモートホストに他のホストの鍵などを置かなくていい(はず)。い わゆるレンタルサーバのバックアップをとるのに重宝している。
ただしpdumpfs-rsyncは自分の用途ではちょっとした問題点があった。
pdumpfs-rsyncはリモートホストへのssh接続に使うポートを22に固定 しているらしい。任意のポートで接続するために、rsyncに--rshオプションが 渡るように変更(kludge)を加えた。
(なお、rsyncの--portオプションはrsyncdへの接続時にしか使われな いらしいのに気がつかず、時間を無駄にした。)
こんな具合に使うと、example.org上のjdoeの権限で読めるファイルをバ ックアップできる模様。
portを操作したいのに--rshオプション追加でごまかしているところに加え、コ マンドラインで空白をエスケープしているところなど、我ながら汚らしくてめまいがする。で も目をそらして2分経てば忘れるから大丈夫。
またもうひとつの問題点は、pdumpfs-rsyncを実行した後、日が変わらない うちにもう一度動かした際にエラーが生じるということだ。バックアップ元のディレクト リをいくつかローカルに転送し終わったところで、次のようなエラーが出て止まる。
どうやらこういうことらしい。
とりあえず翌日になれば動くので、直るように念を送りつつ、見なかったことにする(ひ どい)。
pdumpfs tools: pdumpfs-clean, pdumpfs-rsync
----------------------------------------
pdumpfsをさらに便利にするツールを安井卓さんが公開されている。pdumpf
残念なことに、現時点ではどちらもDebianパッケージになっていない。幸い1ファ
pdumpfs-clean: pdumpfs のバックアップを掃除するツール
http://tach.arege.net/software/pdumpfs-clean/
pdumfs-clean とは
高林さんが作られた pdumpfs のバックアップを 掃除します.pdumpfs では,基本的に毎日ディレクトリツリーの スナップショットをとっていくのですが,ハードリンクでとっていくとは いえ,とり続けるといずれはディスクが溢れてしまいます.pdumpfs-clean を使うことにより,不要なバックアップを削除することができます.
こんな感じで簡単に掃除できる。デフォルトでは、ここ1週間分および2年前までのファ
% sudo pdumpfs-clean /pdumpfs
ただし乱雑に使っているホストだと数時間かかるかもしれない。
pdumpfs-rsync: rsync を利用したリモート pdumpfs
http://tach.arege.net/software/pdumpfs-rsync/
pdumpfs-rsync とは
pdumpfs-rsync は,高林さんが作られた pdumpfs と rsync を組み合わせてリモートでディレクトリの差分コピーを行うツールです.pdumpfs 単体ではできない pull 型のコピーが可能になっています.
pdumpfs-rsync は,まず rsync を利用してリモートホストからディレクトリツリーを 取得します.そのあとで,日付のディレクトリに対してハードリンクを張って いきます.変更の有無はすべて rsync の処理に依存します.
pull型なので、リモートホストに他のホストの鍵などを置かなくていい(はず)。い
ただしpdumpfs-rsyncは自分の用途ではちょっとした問題点があった。
* pdumpfs-rsyncのssh接続にはport 22が決め打ちで使われるらしい
* pdumpfs-rsyncを同じ日付のうちに再度実行するとエラーが生じる
pdumpfs-rsyncはリモートホストへのssh接続に使うポートを22に固定
(なお、rsyncの--portオプションはrsyncdへの接続時にしか使われな
% diff -u =(curl 'http://cvs.arege.jp/*checkout*/pdumpfs-rsync/pdumpfs-rsync') /usr/local/bin/pdumpfs-rsync
--- /tmp/zshbV0hPj
+++ /usr/local/bin/pdumpfs-rsync
@@ -41,6 +41,7 @@
['--exclude-by-glob', '-w',
GetoptLong::REQUIRED_ARGUMENT],
['--base', GetoptLong::REQUIRED_ARGUMENT],
['--force-hardlink', '-f', GetoptLong::NO_ARGUMENT],
+ ['--rsh', GetoptLong::REQUIRED_ARGUMENT],
['--help', '-h', GetoptLong::NO_ARGUMENT],
['--version', '-v',
GetoptLong::NO_ARGUMENT])
parser.each_option do |name, arg|
@@ -59,6 +60,8 @@
version
when '--base'
base = arg
+ when '--rsh'
+ rsync_options.push(name + '=' + arg)
else
options[name.sub(/^--/, "")] = arg
end
%
こんな具合に使うと、example.org上のjdoeの権限で読めるファイルをバ
% sudo pdumpfs-rsync --rsh=/usr/bin/ssh\ -p\ 8022 --exclude='/tmp' \
'jdoe@example.org:/' /var/backups/example.org
portを操作したいのに--rshオプション追加でごまかしているところに加え、コ
またもうひとつの問題点は、pdumpfs-rsyncを実行した後、日が変わらない
/usr/bin/pdumpfs:1058:in `join': can't convert nil into String (TypeError)
from /usr/bin/pdumpfs:1058:in `update_snapshot'
from /usr/lib/ruby/1.8/find.rb:40:in `find'
from /usr/lib/ruby/1.8/find.rb:38:in `find'
from /usr/bin/pdumpfs:1053:in `update_snapshot'
from /usr/local/bin/pdumpfs-rsync:150:in `main'
from /usr/local/bin/pdumpfs-rsync:157
どうやらこういうことらしい。
* pdumpfs-rsyncのmainにあるlatestの値がnilになっている
* pdumpfsのlatest_snapshotがnilを返しているようだ
* pdumpfsのpast_date?が偽を返しているのではないか
とりあえず翌日になれば動くので、直るように念を送りつつ、見なかったことにする(ひ