- お知らせ -
  • 当wikiのプログラムコードの表示を直してみました(ついでに長い行があると全体が下にぶっ飛ぶのも修正)。不具合があればBBSまでご連絡下さい。

Ubuntu

はじめに Edit

簡易的にバックアップをする場合は、../homeの簡易バックアップでよいのですが、
そうではなく世代別に何日前、何週間前のデータも残しておきたい、
と言う場合はこちらの方法で行います。

バックアップソフトは、pdumpfspdumpfs-clean を使ってみる予定です。

pdumpfsのインストール Edit

以下でインストールします。

sudo aptitude install pdumpfs

pdumpfsの簡単な使い方 Edit

ものすごく簡単です。

/home以下をマウントした/backup/homeにバックアップしてみる例:

sudo mkdir /backup
sudo mount (デバイス名やパーティション名) /backup 
sudo mkdir -p /backup/home/
sudo pdumpfs /home/ /backup/home/

これで、/backup/home/以下に /home/以下が世代別バックアップされます。

/backup/home/ にできるファイルやディレクトリは、

  • 2009/01/27 のように日付名でのディレクトリ
  • lastest 最新版のディレクトリへのリンク

というようなファイルができているはずです。

pdumpfs-cleanのインストール方法 Edit

pdumpfsをcronなどに入れてバックアップとっていくと毎日どんどんファイルがたまって生きます。
それを掃除してくれるのが、pdumpfs-clean です。

上記ページからダウンロードして、/usr/local/sbin においてみます。
[2010/06/07]時点で上記ページが見られないのでこのサーバーに転載しておきました(GPLなのでOKっぽい)。

ダウンロードして、/usr/local/sbin においてみます。

cd /usr/local/sbin
sudo chmod u+x pdumpfs-clean
sudo wget http://tobysoft.net/archives/ubuntu/pdumpfs-clean

念のため pdumpfs-clean にRubyでUTF-8で処理する記述をしておきます
※うちのサーバーで配布しているものを使う場合はすでに記述してあるので特に必要ないです。

$ sudo vim pdumpfs-clean 
#!/usr/bin/env ruby
$KCODE = 'u'

pdumpfs-cleanの使い方 Edit

上記、pdumpfsの使い方でコピーしたディレクトリに対してpdumpfs-cleanを使う場合、

sudo mount (デバイス名やパーティション名) /backup
sudo /usr/local/sbin/pdumpfs-clean  /backup/home/

上記のように引数を指定していない状態で実行すると、
デフォルトで最近7日分、6週間の核日曜日、6ヶ月の核1日、
最近2年の核1月1日を残します。

デフォルトの設定では場合によってはいざというときに足りないかと思います。
なので、もし残す日付を指定する場合は、--keepオプションを使います

以下の場合、100年間1月1日分("100Y"の部分)、240月間各月1日分("240M")、25週間の各日曜日("25W")、直近31日間毎日分("31D")のデータを残します。(240月間とかなっているのはHDD容量を喰ってもなるべく残したい方針とか)

sudo /usr/local/sbin/pdumpfs-clean  /backup/home/  --keep 100Y240M25W31D

多分、日がたっていない場合は、何も出力されないと思いますので、
verbose表示にしてみます。

sudo /usr/local/sbin/pdumpfs-clean  /backup/home/ -v

以下のように出力されます。

Keep dirs:
/backup/home//2009/01/27

今日バックアップとったものが残されたということがわかるわけです。

スクリプトを書く Edit

上記、pdumpfsとpdumpfs-cleanをcronにて動かすためのshellスクリプトを書いてみます。

sudo vim /usr/local/sbin/home-backup-pdumpfs
sudo chmod u+x home-backup-pdumpfs 

実際に書くスクリプトは以下のとおり。
/dev/sdbとかは要変更

やっていることは、

  1. mountしていなかったらコピー先のディスク(パーティション)をmount
  2. pdumpfs実行
  3. pdumpfs-clean実行
    (ただし、残す日付は、100年間1月1日分、240月間各月1日分、25週間の各日曜日、直近31日間毎日分)
  4. unmount

