Ce diaporama a bien été signalé.
Nous utilisons votre profil LinkedIn et vos données d’activité pour vous proposer des publicités personnalisées et pertinentes. Vous pouvez changer vos préférences de publicités à tout moment.

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

1 396 vues

Publié le

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

Publié dans : Ingénierie
  • Soyez le premier à commenter

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

  1. 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 これだけです.
  2. 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)の確認が出来ます.
  3. 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
  4. 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 月後くらいでいいかな…
  5. 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 メモリ上で試してみました. テスト用の領域は前もって初期化し
  6. 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 lessfs lessfs 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 lessfs lessfs 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
  7. 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 lessfs lessfs 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=1000 1000+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 lessfs lessfs 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
  8. 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-duplication http://www.lessfs.com/wordpress/ “Lessfs : Brandon Snider ” https://launchpad.net/~brandonsnider/+archive/lessfs

×