NFS の利用

FreeBSD の自宅サーバ機のファイルを次期サーバ機にコピーする方法に悩んでいましたが、きょう NFS を使った方法を試してみました。rsync を使うことも検討していましたが、こちらの方が簡単そうですね。(^^;)

まずサーバ機の設定
vi /etc/rc.conf

portmap_enable="YES"
nfs_server_enable="YES"
nfs_server_flags="-u -t -n 4"
mountd_flags="-r"

サーパ機の /home 以下と /user 以下をそれぞれクライアント機(次期サーバ機)にマウントできるようにしようと思います。
exports と言うファイルは存在しないので新たに作ります。この exports に、クライアント機をローカル IP アドレスで指定します。半角の空白を入れて、複数指定することも可能です。
vi /etc/exports
/home -alldirs 192.168.0.31 192.168.0.32
/user -alldirs 192.168.0.31 192.168.0.32

再起動

次はクライアント機の設定
vi /etc/rc.conf

nfs_client_enable="YES"
nfs_client_flags="-n 4"

再起動

で、サーパ機の /home 以下と /user 以下をそれぞれクライアント機の /home 以下と /user 以下にコピーしたいので、クライアント機で root になって、
mount 192.168.0.30:/home /mnt
cp -R -p /mnt/ /home
umount 192.168.0.30:/home /mnt

mount 192.168.0.30:/user /mnt
cp -R -p /mnt/ /user
umount 192.168.0.30:/user /mnt

としてあげます。以上。
これいいね、新しいソフトのインストールもなしで簡単にできるし、他にも色々使い道がありそうです。ミラーリング的なこともできるかな。今後の研究課題です。(^^;)
参考サイトです。
http://www.freebsd.org/doc/ja_JP.eucJP/books/handbook/nfs.html

さて初めてサーバ機の /home 以下をクライアント機の /home 以下にコピーする時は、前回の書き込みのようなコマンドで事足りるのですが、やはりその後更新されたサーバ機の内容をクライアント機にミラーリングするには rsync のようなソフトを利用しなければならないのかと思い、ちょっと試してみました。

その方法は、
mount 192.168.*.*:/home /mnt
でサーバ機の /home 以下をクライアント機の /mnt 以下にマウントした後、
rsync -av --delete /mnt /home
のコマンドを打ってみた。

処理は滞りなく終わったのですが、更新されたはずのフアイルは更新されていません???。 よくクライアント機の /home ディレクトリを見てみると、何と /home ディレクトリの中に home ディレクトリができていた。つまり /home/home となっていたのです。

色々考えたあげく結局こう変更してみました。
まずクライアント機の /mnt ディレクトリ以下に /home ディレクトリを作って、サーバ機の /home ディレクトリ以下をマウントしました。
mount 192.168.*.*:/home /mnt/home
そして、
rsync -av --delete /mnt/home /
こんどはうまく更新されたファイルのみ書き換えられました。m(^^)m
あるいは、
rsync -av --delete /mnt/home/ /home
としてもいいのでしょうか。コピー元ディレクトリの後に / をつけるかつけないかで大違いです。(^^;)

-av --deletersync のオプションで、a はアーカイブモードで、ディレクトリ内に含まれる全てのファイル、/ディレクトリを、シンボリックリンク、パーミッション属性、グループ属性、所有者属性、タイムスタンプを保持したまま同期してくれます。v は、バックアップ時にバックアップしているファイル名を表示してくれます。--delete は、サーバ機で既に削除されたファイルをクライアント機でも削除してくれます。ですから --delete は、2回目以降に使うオプションです。

最終的には /usr/local/bin 辺りに下記の内容
#!/bin/sh
mount 192.168.*.*:/home /mnt/home
rsync -av --delete /mnt/home /
umount 192.168.*.*:/home /mnt/home
mount 192.168.*.*:/user /mnt/user
rsync -av --delete /mnt/user /
umount 192.168.*.*:/user /mnt/user

を書き込んだ backup.sh を作り、パーミッションを 755 にし、/etc/crontab
10 4 * * * root /usr/local/bin/backup.sh
と書いておけば、毎日朝方の4時10分にサーバ機のデータがクライアント機に自動的にコピーされ、その報告がルート宛のメールでなされる。ルート宛のメールを自分のメールアドレスに転送するようにしておけば、分かりやすいですね。
ただし朝の4時にクライアント機が起動していることが前提です。m(^^)m

PageTop