ということです。

#!/bin/sh -

# Source Directory
SOURCE_DIR="/home/"
# Destination Mount Directory
DEST_MOUNT=/backup
# Destination Backup Directory
DEST_DIR=$DEST_MOUNT/home
# Destination Mount Device
DEST_MOUNT_DEVICE=/dev/sdb

PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

# main
echo "==== starting backup at \"`date`\" ===="
umount $DEST_MOUNT_DEVICE  >/dev/null 2>&1
if mount $DEST_MOUNT_DEVICE $DEST_MOUNT; then
        mkdir -p $DEST_DIR
        for src_dir in $SOURCE_DIR
        do
                echo "===================="
                echo "== begin $src_dir =="
                pdumpfs $src_dir $DEST_DIR 2>&1 | egrep -v '^(unchanged|directory|symlink)'
                #pdumpfs -q $src_dir $DEST_DIR 2>&1
                echo "== end $src_dir =="
        done

        echo "== pdumpfs-clean =="
        pdumpfs-clean $DEST_DIR --keep 100Y240M25W31D 2>&1

        umount $DEST_MOUNT_DEVICE
else        echo "failed to mount"
fi
echo "==== finished backup at \"`date`\" ===="

Source Directoryは複数ある場合は、

SOURCE_DIR="/home/ /usr/local/"

などのようにして指定します。

以下を実行してうまくいくか確認してみてください。

sudo /usr/local/sbin/home-backup-pdumpfs

スクリプトの解説 Edit

pdumpfsは変更していないファイルでもunchangedなどと出力して、
見通しが悪いのと、ログがたまりまくるので 以下のように egrep -v でフィルタしています。
(egrepはgrepの正規表現を使うモード。-v はヒットした行を除く、という意味です)

| egrep -v '^(unchanged|directory|symlink)'

ここでは、更新ファイルも(updated)無視したい場合は、

| egrep -v '^(unchanged|directory|symlink|updated)'

にすればOKです。

使うユーザーが少ない場合は上記でも問題ないかと。

更新されるファイル数が多すぎるなど、
単にファイルのリストなどを出力したくない場合は以下のように --quiet オプションをつければよいです。

pdumpfs --quiet $src_dir $DEST_HOST$DEST_DIR 2>&1 

出力されるログを見ていろいろ応用してみてください。

cronで回す Edit

毎日バックアップを取れるように、上記スクリプトをcronで回しましょう。
詳細は、../cronでスクリプトを回そう を参考。

参考リンク Edit


Show recent 10 comments. Go to the comment page.

  • pdumpfsで毎回たくさんログが残りすぎる。メールで送ると100kbくらいになる!確認中…。egrep -v かませばいけそうです。 -- TOBY 2009-01-28 (Wed) 18:06:30
  • egrepをかましてpdumpfsのログを絞るようにスクリプトを変更してみました。 -- TOBY 2009-01-28 (Wed) 19:44:35
  • スクリプトのところのumountの部分をディレクトリ名でなくて、デバイス名指定に修正 -- TOBY 2009-01-30 (Fri) 19:54:09
  • pdumpfs-cleanの配布サイトが見られないのでこのサーバーに転載しておきました。また、pdumpfs-clean のUTF-8対応の記述がrubyのインストールパス依存になっていた(/usr/sbin/ruby)ので、依存しない形(/usr/bin/envの利用と$KCODEの利用)にしてみました。 -- TOBY 2010-06-07 (Mon) 20:14:56
  • pdumpfs-clean の "--keep" オプションで残す日付を指定する方法を追加してみました。あわせて"スクリプトを書く "のところも修正 -- TOBY 2010-06-07 (Mon) 21:01:17
Name:

Front page   Edit Freeze Diff Backup Upload Copy Rename Reload   New Pages Search Recent changes   Help   RSS of recent changes
Last-modified: 2010-06-07 Mon 22:45:44 JST (3473d)