9. システムバックアップ

 
 わたし自身、実際に痛い目をみましたが、ハードウェアはいつトラブルにみまわれるかわかりません。  マザーボードのコンデンサが劣化したために電力供給が不安定になり、マシンが停止して起動できなくなったこともあります。ハードディスクがだめになって、起動できなくなったこともあります。  いざそういうときに後で復旧できるように、バックアップを取っておくことが必要です。  バックアップを取る方法もいろいろな方法がありますが、ここではわたしのおすすめする方法を記述します。  この方法は、バックアップマシンを必要としますので、バックアップマシンを用意できない場合はこの方法はできません。  完全に同じシステムを2台以上持つのが一番よいやり方ですが、ここで紹介するのはその方法とは異なります。
9.1 ハードウェアを用意する
9.2 バックアップ先のセットアップ
9.3 バックアップ
9.4 リストア
9.5 定期的なバックアップのために

9.1 ハードウェアを用意する

 VMWare のインストールできる Windows マシンを一台用意します。  Windows マシンには外付けでも構わないので、バックアップ元の FreeBSD マシンより十分な空き領域のあるハードディスクが必要です。  Windows マシンと FreeBSD の間が LAN で接続できる環境にあることも必要です。  以上が用意できれば、バックアップ可能となります。

9.2 バックアップ先のセットアップ

 バックアップ先のマシンに VMWare で仮想の FreeBSD マシンをインストールします。FreeBSD のバージョンはバックアップ元と合わせることが必須ではありませんが、同程度かそれ以降のバージョンのものをインストールします。  インストール方法は「インストール」を参考に。  ディスクスライスを切る場合は、バックアップ先とするスライスにじゅうぶんな容量があるようにスライスを作成します。  /etc/rc.conf に以下の記述を追加します。
portmap_enable="YES"
nfs_server_enable="YES"
nfs_server_flags="-u -t -n 4"
mountd_flags="-r"
rpcbind_ebable="YES"
amd_enable="YES"
 /etc/hosts.allow に以下を記述します。
portmap : ALL : allow
 /etc/exports に以下を記述します。
/usr/backup -maproot=0 -alldirs 192.168.0.x
①          ②          ③      ④
①マウントさせるディレクトリ名を記述します ②-maproot=0 フラグがないと、 リモートマシンの root 権限を 持っていてもファイルを変更することができません ③-alldirs フラグは指定されたファイルシステム 以下のディレクトリに対しても同様に export します ④IPアドレスで指定するホストに①を exports することになります  つまり バックアップ元の IP アドレスを記述します  ここまで設定したら、バックアップ先を Reboot します。

9.3 バックアップ

 バックアップ元にログインして、可能であれば、sshd を除くサーバアプリケーションを停止します。停止しなくてもバックアップは可能ですが、バックアップが始まって以降、メールの受信や HTTP経由のデータベース更新が発生した場合、それらの更新分は保証されません。  /etc/rc.conf に以下の記述を追加します。
nfs_client_enable="YES"
nfs_client_flags="-n 4"
 記述後、以下を実行します。
> nfsiod -n 4
 ここまでで、バックアップ先のディスクをマウントする準備ができましたので、マウントします。
> mount 192.168.0.y:/usr/backup /mnt/windows
        ①                      ②
①マウント先のホスト名(この場合は ID アドレスで指定)とマウントディレクトリの記述です ②マウントポイントを指定 (/mnt は最初からあります /mnt/windos はあらかじめ作成しておきます)
> dump -0uaLC 32 -f /mnt/windows/root.dmp /
> dump -0uaLC 32 -f /mnt/windows/var.dmp  /var
> dump -0uaLC 32 -f /mnt/windows/home.dmp /home
> dump -0uaLC 32 -f /mnt/windows/usr.dmp  /usr
 これはスライスの分割によりダンプするものが異なります。スライスが「/」しかなければ、1行目だけで終了です。  ダンプが終了したら忘れずに umount しておいてください。しておかないと mount 先のネットワークリンクが切れたとき df コマンドが効かなくなります。  ダンプのオプションについて説明しておくと
No.オプション意 味備考
10ダンプレベル0(フルバックアップ)
2uダンプが成功した後で、 /etc/dumpdates ファイルを更新します。
3aメディアの終了を検知します。(テープじゃないので不要かも…)
4LFreeBSD5.0から搭載されたスナップショット機能を使います。
この機能を使えば、シングルユーザモードに落とす必要がありません。
5Cキャッシュサイズを8~32(単位:MB)の間で指定することにより、性能が劇的に向上します。
ただし、Lオプションを付けない場合には、Cオプションも外した方が良さそうです。
6fバックアップ出力先のファイルを指定します。
 わたしの実績では 20GB のバックアップで 20GB finished in 3045 seconds, throughput 972 KBytes/sec  3045秒ですからおよそ 50分です。  もちろんスピードは、ネットワークの状況とディスクアクセスの速度に左右されるわけですが。

9.4 リストア

 あらかじめバックアップ元に /usr/resutore というディレクトリを作成します。
> cd /usr/restore/
> mount 192.168.0.y:/usr/backup /mnt/windows
> restore -rf /mnt/windows/root.dmp
 これで /usr/restore/ に ファイルが作成されます。

9.5 定期的なバックアップのために

 バックアップは定期的に行っておくべきです。バックアップの環境を作成することができたら、以下のような Makefile を作成しておき
backup :
	mount 192.168.0.y:/usr/backup /mnt/windows
	dump -0uaLC 32 -f /mnt/windows/root.dmp /
	dump -0uaLC 32 -f /mnt/windows/var.dmp  /var
	dump -0uaLC 32 -f /mnt/windows/home.dmp /home
	dump -0uaLC 32 -f /mnt/windows/usr.dmp  /usr
	umount /mnt/windows
 定期的に動作させるようにします。
Tips  実は、Windows マシンに共有フォルダを作成して、共有フォルダをマウントして、バックアップしようとしましたがうまくいきませんでした。
> mount_smbfs -E euc-jp:cp932 -I サーバーのIP //ユーザ名@サーバー/共有フォルダ名 /マウントポイント
 とやって上記と同様のバックアップを行ったのですが、restore するときにシンボリックリンクは、Windows の共有フォルダには restore されないということが判明しました。
Tips  マシンを変えて
> dump -0uaLC 32 -f /mnt/windows/root.dmp /
mksnap_ffs: Cannot create snapshot //.snap/dump_snapshot: /: Snapshots are not yet supported when running with journaled soft updates: Operation not supported
dump: Cannot create //.snap/dump_snapshot: No such file or directory
 というエラーが発生していましたが  「FreeBSD 9.3-RELEASEをバックアップするメモ」を参考にしたらうまくいくかもしれないのでうまく行けば更新します。