バックアップに一番いいファイルシステムを頼む

8
バックアップに一番いいファイルシステムを頼む KenichiroMATOHARA(matoken) http://hpv.cc/~maty/ 現在バックアップに rsync で--link-dest オプションを利用して世代バックアップをしています. これはファイルシステムのハードリンクを利用してファイル単位で毎回差分バックアップをするので すが,バックアップされたファイルを見ると毎回フルバックアップを取得しているように見えます. Mac OS X の TimeMachine にイメージは近いです. 削除も古いものをディレクトリごと削除す るだけなので運用も楽です.編集ファイルが少なかったり,差分が少ない時には向いています.仮想 マシンイメージなどがあると仮想マシン実行毎に差分が発生するのであまり向かないでしょう. 以 下はバックアップの例です.crontab で毎日深夜に実行するようにしています. # 日時バックアップ 3 25 * * * /usr/bin/rsync -avv --delete --link-dest=/backup/`/bin/date -d '1 day ago' +%Y%m%d`/ /home/mk/ /backup/`date +%Y%m%d`/ > /dev/null 2>&1 # 14 日前のバックアップを削除 3 15 * * * /bin/rm -rf /backup/`/bin/date -d '14 day ago' +%Y%m%d` > /dev/null 2>&1 これで,/home/mk を毎日/backup/yyyymmdd 以下に 2 週間分バックアップします.差分 バックアップですが,見た目は毎日フルバックアップのように見えます. rsync の他のオプションも 勿論利用できるので,リモートバックアップや,特定のファイル・ディレクトリを除外といったことも可 能です. これはこれで便利だしそこそこ満足しているんですが,欲を言えば圧縮が効けばいいなというこ とで,幾つかファイルシステムを試してみました. NILFS2 国産の Linux 用ファイルシステムで,オンラインでスナップショットをどんどん取っていけるログ 構造化ファイルシステムです.間違って削除してしまったり,上書き保存してしまっても過去のデー タを参照して復旧できます. ということで前から興味はあったけど実際運用したことのない nilfs2 ですが,東京 Debian 勉 強会で取り上げられたのをきっかけに試してみました. ※以下の NILFS2 の設定は DebianSqueeze と UbuntuNatty の環境で確認しました.環境が 違う場合は適時読み替えてください. 導入 パッケージがあるので導入は簡単です. $ sudo apt-get install nilfs2-tools これだけです.

Upload: kenichiro-matohara

Post on 28-May-2015

626 views

Category:

Engineering


3 download

DESCRIPTION

comicmarket80 で頒布されたLinuxSearchers の LinuxManiacs に寄稿した原稿です.

TRANSCRIPT

Page 1: バックアップに一番いいファイルシステムを頼む

バックアップに一番いいファイルシステムを頼む

KenichiroMATOHARA(matoken)

http://hpv.cc/~maty/

 現在バックアップに rsync で--link-dest オプションを利用して世代バックアップをしています.

これはファイルシステムのハードリンクを利用してファイル単位で毎回差分バックアップをするので

すが,バックアップされたファイルを見ると毎回フルバックアップを取得しているように見えます.

Mac OS X の TimeMachine にイメージは近いです. 削除も古いものをディレクトリごと削除す

るだけなので運用も楽です.編集ファイルが少なかったり,差分が少ない時には向いています.仮想

マシンイメージなどがあると仮想マシン実行毎に差分が発生するのであまり向かないでしょう. 以

下はバックアップの例です.crontab で毎日深夜に実行するようにしています.

# 日時バックアップ3 25 * * * /usr/bin/rsync -avv --delete --link-dest=/backup/`/bin/date -d '1 day ago' +%Y%m%d`/ /home/mk/ /backup/`date +%Y%m%d`/ > /dev/null 2>&1 # 14 日前のバックアップを削除3 15 * * * /bin/rm -rf /backup/`/bin/date -d '14 day ago' +%Y%m%d` > /dev/null 2>&1

 これで,/home/mk を毎日/backup/yyyymmdd 以下に 2 週間分バックアップします.差分

バックアップですが,見た目は毎日フルバックアップのように見えます. rsync の他のオプションも

勿論利用できるので,リモートバックアップや,特定のファイル・ディレクトリを除外といったことも可

能です.

 これはこれで便利だしそこそこ満足しているんですが,欲を言えば圧縮が効けばいいなというこ

とで,幾つかファイルシステムを試してみました.

NILFS2

 国産の Linux 用ファイルシステムで,オンラインでスナップショットをどんどん取っていけるログ

構造化ファイルシステムです.間違って削除してしまったり,上書き保存してしまっても過去のデー

