FreeBSD 7.0R の smbfs を使って市販の家庭用(Windows用)NASへファイルをバックアップする際の設定メモ書き。
smbfs と rsync or tar の組み合わせで実施。
やることは簡単。
smbfs を使い、NASの共有フォルダを FreeBSDでマウント、その共有フォルダに rsync or tarでファイルのバックアップを実施する。
事前に、smbfs が有効であることの確認と、rsyncの導入を行っておく。tarは大概入ってるでしょ?
NASの共有フォルダをマウントするディレクトリを予め作成しておく。
前提として、root で全て行う。試したが一般ユーザは処理できない。
既に /usr/share/examples/smbfs/dot.nsmbrc のような雛形があるので、このファイルをrootのホームディレクトリへコピーする。
コピー後、.nsmbrc にリネーム。
このファイルには記述例がコメントとして記載されているのでこれを例にして接続先NASの定義をしていく。
以下はその例。
[NAS500G:BACKUPUSER]
password=pass01
charsets=eucjp:cp932
workgroup=MSHOME
この例では、
名称が NAS500G - サーバ名称は実際のサーバで定義したものでなくても良い。
ユーザ BACKUPUSER - ユーザのアルファベットは全て大文字記述する。
パスワード pass01
キャラクタセット - サーバがeucjp、NASがcp932
ワークグループ 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の再起動を行う。
コマンドラインは以下の通り。
amanda# mount_smbfs -N -I 192.168.100.200 //BACKUPUSER@NAS500G/mailbackup /root/NAS
-N - パスワードプロンプトを出さないための指定。これをはずすとプロンプトが表示されパスワードを聞かれる。
-I アドレス - NASのアドレスをIPアドレスもしくはホスト名で指定する。
BACKUPUSER@NAS500G/mailbackup - .nsmbrcで記述したNAS”[NAS500G:BACKUPUSER]“の共有フォルダ mailbackup を指定している。
/root/NAS - BACKUPUSER@NAS500G/mailbackup をマウントするディレクトリを指定する。
rsync もしくは tar でバックアップコピーする。
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 がそのままの構成で同期することになる。
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 に メールをバックアップコピーする運用をやっている。部署メーリングリスト(モドキ)と顧客とのやりとりメールが対象。
なんか、メールシステム提供元は「受信メールはひと月経過したら無条件削除ね」なんて言ってるんだけど、結構昔のメールが問題解決に一役買ったりする。消されたらちょっと困る。