コンピュータ覚書に戻る

サーバ用Bacup HDD作成


  1. はじめに
  2. 方針・使用ソフトウェア
  3. ddのメリット、使い方
  4. mirrordirの使い方

1. はじめに

OpenBlocks 266でサーバを運用していたころ、HDDクラッシュによってサーバがダウンしたことがありました。 幸い、重要なデータはパソコンにバックアップはありましたが、それ以外のサーバの設定などを失ってしまいました。

今現在運用しているサーバは、昔のパソコンを流用して使用しています。 普通のパソコンですのでHDDを複数つむことができます。 昔の反省も生かし、HDD情報をバックアップすることにしました。


2. 方針・使用ソフトウェア

  1. 単独でもブートできるHDDを作成する。
  2. Linuxのツールのみで終わらせる。(ソフトウェアは購入しない)
  3. 手間をかけない。

これら方針適切なソフトウェアは、ずばり、

dd

でしょう。

その後の保守として

mirrordir

も使用することにします。turboには用意されていないので、rpmをDownload、Install。


3. ddのメリット、使い方

3.1. メリット

HDDのスペック(容量やブロックサイズ)が同じである必要はありますが、 HDDの情報を、まったくそのままごっそりとバックアップすることができます。
MBRと呼ばれる、システム起動に必要な領域についても、問答無用でコピーしてくれます。
(ちなみに、普通のコピーではコピーされません。 だって、OSをインストールしないとシステム起動できなさそうな気がしませんか?)

dump/restoreのdumpを使う方法もあったらしいのですが、MBRの設定が必要なようだったので、やめました。同じスペックのHDDが手配できなかったらそれを使おうと思っていました。

3.2. 使い方

まずはシステムをとめます。そして、念のためHDDを使用せずに起動します。 (今回ここではKNOPPIXのCD-ROMを使用してサーバを起動しました。)

ただし、コピー元ディスクを/dev/hdaとし、コピー先ディスクを/dev/hdbとします。

rootで次のコマンドを打ち、データをコピーします。

# dd if=/dev/hda of=/dev/hdb

ifで入力元を指定し、ofで出力先を指定します。

コピー時間がそこそこかかりますが、少なくとも3〜4時間くらいでコピーできます。

3.3. 確認

コピー先のHDDでシステムが起動できるか確認します。これで起動できていたら成功。だめだったら、、、違う方法を考えましょう。HDD不良か??


4. mirrordirの使い方

ディレクトリ単位でミラーリングを行うソフトウェア。オプションがすごくたくさんあるみたいです。でも、単純に使うなら単純。

Backup対象は、

の二通りとします。

バックアップ対象の作業時のマウントは、/dev/hdb1は/mnt/root、/dev/hdb3は/mnt/homeに行うことにします。

4.1. /homeのミラーリング

頻繁に書き換わるので、日次でミラーリングを行います。

下記内容を「mirror_home」として/etc/cron.dailyに保存。

#!/bin/sh

/bin/nice -19 /sbin/fsck.ext3 -p /dev/hdb3 || echo "/dev/hdb3 is crashed" | mail root -s "bk report(err)"
mount /dev/hdb3
/bin/nice -19 /usr/bin/mirrordir /home /mnt/home
echo "/dev/hda3 is backuped" | mail root -s "bk report(collect)"
umount /mnt/home

ミラーリング先のディスクは、通常はマウントされていません。ミラーリング作業時のみにマウントされます。このほうが、トラブルの種にはなりづらいでしょう。

上記ファイルの作業内容は、

  1. ファイルシステムチェック
  2. マウント
  3. mirrordirの実行
  4. アンマウント

です。

4.2. /etc, /var, /usr, /bin, /lib, /sbinのミラーリング

これらのシステムファイルは、/dev/hda1にありました。ただ、/dev/hda1のトップディレクトリが/となっているため、全部を全部mirrorしてしまうのは少々抵抗があります。特にデバイスファイル。

ということで、rpmで扱いそうなあたりのみをミラーリングすることにします。

考え方は、/homeと同じ。週次でバックアップを行うことにします。

以下の内容を「mirror_root」として/etc/cron.weeklyに保存します。

#!/bin/sh

/bin/nice -19 /sbin/fsck.ext3 -p /dev/hdb2 || echo "/dev/hdb2 is crashed" | mail root -s "bk report(err)"
mount /dev/hdb2
/bin/nice -19 /usr/bin/mirrordir /etc /mnt/root/etc
/bin/nice -19 /usr/bin/mirrordir /var /mnt/root/var
/bin/nice -19 /usr/bin/mirrordir /usr /mnt/root/usr
/bin/nice -19 /usr/bin/mirrordir /bin /mnt/root/bin
/bin/nice -19 /usr/bin/mirrordir /lib /mnt/root/lib
/bin/nice -19 /usr/bin/mirrordir /sbin /mnt/root/sbin
echo "/dev/hda1 is backuped" | mail root -s "bk report(collect)"
umount /mnt/root

4.3. テスト

rootになって、直接手で上記のシェルを実行してみます。/etc/cron.weeklyなどに変更が反映されていれば、成功です。

あとはcronに任せましょう。


コンピュータ覚書に戻る