タを参照して復旧できます.

 ということで前から興味はあったけど実際運用したことのない nilfs2 ですが,東京 Debian 勉

強会で取り上げられたのをきっかけに試してみました.

※以下の NILFS2 の設定は DebianSqueeze と UbuntuNatty の環境で確認しました.環境が

違う場合は適時読み替えてください.

導入

パッケージがあるので導入は簡単です.

$ sudo apt-get install nilfs2-tools

これだけです.

Page 2: バックアップに一番いいファイルシステムを頼む

ディスクの初期化

以下の例では/dev/vdb1 というディスクを nilfs で初期化しています.

$ sudo mkfs.nilfs2 /dev/vdb1

mkfs.nilfs2 ver 2.0

Start writing file system initial data to the device

Blocksize:4096 Device:/dev/vdb1 Device Size:10736328704

File system initialization succeeded !!

マウント

早速マウントします.

$ sudo mount -t nilfs2 /dev/vdb1 /export/

mount.nilfs2: WARNING! - The NILFS on-disk format may change at any time.

mount.nilfs2: WARNING! - Do not place critical data on a NILFS filesystem.

怖いメッセージが出ますがうまくマウントできたようです.

恒久的なマウントの設定

このままでは再起動を行うとアンマウントされるので,/etc/fstab に設定します.まずはそのために

UUID を調べようとしましたが,UUID が見当たりませんでした.

$ sudo blkid /dev/vdb

$ ls -l /dev/disk/by-uuid/

合計 0

lrwxrwxrwx 1 root root 10 2011-06-16 03:26 a4ad2750-5207-4d1a-abdd-9680b5469780 -> ../../vda1

以下のスレッドを見ると,nilfs には実装されているけど周りの実装が追いついていないんでしょう

か.

"Nilfs users (Log-Structured Snapshotting Filesystem)" http://comments.gmane.org/gmane.comp.file-systems.nilfs.user/1400

仕方がないのでデバイス名で設定します./etc/fstab に以下を追記して念の為再起動して動作確

認を行います.

/dev/vdb1 /export nilfs2 noauto 0 0

再起動.

$ mount|grep /dev/vdb1

/dev/vdb1 on /export type nilfs2 (rw,gcpid=654)

チェックポイントの確認

lscp コマンドで,チェックポイント(cp)の確認が出来ます.

Page 3: バックアップに一番いいファイルシステムを頼む

$ lscp

CNO DATE TIME MODE FLG NBLKINC ICNT

1 2011-06-10 01:52:47 cp - 11 3

2 2011-06-10 01:54:41 cp - 11 4

3 2011-06-10 02:00:11 cp - 1324 143

4 2011-06-10 02:00:17 cp - 4674 184

自動的に cp が作られているのが解ります.

スナップショットの作成

mkcp -s でコマンド実行時のスナップショット(ss)が取得できます.

$ sudo mkcp -s

$ lscp|grep ss

42 2011-06-10 02:02:59 ss - 2878 816

cp の場合は自動的に生成されますが,ガベージコレクションが自動的に削除します.削除タイミン

グは/etc/nilfs_cleanerd.conf の protection_period の秒数の間は保護されるのでそれ以降

になります. それに対して ss はGC では削除されません.

スナップショットからの復元

さて,スナップショットからの復元も試してみます. まずはテストファイルを作成してスナップショット

の作成を行います.

$ mkdir test

$ echo test > test/testdata

$ cat test/testdata

test

$ sudo mkcp -s

$ lscp | tail -2

9519 2011-06-17 00:59:57 ss - 25 585668

9520 2011-06-17 01:00:23 cp i 20 585668

今作ったファイルを削除してスナップショットをマウントして復元してみます. スナップショットのマウ

ントはマウントオプションに -o ro,cp=9519 の様にリードオンリーと,対象のスナップショットを指

定してマウントします.

$ rm test/testdata

$ sudo mkdir /media/nilfs-ss

$ sudo mount -t nilfs2 -o ro,cp=9519 /dev/sdc1 /media/nilfs-ss

$ ls -l /media/nilfs-ss/test/testdata

-rw-r--r-- 1 mk mk 5 2011-06-17 00:59 /media/nilfs-ss/test/testdata

$ cat /media/nilfs-ss/test/testdata

Page 4: バックアップに一番いいファイルシステムを頼む

test

$ cp -p /media/nilfs-ss/test/testdata test/

$ cat test/testdata

test

$ sudo umount /media/nilfs-ss

うまく行きました!

スナップショットの削除

スナップショットは自動的に消えないのですが,ある程度のところで削除しないとディスクがいっぱ

