目次

市販NASへのファイルバックアップ例

2009年01月10日 17時41分51秒

これはなに?

FreeBSD 7.0R の smbfs を使って市販の家庭用(Windows用)NASへファイルをバックアップする際の設定メモ書き。
smbfs と rsync or tar の組み合わせで実施。

リンク

FreeBSDでデスクトップ&サーバー mount_smbfs - こちらは、/etc/nsmb.conf と /etc/fstab の組み合わせで説明している。

概略

やることは簡単。
smbfs を使い、NASの共有フォルダを FreeBSDでマウント、その共有フォルダに rsync or tarでファイルのバックアップを実施する。

事前に、smbfs が有効であることの確認と、rsyncの導入を行っておく。tarは大概入ってるでしょ?

smbfsマウント

NASの共有フォルダをマウントするディレクトリを予め作成しておく。
前提として、root で全て行う。試したが一般ユーザは処理できない。

.nsmbrcの作成

既に /usr/share/examples/smbfs/dot.nsmbrc のような雛形があるので、このファイルをrootのホームディレクトリへコピーする。 コピー後、.nsmbrc にリネーム。 このファイルには記述例がコメントとして記載されているのでこれを例にして接続先NASの定義をしていく。
以下はその例。

 [NAS500G:BACKUPUSER]
 password=pass01
 charsets=eucjp:cp932
 workgroup=MSHOME

この例では、

で接続する事を指定している。
また、FreeBSD側が EUC-JP で NAS側が CP932 の文字コードを使っている旨宣言している。この指定がないと双方で文字化けする。

モジュールのロード

mount_smbfs コマンドでマウントを行う。その際、

mount_smbfs: kldload(smbfs): Operation not permitted

の表示が出るならカーネルモジュールがロードされていない。

amanda# kldload smbfs

を実行してsmbfsモジュールをロードするか、/boot/loader.conf に

smbfs_load="YES"

の1行を追加してOSの再起動を行う。

smbfs でマウント

コマンドラインは以下の通り。

amanda# mount_smbfs -N -I 192.168.100.200 //BACKUPUSER@NAS500G/mailbackup /root/NAS

バックアップコピー

rsync もしくは tar でバックアップコピーする。

rsyncでコピー

rsync はオプションを誤ると悲惨な目にあう。気をつけること。基本は以下でいい。

amanda# rsync -av /home/usr/Maildir/ /root/NAS/

上記は /home/usr/Maildir を /root/NAS へコピーする。コピー対象は Maildir ディレクトリを含む。
これが、

amanda# rsync -avr /home/usr/Maildir /root/NAS/

だった場合は、/home/usr/Maildir 以下を /root/NAS へコピーする。コピー対象に Maildir ディレクトリを含まない。

2回目からは変更/追加のあったファイルだけがコピーされる。※Remote sync な訳で
/root/NAS 以下に /home/usr/Maildir がそのままの構成で同期することになる。

tarでコピー

rsyncを試してうまく行くなら万歳。 うまく行かないのは、ファイル名として使用可能な文字やらファイル名の長さやら、ACL関係の情報の差異やらが、FreeBSD側のファイルシステムとNAS側がファイルシステムが異なるため。 小細工するよりはtarで固めた方が早い。以下はその例。

amanda# tar cvfz /root/NAS/Maildir.tar.gz /home/usr/Maildir

Maildir.tar.gz の名前でアーカイブを NASに作成する。 アーカイブ対象を ”/” から始まるディレクトリにすると、最近のtar はパス先頭の “/“を外してアーカイブしてくれるようだ。

こんなシェルスクリプトを cron で毎日走らせれば7日間のバックアップが定期的に作られる。

 #!/bin/sh -f
 . /root/.profile >/dev/null
 LANG=C
 export LANG
 filename=Home.usr.Maildir.`date +'%a'`.tar.gz
 
 cd /root
 if mount_smbfs -N -I 192.168.100.200 //BACKUPUSER@NAS500G/mailbackup /root/NAS
 then
   tar cfz /root/NAS/$filename /home/usr/Maildir/
 fi
 umount /root/NAS

月曜から日曜まで、Home.usr.Maildir.Mon.tar.gz ~ Home.usr.Maildir.Sun.tar.gz の名前でtar アーカイブが作られる。

共有フォルダのアンマウント

amanda# umount /root/NAS

これで共有フォルダのアンマウントができる。

その他

マウントしっぱなしであると、どうもおかしくなる場合がある。 これがNAS起因なのかsmbfs起因なのかは分らない。必要な時にマウント、終わったらすぐアンマウント、これが今のところ問題なく動いている。

会社では実際にこの方法でFreeBSD 7.0R から 複数台のTeraStation に メールをバックアップコピーする運用をやっている。部署メーリングリスト(モドキ)と顧客とのやりとりメールが対象。 なんか、メールシステム提供元は「受信メールはひと月経過したら無条件削除ね」なんて言ってるんだけど、結構昔のメールが問題解決に一役買ったりする。消されたらちょっと困る。