vine-users ML アーカイブ



[vine-users:060534] RE: サーバーのバックアップ

  • From: "たろかわ" <tarokawa@xxxxxxxxx>
  • Subject: [vine-users:060534] RE: サーバーのバックアップ
  • Date: Fri, 23 May 2003 00:28:17 +0900
かわはらです。今は事情あってMS-Outlookから投稿してますが、
自宅のサーバーはVine2.6です。

kenji@亀岡さんwrote:
>> raidよりもっと良い方法が有ればそちらの方の情報も
>> よろしくお願いします(_ _)

個人で利用する場合、(個人+友人の共用程度)だと、障害発生時
の回復時間はさほど高速でなくてもいいので、(1時間ぐらい
停止させても構わないでしょう?)それであれば、実質的に
raidを組む必要はないと思います。

しかし、バックアップは重要です。いつ、どんな故障がおきるか
わかりませんし、もしかしたら、Linuxカーネルが暴走して
ファイルシステムをぶっ壊すことがあるかもしれません。
そんなことはめったにありませんが、しかし、無保証ソフト
ウェアである以上、バックアップは重要です。

で、Windows であれば、ドライブをまるごとバックアップする
のに、DriveImageというソフトウェアを使ってやりますが、
DriveImageでディスクイメージファイルを作るのと似たような
パーテーション丸ごとのバックアップを作れるのが Linux にも
あって(しかも、無償で。ありがたい)、dump / restore という
コマンドが該当します。たぶん、すでにインストール済みかと
思いますが、入ってなかったら、apt-get install dump
でインストールできます。

我が家では、メインのハードドライブと、バックアップファイル
置き場用のハードドライブがあり、メインのドライブは、 /
と /home にパーテーションがきってあります。バックアップ用
ドライブにも、バックアップ復元作業用の Linux (同じ Vine 2.6)
がインストールしてあるパーテーション(ふだんmountしていない)と、
メインドライブのバックアップデータ置き場のパーテーション
(/usrX/backup/ にmount している)があります。

ちなみに、メインのドライブとバックアップのドライブは
同じ大きさのものを購入してますが、別に同じ大きさである
必要はないです。

で、以下のようなバックアップ作業スクリプトが用意して
あって、適宜、手作業で sudo backup として起動してます。

#! /bin/sh

d=`date +'%Y%m%d'`

/sbin/dump -0 -f /usrX/backup/$d''root. -M -B 1048576 /

/sbin/dump -0 -f /usrX/backup/$d''home. -M -B 1048576 /home

ls -l /usrX/backup/



えと、dump コマンドのパラメータですが、-0 がフルバックアップを
意味します。うちでは、現在のデータサイズが / と /home あわせて
3.5GB ぐらいなのですが、これをフルバックアップする時間が
だいたい5分ちょっとで、就寝前の歯磨きをやってる間に完了する
から、毎回フルバックアップでいいやっということで、こうしてます。
もし、データサイズが多くて、前回のフルバックアップからの
変更差分だけをバックアップしたいなら、 -1 を、毎回、
変更されたものだけをバックアップしたい(増分バックアップ)
なら、回数別に -2 -3 -4 とレベルが一づつふえていくような
スクリプトを用意します。詳細は、dump restore mini-howto
という日本語のドキュメントがあって、これが参考になります。

-B は、生成されるイメージファイルの分割サイズと思えばよく、
1048576 は、1024*1024 で 1GB を意味してます。以前のバージョン
の VineLinux では、2GBを超えるサイズのファイルを作ると、
カーネルがクラッシュしまくったので、1GBを超えないように
していました。現在の ext3 ファイルシステムでは、そんなことは
ありませんが、名残りです。もし、バックアップをCD-R に
焼いて保存するつもりなら、700MBを意味する 716800を
指定します。


万が一の際、復旧するには、restore コマンドでパーテーションに
dump イメージを復元すればいいのですが、、、ここはDriveImage
とは違って、使用中のパーテーションに復元はできません。
それで、バックアップ復元作業用の VineLinux を、最小構成で
別のパーテーションにインストールしてある必要があるわけです。
ここがポイントかもしれません。ええと、ちょうどWindowsXP
の障害回復コンソールと同じような感じになります。
復元作業用の Linux を起動して、メインドライブの /
パーテーションと /home パーテーションへ バックアップしてあった
イメージを restore します。 restore コマンドを使います。

restore コマンドは、パーテーションに復元するのではなくて、
バックアップの中から特定のファイルを取り出す操作もできます。
ちょっと一ヶ月前のファイル状態を見たくなったとき、
(歴史をさかのぼってみたくなったとき)、便利なので、
毎月1日にとったバックアップは、ほかの日のバックアップ
より長く保存するようにしてます。最長で1年間ぐらい保管
すればOKでしょう。

raid だと、こういう風に歴史をさかのぼれる機能はないので、、、


なお、dump restore mini-howto では、バックアップを
とる際には、システムを静止した状態(つまり、シングルユーザー
モード)に落としておいた方がよいとしてあります。たしかに
本当はそのとおりだとは思うのですが、私は、マルチユーザー
モードで活動中のまま、バックアップを取っています。
ヘビーにハードディスクをアクセスし続けるアプリケーション
を実行中でなければ、完全に静止した状態でなくても
平気だろうと思います。

以上です。くわしくは、man dump / man restore を。


p.s.
蛇足ですが、あるディレクトリ下のファイルを隠すように
別のファイルシステムを mount している状態で、隠された
ファイルがあるパーテーションを dump すると、 
assertion failure  -- kernel BUG というメッセージを
出して、linux システムがクラッシュします。

May 17 14:49:23 mathom kernel: Assertion failure in
journal_unlock_journal_head() at journal.c:1872:
"jh->b_jcount > 0"

May 17 14:49:23 mathom kernel: kernel BUG at
journal.c:1872!

mount point の下に、隠れてアクセスできなくなる
ファイルが存在しないことを、一度、確認したほうが
いいでしょう。そんなファイルの存在は、単なる
ディスク領域の無駄遣いなわけで、カーネルバグという
より運用バグですもんね。

--
たろかわ