_ another blog@hatena/Wiki/BBS
ということで今の時点での評価を大雑把に書いておこう。その後どうなったかもちゃんと書くべき気がするので忘れないように>自分
とりあえず保存しておく:
見たら消す系:
やってたら見る系:
録ったけど見てない:
客先直行作業直帰、てなわけでいつもより早く仕事上がりになった結果:携帯電話をW53Sに機種変更。今まで使ってたのがA5402Sだったと言えば変更理由は超わかりやすくジョグがあるから。前回の機種変更ははすごいタイマーを発動されたときだったから、使用期間は4年強か。
先週買った500GBのIDEなHDDで家linux Boxのバックアップ用ディスクを置き換えるべく、「Vine Linux4.1をインストール → rpm -qaのdiffを取って不足してるモジュールを追加インストール → その他のデータ類をコピー」という作業を。とかやっていたら気付いたが、pdumpfsで取ったバックアップって他のドライブに(まるごと)移動させるのが不便なような気がしてきた。
俺の勘違い? それともなんかいい方法があるの?
もし勘違いでないのならそれ用のツールを書くのはアリかもしれないが、使うのって数年に一度のバックアップディスク入れ替え作業時ぐらい? なんかディスク丸ごと保存しておけばいいじゃんという気もする
pdumpfsのバックアップ移行には、pdumpfs自身を使うラッパースクリプトを書けばいいような気がしてきた。
以下手作業でやってみた検証作業
_/src 配下にpdumpfsの例のツリー構造があるとして、まずは最古の日付を取得して、
% pdumpfs /src/yyyy/mm/dd/each_directory /dest
みたいにしてpdumpfsを実行する。するとdest以下に「今日」付けのバックアップができるので、これをリネームする。
% mv /dest/YYYY/MM/DD /dest/yyyy/mm/dd
最古の日付のバックアップが作れたら、次の日付の処理をする。
pdumpfsを実行するとdest以下に「今日」付けのバックアップができるのでリネームだ。
% pdumpfs /src/yyyy/mm/dd+1/each_directory /dest % mv /dest/YYYY/MM/DD /dest/yyyy/mm/dd+1
あとはこれを最新の日付まで繰り返せばOK……だと思う。えらくすっきりとした手順になった。内容的にはシェルスクリプトで片付く範囲の話かもしれないが、もう少しマシなスクリプト言語を使いたいところ。pdumpfsが動いている前提ならrubyがよい?
ls backup/????/??
とかで取れる
むしろ問題はどんだけ時間かかるのか、だろうか。pdumpfs-cleanを併用していないと悲しいことになるかもしれない気がする。
バックアップディスクの置き換えを目論んでいた家LinuxBoxが久々の再起動をかけてみたらなんか起動時にDMA回りでこけるようになった。しかもバックアップ側も同様の現象に見舞われる(何のためのバックアップだ!)。仕方ないのでバックアップの置き換え用にと思っていたディスクをシステムディスクに一気に昇格。
幸いLinuxBoxで動かないHDDどもは予備であるところの少し世代の新しいマシンにつないだら動いたのでデータの吸出しを。
その過程でpdumpfsによるバックアップを移行させるためにこんなスクリプトを書いた:
#!/bin/bash #転送元のホスト名とバックアップのあるディレクトリ SRC_HOST=192.168.0.0 SRC_BACKUP=/backup #転送したいバックアップ名 TARGET=white #スナップショットの一時転送先・一番古い日付のデータをtarかなんかで転送しておくと良いかも SNAPSHOT=/snapshot/ #転送先ディレクトリ DEST_BACKUP=/backup #転送する日付の一覧を得る LIST=`ssh $src_host "find ${SRC_BACKUP}/ -maxdepth 3 -type d -path '*/????/??/??' | sort"` TEMPNAME=${DEST_BACKUP}/_tmpLATEST for i in ${LIST} do echo target ${i}... rsync -au --delete ${SRC_HOST}:${i}/${TARGET}/ ${SNAPSHOT}/${TARGET}/ pdumpfs /SNAPSHOT/${TARGET}/ ${DEST_BACKUP} > /dev/null #pdumpfsが作った「最新の」バックアップをいったん別の名前にして退避 LATEST=`find ${DEST_BACKUP}/ -maxdepth 3 -type d -path '*/????/??/??'|sort|tail -n 1` echo pdumpfs make backup as $LATEST , rename to $TEMPNAME mv $LATEST $TEMPNAME #空の「月」ディレクトリができていたら削除 TO_MONTH=`echo ${i} | sed 's/...$//'` LATEST_M=`find ${DEST_BACKUP}/ -maxdepth 2 -type d -path '*/????/??'|sort|tail -n 1` LS_LATEST_M=`ls ${LATEST_M}` [ "${LS_LATEST_M}" = "" ] && rmdir ${LATEST_M} && echo remove empty directory: ${LATEST_M} #退避しておいたバックアップを元々の名前に再配置 [ ! -d ${TO_MONTH} ] && mkdir ${TO_MONTH} && echo create month directory: ${TO_MONTH} mv ${TEMPNAME} ${i} && echo rename ${TEMPNAME} to ${i} done
rsyncでいったんコピーしてから処理するようになっているが、local to localだったらrsyncしない方がいいと思う。pdumpfsのソースをいじってtodayをオプションで与えられるようにするかどうか悩んだが、そんな半端で限定的な改造のほうをよりダサいと感じたのでシェル側でなんとかする泥臭い実装を選択。rsyncしてpdumpfsかける部分は「pdumpfs-rsyncとやってること一緒じゃん?」とも思ったが気にするまい。
でまあ、予想通り時間はかかった。スナップショット30個を移動させるのになんだかんだで2日ぐらい。いろいろ無造作に放り込んである私の使い方の問題もあるだろうけど。