lessfs+pdumpfs でバックアップ始めました

前回ファイルサーバーでlessfsをそのまま使うと問題があることがわかりましたが、
引き続き使い道を模索してみます

pdumpfsと組み合わせる

今回はpdumpfsの弱点補強に使ってみます

pdumpfsとはフォルダのフルバックアップを取るためのツールで
日付ごとのスナップショットを簡単に作ることができます
使い方もとても簡単

 $ pdumpfs /home/iyokan /backup/

しかも単純にフルコピーするのではなく
("ファイルパス" "ファイルサイズ" "タイムスタンプ") が同じなら
ハードリンクを使って無駄なコピーを抑制してくれるすぐれものです

しかし完璧ではなくて
仕様上"ファイル移動"は追跡できません
たとえばフォルダを移動したらそれ以下のファイルすべてがフルコピーされます

また容量が大きいファイルの扱いも苦手です
変更するとファイル全体をコピーしてしまいます

こういった弱点をlessfsで重複排除してあげることで解決してみます

組み合わせる

組み合わせは何も特別な事はなく
lessfsでマウントした場所にpdumpfsでファイルを置くだけです

lessfsとpdumpfsはインストール済みとして
バックアップ用の設定をします

/etc/lessfs.cfg

lessfsの設定ファイル
"/usr/share/doc/lessfs/examples/lessfs.cfg"あたりからひな形を持ってこれる
データの格納パスだけ変更すれば基本的に大丈夫

DEBUG = 5
HASHNAME=MHASH_TIGER192
HASHLEN = 24
BLOCKDATA_IO_TYPE=file_io
BLOCKDATA_PATH=/lessfs-data/dta/blockdata.dta
BLOCKUSAGE_PATH=/lessfs-data/mta
BLOCKUSAGE_BS=1048576
DIRENT_PATH=/lessfs-data/mta
DIRENT_BS=1048576
FILEBLOCK_PATH=/lessfs-data/mta
FILEBLOCK_BS=1048576
META_PATH=/lessfs-data/mta
META_BS=1048576
HARDLINK_PATH=/lessfs-data/mta
HARDLINK_BS=1048576
SYMLINK_PATH=/lessfs-data/mta
SYMLINK_BS=1048576
FREELIST_PATH=/lessfs-data/mta
FREELIST_BS=1048576
CACHESIZE=512
COMMIT_INTERVAL=10
LISTEN_IP=127.0.0.1
LISTEN_PORT=100
MAX_THREADS=8
DYNAMIC_DEFRAGMENTATION=on
COREDUMPSIZE=2560000000
SYNC_RELAX=0
BACKGROUND_DELETE=off
ENCRYPT_DATA=off
ENCRYPT_META=on
ENABLE_TRANSACTIONS=on
BLKSIZE=131072
COMPRESSION=lzo
/etc/default/lessfs

このファイルを設定すると /etc/init.d/lessfs を通じてマウントできるようになる

#mountpoint
MOUNTPOINT=/media/lessfs

#config file
LESSFS_CONFIG=/etc/lessfs.cfg
/media/lessfs/dump.sh

一連のバックアップ作業を書いたシェルスクリプト

#!/bin/bash

DUMPFS=/usr/local/bin/pdumpfs
DUMPDIR=/media/lessfs/dumpfs/cont
LOGDIR=/media/lessfs/dumpfs/log

function dump1 {
  mkdir -p $DUMPDIR/$2
  $DUMPFS $1 $DUMPDIR/$2
  find $DUMPDIR/$2 -type d -print0 | xargs -0 chmod 755
}

#バックアップするフォルダをここに書く
function dumpall {
  dump1 /etc/ etc/
  dump1 /home/iyokan home-iyokan/
  dump1 /var/www/ www/
}

dumpall >$LOGDIR/`date +%y%m%d%H%M`.log 2>&1
sudo crontab -e

毎日朝5時に自動でバックアップするための設定

0 5 * * * /media/lessfs/dump.sh

以上で基本的な設定は終了

読み取り専用のWebDAV

以下ように設定すると読み取り専用になる

<Location /davfs-log>
  DAV     on

  <LimitExcept GET HEAD OPTIONS PROPFIND>
      Deny from all
  </LimitExcept>
</Location>

とりあえずこの設定でしばらく運用してみます

追記

このまま運用すると、700MBほどメモリを消費してしまいます。
さすがに無駄なのでキャッシュサイズを調整しました。
以下の設定でメモリ消費量が80M程度になるようです。

/etc/lessfs.cfg
...
#CACHESIZE=512
CACHESIZE=32
...