いになってしまいます.スナップショットの削除を試してみます.

スナップショットを確認して rmcp コマンドで削除してみます.

$ lscp|grep ss

42 2011-06-10 02:02:59 ss - 2878 816

9519 2011-06-17 00:59:57 ss - 25 585668

$ sudo rmcp 42

rmcp: 42: cannot remove snapshot

To delete snapshot(s), change them into checkpoints with

chcp command before removal.

失敗しました.スナップショットのままでは削除できないようです.一旦 cp に変更して削除してみま

す.

$ sudo chcp cp 42

$ lscp |grep ss

9519 2011-06-17 00:59:57 ss - 25 585668

$ lscp |grep '42 2011-06-10 02:02:59'

42 2011-06-10 02:02:59 cp - 2878 816

cp になりました.放おっておいてもGC されると思いますが明示的に削除してみます.

$ sudo rmcp 42

$ lscp |grep '42 2011-06-10 02:02:59'

消えたようです.

最古の ss を cp にするのは以下のような感じで行けそうです.

# lscp | grep ss | head -1 | awk '{print $1}' | xargs chcp cp

先ずは,1 日一回 crontab で mkcp -s してみようと思います. 消すのは容量と相談しながらです

が 1月後くらいでいいかな…

Page 5: バックアップに一番いいファイルシステムを頼む

Lessfs

このファイルシステムを知ったのは,2ch の Linux板「ファイルシステム総合スレ その 12」の 990

でした.

990 名前:login:Penguin [sage]: 2011/07/27(水) 20:31:12.69 ID:8rO7Z0JW

>>987

うちはこんなの使ってる。

ttp://www.lessfs.com/wordpress/

重複排除、圧縮、暗号化と一通り対応してる。

恐くてバックアップ用途だけだけど、7世代バックアップ取っても、オリジナルよりサイズが

小さくすんでるよ。

これは良さそうだ.ということで試してみました.

※以下の Lessfs の設定は UbuntuNatty の環境で確認しました.環境が違う場合は適時読み替

えてください.Lucid については ppa のパッケージが一緒に用意されていたので恐らく同じ手順で

動くでしょう.“lessfs | Open source data de-duplication ”http://www.lessfs.com/wordpress/

Lessfs は重複排除,圧縮と暗号化(lzo or QuickLZ)を行う fuse を利用したファイルシステムの

ようです.重複排除はブロックデバイス単位で行うようです.

パッケージはないようですが,PPA があったのでこれを利用させてもらうことにします.

“Lessfs : Brandon Snider ”https://launchpad.net/~brandonsnider/+archive/lessfs

lessfs の原稿執筆時点での最新版のソースは 1.5.0,ppa は 1.4.8 ですが,1.4.9 ではログ書き

出し機能の追加,1.5.0 では db のパフォーマンス改善などが盛り込まれているようです.とりあえ

ず試すのには問題なさそうなので ppa の 1.4.8 で試します.

導入

ppa を登録して導入します. $ sudo add-apt-repository ppa:brandonsnider/lessfs $ sudo apt-get update $ sudo apt-get install lessfs

これで lessfs が導入されたはずです.

起動スクリプトも設定されました.

ファイルシステムの作成

今回は試しに 4GB の USB メモリ上で試してみました. テスト用の領域は前もって初期化し

Page 6: バックアップに一番いいファイルシステムを頼む

て/media/lessfs にマウントしておきます.

$ sudo mkfs.ext3 /dev/sdc1 $ sudo mount /dev/sdc1 /media/lessfs $ sudo chown mk:mk /media/lessfs

設定ファイルを用意します.パッケージで用意された設定ファイルをベースに編集します.

$ cp /usr/share/doc/lessfs/examples/lessfs.cfg /media/lessfs

このベースファイルの/data/{dta,mta} にメタデータが作成されるようです.環境に合わせて/data

部分を書き換えます. 今回は/media/lessfs にしました. ほかの部分は既定値のままです.

メタデータのディレクトリを作成しておきます.

$ mkdir /media/lessfs/{dta,mta}

そしていよいよマウントです.マウントポイントは/media/lessfs/mnt にしました.

初回マウント時はメタデータを作ららしく 20秒ほど時間がかかりました.

$ mkdir /media/lessfs/mnt $ lessfs /media/lessfs/lessfs.cfg /media/lessfs/mnt $ mount |grep lessfs lessfs on /media/lessfs/lessfs type fuse.lessfs (rw,nosuid,nodev,max_read=131072,default_permissions,allow_other)

無事マウントされたようです.

利用前の容量を確認しておきます.

$ df -k|grep lessfs lessfs 3850292 137952 3516752 4% /media/lessfs/lessfs

