LANDISK HACKING DIARY | ||
Since2005/8/17 | ||
TOPへ戻る | ||
INDEX | ||||||||||||||
1. dump で HDD(master)から HDD(slave)へバックアップする 2. インクリメンタルバックアップ |
||||||||||||||
dump で HDD(master)から HDD(slave)へバックアップする | ||||||||||||||
dump は、ファイルシステム単位でのバックアップを行うことができ、更新されたファイルだけをバックアップするインクリメンタルバックアップも行うことができる。アーカイヴに要する時間も、他の方法にくらべて非常に高速であるという特徴がある。しかしながら、特定のファイルをアーカイヴの対象から除外するような機能は用意されていない(chattr による attirbute属性を使えば可能)。バックアップには様々なコマンドやツールがあるが、面倒くさくてつい cp や tar コマンドなどに頼って自作のシェルスクリプトで部分バックアップを行ってきたが、今回、重い腰をあげて dump コマンドに関して覚えてみることにした。ここでは、1台のマシンに同容量の2台のハードディスクを挿入し、プライマリMaster から プライマリSlave へバックアップしてみることにする。 まず、/etc/fstab の第5フィールドにバックアップしておきたいファイルシステムに「1」のフラグを立てておく。swap や /proc などはバックアップする必要がないので「0」にしておく。
■バックアップしないファイルの除外 attribute を設定し、バックアップしないファイルを除外する。d のフラグが立ったディレクトリはバックアップ対象から除外することができる。ただし level 0 のフルダンプの際デフォルトではこの指定は無視され、実際に効果があるのは level 1 以降のインクリメンタルバックアップの時になります。もし level 0 の時も同じ効果を得たい場合は dump の h オプションで指定する必要があります。バックアップする必要のないディレクトリは、squid のキャッシュや、ウィルスメールを格納するディレクトリ、/tmp ディレクトリなどがある。
■dumpの書式
■dump のオプション
以上の点を踏まえ、実際にバックアップを行ってみる。フルバックアップ時には、できる限りシングルユーザーモードで実行するようにする。これは、バックアップ中にファイルに変更があった場合に、そのファイルがバックアップされるとは限らないからである。とりあえず、fdisk で同容量のパーティションを予め作成しておく(以下の例では swap 領域も作成しているが実際は必要ない)。
ファイルシステムのフォーマット。
ファイルシステム(バックアップ先)のマウント。
試しに、/dev/hda1 をバックアップしてみる。-u オプションは増分バックアップ(インクリメンタルバックアップ)するには必須。/dev/hda1(/boot)を、/mnt/hdb1/dump-hda1.bkup としてバックアップしている。
上記の例では、イメージファイルとして/dev/hdb にバックアップしているが、どうせなら dump → restore の処理を同時に実行し、/dev/hdb にファイルやディレクトリが展開(復元)された状態にしておいたほうがシステム復元時により楽になる。そのためには、以下のように、dump と restore コマンドをパイプで繋ぎ、一度に処理するといいだろう。「-f -」でパイプに流せる。注意すべき点は、resotre コマンドを実行した際に、ファイルはカレントディレクトリに展開されるため、予めリストアしたい位置(PATH)に移動しておく必要がある。restore コマンド の -r オプションは「復元」、-f は「ファイル指定」を意味する。
※インクリメンタルバックアップを行う必要がないのであれば、restoresymtable を削除する。この状態で、コピー元とコピー先の容量が同じであることを確認する。
バックアップを終えたら、/etc/dumpdates を確認してみる。左から順に、[ バックアップしたファイルシステム ] [ ダンプレベル ] [ バックアップした日付 ] という形式で記述される。このファイルは、インクリメンタルバックアップの際にdumpレベルを調べるために使用され、dumpコマンドに-uオプションを付けると、/etc/dumpdatesファイルが更新される。
|
||||||||||||||
インクリメンタルバックアップ | ||||||||||||||
インクリメンタルバックアップを1日に1回実行するようにしてみる。さてさて、ここから記述することも筆者は自信がありません。完全な我流なので本当にこれでいいのかどうかもよくわからないのであくまで自己責任で読んでください。なにせ、テープへのバックアップを前提とした文献が多かったので…。バックアップ本でも1冊買ってみるのもいいかもしれませんね。 筆者のバックアップの考え方としては、 1. いくら深夜とはいえ、毎日フルバックアップするほどの負荷をシステムにかけたくない。 2. 日曜日の深夜にフルバックアップし、月曜日~土曜日までは増分バックアップする。 3. /dev/hda と /dev/hdb が常に同期するようにする。 インクリメンタルバックアップの本来の方法としては、ダンプレベル 1~9 までの整数を用いて、1日に更新された分だけをテープにバックアップしていき、復元する際も、増分バックアップした 1~9 のレベルのものを順番に復元していかなければ完全な復元にはならないんだと思います(違う?)。もし、筆者の認識が間違っていないとすれば、復元する際に筆者はこんな面倒なことはできません。ということで、筆者の場合は、/dev/hda のディスクと /dev/hdb のディスクが常に同じ状態に保っておくようにし、特定のファイルを誤って削除してしまった場合などにいつでも取り出せるような環境を構築していきます。勿論、/dev/hdb は常にオンライン状態にしておきます。電気代が気になる方は以降は読む必要がありませんので悪しからず。 まず、フルバックアップを最初にとっておく。同時に、展開(復元)もしてしまいます。ちまちまコマンドを打つのも面倒なので、シェルスクリプトでフルバックアップします。それでは、ちょっと散歩してきます。
ふー、ただいま。/etc/dumpdates を見てみる。きちんとフルバックアップできているようですね。
以降は、dump がどこまで賢くバックアップできるのか、実験してみます。まず、WAVファイルを /home/kororo に置いておく。
レベル1 のインクリメンタルバックアップを行います。/dev/hdb5/kororo に移動して、VOICE001.wav があれば、インクリメンタルは成功です。
今度は、VOICE001.wav を削除して、レベル2 として dump してみます。今度は、バックアップ先にも VOICE001.wav が消えていなければならないはずです。問題なく消えているようです。
第2の実験として、ファイルサイズのわずかな違いも認識できるのか試してみることにする。sshd_config を kororo のホームディレクトリにコピーし、レベル3としてバックアップする。
/home/kororo/sshd_config の最終行に「a」と1文字加えてみます。その後で、レベル4 としてダンプしてみる。バックアップ先のファイルを見てみると、確かに「a」という文字が追加されたsshd_config が正常にバックアップされたことを確認しました。
つまり…追加したファイルもバックアップ先に追加され、削除したファイルもバックアップ先から削除される。同期ができることになる。よって、以下のようにスケジューリングすればいいわけだ。日曜日にダンプレベル 0 のフルバックアップを行う。月曜~土曜はインクリメンタルでレベルをひとつづづあげながらバックアップしていく(なぜなら、レベルを1つづつあげてバックアップしていかないとエラーが発生するからだ)。このバックアップスケジュールを cron に登録してしまえば、全て自動化できる。cron でも、「0」は日曜日を意味しているので、どうせなら cron の曜日とダンプレベルをあわせてしまったほうがわかりやすいだろう。
まず、毎日実行するための、シェルスクリプトを7つ作成する(シェルスクリプトには詳しくないので7つも用意するだけです。ひとつのファイルで出来る方なら…もっとも出来る方なら筆者の真似はしないでしょう)。
実行権を付与する。
上記で作成したスクリプトを cron に登録し、指定の曜日の深夜5時5分に実行されるようにする。ログは、ダンプコマンド実行時に開始時間と終了時間が記述されるので追記する必要はないだろう。
今現在、執筆している曜日が月曜日なので、ダンプレベル1(月曜日)まで終わらせておく。明日、起きてから /etc/dumpdates を見て、ダンプレベル 2(火曜日)の出力が書き込まれていれば無事にバックアップ成功である。我ながら、意外と完璧な気がする。まぁ、1週間経ってみないと完全に成功したとはいえないが。
|
||||||||||||||
参考文献 | ||||||||||||||
⇒Linux: dump and restore mini-HOWTO |
TOPへ戻る | ||
Copyright © KORO All Rights Reserved. |