重複排除の確認をしてみます.

先ずは適当なファイルを lessfs 以下に cp します.

$ ls -l ~/Downloads/squeeze-custom-amd64-0710.iso-rw-r--r-- 1 mk mk 196120576 2011-07-10 21:35 /home/mk/Downloads/squeeze-custom-amd64-0710.iso$ cp /home/mk/Downloads/squeeze-custom-amd64-0710.iso /media/lessfs/lessfs/$ df -k|grep lessfslessfs 3850292 517508 3137196 15% /media/lessfs/lessfs$ cp /media/lessfs/lessfs/squeeze-custom-amd64-0710.iso /media/lessfs/lessfs/squeeze-custom-amd64-0710.iso-2$ df -k|grep lessfslessfs 3850292 517628 3137076 15% /media/lessfs/lessfs$ cp /media/lessfs/lessfs/squeeze-custom-amd64-0710.iso /media/lessfs/lessfs/squeeze-custom-amd64-0710.iso-3$ cp /media/lessfs/lessfs/squeeze-custom-amd64-0710.iso

Page 7: バックアップに一番いいファイルシステムを頼む

/media/lessfs/lessfs/squeeze-custom-amd64-0710.iso-4$ cp /media/lessfs/lessfs/squeeze-custom-amd64-0710.iso /media/lessfs/lessfs/squeeze-custom-amd64-0710.iso-5$ df -k|grep lessfslessfs 3850292 517904 3136800 15% /media/lessfs/lessfs$ ls -l /media/lessfs/lessfs/

合計 957620-rw-r--r-- 1 mk mk 196120576 2011-08-10 02:42 squeeze-custom-amd64-0710.iso-rw-r--r-- 1 mk mk 196120576 2011-08-10 02:46 squeeze-custom-amd64-0710.iso-2-rw-r--r-- 1 mk mk 196120576 2011-08-10 02:47 squeeze-custom-amd64-0710.iso-3-rw-r--r-- 1 mk mk 196120576 2011-08-10 02:47 squeeze-custom-amd64-0710.iso-4-rw-r--r-- 1 mk mk 196120576 2011-08-10 02:47 squeeze-custom-amd64-0710.iso-5

中身な同じファイルが増えても利用量は殆ど増えません.次は圧縮の確認をしてみます.圧縮効率

が良くなるように中身が 0だけの大きなファイルを作ります.

$ dd if=/dev/zero of=/media/lessfs/lessfs/zero bs=1M count=10001000+0 記録始め1000+0 記録終わり1048576000 バイト (1.0 GB) コピー終了, 4.35437 s, 241 MB/s$ ls -l /media/lessfs/lessfs/zero -rw-r--r-- 1 mk mk 1048576000 2011-08-10 02:50 /media/lessfs/lessfs/zero$ df -k|grep lessfslessfs 3850292 518360 3136344 15% /media/lessfs/lessfs

1GB のファイルを追加しましたが容量は殆ど増えていません.素晴らしいですね.

終わりに

NILFS2 はスナップショットからの復元が簡単なので,バックアップだけでなくホームディレクトリな

どの通常作業時のディレクトリとして利用するのも便利そうです.Lessfs は fuse 経由ですし書き

込みも遅いようですが重複排除や圧縮などが便利なので頭で紹介した rsync バックアップなどと

組み合わせて使うと便利そうです.ブロックデバイス単位で重複排除も効きそうなので仮想マシン

イメージなどのバックアップにも良さそうです.問題はどちらも利用実績が少ないので不安が残る

ところでしょうか.私の環境では現在 NILFS2 はバックアップ領域から更に差分バックアップ取得

のために利用しています.Lessfs は未だ検証中といったところです.

後は,期待のBtrfs やライセンスの関係で Linux で利用するのは面倒ですが ppa への登録もあ

る ZFS なども近いうちに試してみようと思っています.

参考 URL

NILFS |技http://www.waza.jp/nilfs/ NILFS - Continuous Snapshotting Filesystem for Linux

Page 8: バックアップに一番いいファイルシステムを頼む

http://www.nilfs.org/ja/index.html [NILFS] What is NILFS? http://www.nilfs.org/ja/about_nilfs.html

第 70 回 東京エリア Debian 勉強会 2010 年 11 月 - 特集 : 俺のファイルシステムは熱いぜ!- http://tokyodebian.alioth.debian.org/pdf/debianmeetingresume201011.pdf lessfs | Open source data de-duplicationhttp://www.lessfs.com/wordpress/ “Lessfs : Brandon Snider ”https://launchpad.net/~brandonsnider/+archive/lessfs