2009-12-27

カスタムMSS2のSambaを「ごみ箱」対応にする

カスタムファームウェアを入れたNAS「Maxtor Shared Storage II」(MSS2)にSambaを入れてみます。
参考過去記事:
 MSS2にカスタムファームウェアを入れる
 カスタムMSS2のパッケージ管理システム(optwareとipkg)について

Sambaは標準で入ってるのに、なぜ自分で導入するの?

純正MSS2にもSambaは入っています。というかNASですから、Sambaこそがメイン機能です。
じゃあどうしてわざわざ改めてSambaを入れるかと言うと…、デフォルトで入ってるSambaには「ごみ箱」(recycle bin)機能がないのです。
ごみ箱機能は――削除操作したファイルをいきなりHDDから消してしまわずに、いったん一時的な場所に格納しておく…という説明をするまでもないポピュラーなものですが――PC上ではローカルなHDDにしか使えません。
そのため、NASでごみ箱を使うには、PC側ではなくNAS側で仕組みを用意する必要があるのです。

ipkgを使ってoptwareのSambaをインストール

ではSambaをインストールします。
# /opt/bin/ipkg list | grep samba
samba - 3.2.15-1 - Samba suite provides file and print services to SMB/CIFS clients.
samba2 - 2.2.12-1 - Lightweight Samba suite provides file and print services to SMB/CIFS clients.
samba3-dev - 3.2.15-1 - development files for samba3
samba3-swat - 3.2.15-1 - the Samba Web Admin Tool for samba3

現在の安定版が3.4系で、その前の安定版が3.3系なので、optwareで入手できる3.2系は「前の前の安定版」ということになりますが、ごみ箱を使うぶんには差し支えありません。

# /opt/bin/ipkg install samba
Installing samba (3.2.15-1) to root...
Downloading http://ipkg.nslu2-linux.org/feeds/optware/cs05q3armel/cross/stable/samba_3.2.15-1_arm.ipk
package samba suggests installing cups
Installing popt (1.15-1) to root...
Downloading http://ipkg.nslu2-linux.org/feeds/optware/cs05q3armel/cross/stable/popt_1.15-1_arm.ipk
Installing readline (6.0-1) to root...
Downloading http://ipkg.nslu2-linux.org/feeds/optware/cs05q3armel/cross/stable/readline_6.0-1_arm.ipk
Installing openldap-libs (2.3.43-1) to root...
Downloading http://ipkg.nslu2-linux.org/feeds/optware/cs05q3armel/cross/stable/openldap-libs_2.3.43-1_arm.ipk
Installing openssl (0.9.7m-5) to root...
Downloading http://ipkg.nslu2-linux.org/feeds/optware/cs05q3armel/cross/stable/openssl_0.9.7m-5_arm.ipk
Installing libdb (4.2.52-3) to root...
Downloading http://ipkg.nslu2-linux.org/feeds/optware/cs05q3armel/cross/stable/libdb_4.2.52-3_arm.ipk
Installing gdbm (1.8.3-2) to root...
Downloading http://ipkg.nslu2-linux.org/feeds/optware/cs05q3armel/cross/stable/gdbm_1.8.3-2_arm.ipk
Installing cyrus-sasl-libs (2.1.23-1) to root...
Downloading http://ipkg.nslu2-linux.org/feeds/optware/cs05q3armel/cross/stable/cyrus-sasl-libs_2.1.23-1_arm.ipk
Configuring cyrus-sasl-libs
Configuring gdbm
Configuring libdb
Configuring openldap-libs
Configuring openssl
Configuring popt
Configuring readline
Configuring samba
The original samba version 2 config (/etc/samba/smb.conf) is no longer
working with this version of samba.
Please create a new samba version 3 config (/opt/etc/samba/smb.conf).
After verify your smb.conf file, modify and execute /opt/etc/init.d/S08samba
to activate the samba version 3.
Successfully terminated.

Sambaパッケージだけでなく、依存しているパッケージもいくつか自動でインストールされたようです。

これでごみ箱が使えるようになったかというと、最後のメッセージを見るに、いま入れたSambaは自動的には使用可能にならない模様。
指示に従い、/opt/etc/samba/smb.conf を作成してから /opt/etc/init.d/S08samba を書き換えることにします。

smb.confの設定

smb.confを一から作るのも大変なので、デフォルトのsmb.confを流用します。
/etc になくて探しましたが、/usr/lib で発見。
(ちなみにSambaが使うディレクトリは、smbd -b としてビルドオプションを表示させれば分かります)

元のSambaのバージョンは 3.0.10 だったので(smbd -Vで確認できます)、設定ファイルの互換性的には問題ないでしょうということで、ごみ箱に関する部分だけ書き加えます。

ユーザーの共有リソースのセクションに、下記赤字部を追加しました。
[***]
comment = ***
path = /share/***
invalid users =
read list =
write list = "***"
printable = no
vfs objects = recycle
recycle:repository = .recycle
recycle:keeptree = yes
recycle:versions = yes

init.d/S08sambaの編集

次に /opt/etc/init.d/S08samba を編集します。
とりあえず中身を見てみると、
#!/bin/sh

# set samba_active=1 to activate samba
samba_active=0

[ 1 = $samba_active ] || exit 0

if [ -n "`pidof smbd`" ] ; then
    echo "Stopping smbd:"
    killall smbd
fi

if [ -n "`pidof nmbd`" ] ; then
    echo "Stopping nmbd:"
    killall nmbd
fi

sleep 2

echo "Starting nmbd:"
/opt/sbin/nmbd -D
echo "Starting smbd:"
/opt/sbin/smbd -D

なるほど、このままではSambaが起動しないようになっています。
「samba_active=1」と書き換えます。他は触る必要はなさそう。

デフォルトのSambaを無効化

新しいSambaを起動する前に、古いSambaを止めましょう。
Web管理画面を Advanced Features > Advanced Configuration >Services と進み、nmbd と smbd のチェックボックスをoffにします。

Sambaの認証ファイルをコピー

このままでも新しいSambaは動きますが、共有フォルダにアクセスしようとしても認証が通りません。パスワードが格納されているファイルもコピーします。
# cp /usr/private/secrets.tdb /usr/private/smbpasswd /opt/etc/samba

新しいSambaを起動

# /opt/etc/init.d/S08samba

これでごみ箱も使えるようになったはずです。ファイルを削除すると、.recycleフォルダの中に出現するはず。

カスタムMSS2のパッケージ管理システム(optwareとipkg)

カスタムファームウェアを入れたNAS「Maxtor Shared Storage II」(MSS2)では、optwareというパッケージシステムが使えるようになります。

パッケージ管理コマンドipkgの使い方

パッケージ管理には ipkg というコマンドを使います。/opt/bin に入ってますが、パスは通ってないかも。
引数なしで実行すれば使い方が表示されます。とりあえず次の3つを知っておけば何とかなりそう。
# ipkg update
利用可能なパッケージの一覧をサーバーから取得
# ipkg list
利用可能なパッケージの一覧を表示
# ipkg install <パッケージ名>
指定したパッケージをダウンロードしてインストール

ipkg installでは依存するパッケージも自動的にダウンロードしてくれます。
大体Debianのパッケージ管理システムに似てるので、dpkgとかaptに慣れている方はすんなり使えるかと。

ちなみにどれくらいの数のパッケージがあるかと言うと、
# /opt/bin/ipkg list | wc -l
1423

なんと4桁です。ipkg list | grep *** みたいな使い方が現実的。

ディレクトリ構成

optware関係は /opt 以下に入ってるみたいです。なお、
# mount
/dev/sda6 on /share type ext3 (data=writeback)
none on /var/spool/cron type ramfs (rw)
/share/.optware on /opt type ext3 (rw)
/dev/sda2 on /mnt/__mxo_sda2 type ext3 (rw)
というわけで実体は /share すなわち /dev/sda6 に置かれており、システムの入っている sda1/2 とは別のパーティションです。
そのおかげで、たとえばカスタムファームウェアがバージョンアップした場合、イメージファイルを dd of=/dev/sda1 としても、インストールしたoptwareが消えたりせず安心です。

デーモン系はどうなっているかと言うと、

 起動時に /etc/init.d/rcS が実行される
   ↓
 rcS内で /etc/init.d/rc.optware start が実行される
   ↓
 rc.optware内で /opt/etc/rc.optware が実行される
   ↓
 rc.optware内で /opt/etc/init.d/S??* が実行される

という流れなので、optware関係は /opt 内で完結できる仕組みになっているようです。

パッケージをインストールしてみる

次記事で実際にパッケージをインストールしてみます。

[おまけ] ipkg update の実行結果

# /opt/bin/ipkg update
Downloading http://ipkg.nslu2-linux.org/feeds/optware/cs05q3armel/cross/stable/Packages.gz
Inflating http://ipkg.nslu2-linux.org/feeds/optware/cs05q3armel/cross/stable/Packages.gz
Updated list of available packages in /opt/lib/ipkg/lists/armel
Downloading http://ipkg.nslu2-linux.org/feeds/optware/mssii/cross/stable/Packages.gz
Inflating http://ipkg.nslu2-linux.org/feeds/optware/mssii/cross/stable/Packages.gz
Updated list of available packages in /opt/lib/ipkg/lists/mssii
Successfully terminated.

NAS「Maxtor Shared Storage II」のバックアップ機能

「Maxtor Shared Storage II」はHDDが1台しか内蔵されていない、シンプルなNASです。RAIDを組んだりはできませんが、USB端子が搭載されているので、外付USBのHDDにバックアップを取ることができます。

バックアップ手順

Web管理画面のトップページにアイコン付きメニューがあるので、それを選んで進めるだけです。
MSS2:バックアップ

USBで接続するHDDの事前準備

HDDはあらかじめ ext3 でフォーマットしておく必要がありそうです。(ちょっとハードル高めでは…)

MSS2上でUSB接続のHDDをフォーマットすることもできるんですが、Web管理画面からはFAT32フォーマットしかできないようです。FAT32パーティションは、バックアップメニューで「どのパーティションにバックアップする?」と訊かれたとき、そもそも選択肢に出てきてくれません。

カスタムファームでしたら、MSS2にtelnet/ssh接続して /usr/sbin/mkfs.ext3 /dev/sdb? でフォーマットできます。
純正ファームウェアの場合は…Linux等のPCにつないでフォーマットするのが早道かと。Parted MagicみたいなCD/USBメモリから起動できるLinuxでももちろんOK。

HDDは、パーティションが複数切ってあっても大丈夫です。論理パーティションへのバックアップも可能。

バックアップ所要時間

初回はフルバックアップなので、とても時間がかかります。
データ量440GBほどでバックアップを取りましたが、9時間半かかりました。

なお、次回は差分バックアップになるので、毎回そんなに時間がかかるわけではないです。
フルバックアップの翌日に再度バックアップを実行してみたところ、10GB程度が15分で終わりました。

もっとも、バックアップ中もNASとしての利用は可能ですので、所要時間はそんなに気にしなくてもいいかと。

バックアップの裏側

バックアップ中に ps してみたら、/usr/bin/backup/start.sh というスクリプトが動いていました。
中身を見てみたら、バックアップは GNU tar のインクリメンタルバックアップ(-g / --listed-incrementalオプション)で行っているようです。
・月に一度はフルバックアップ
・週に一度はレベル1バックアップ
というなかなかちゃんとした運用計画。せっかくcronで回せるようになっているのですから、バックアップ用HDDは常時接続しておきましょうということでしょうか。でもUSB接続HDDを24時間通電しておくって、どうかなあ……。

このバックアップシステムの難点

インクリメンタルバックアップはGNU tarの仕組みをそのまま使っているので、機能的には安心です。
ただ、バックアップ先HDDの容量という点は不安が残ります。NAS内蔵HDDの倍以上の容量がないと心配ですよね。
だって、フルバックアップをする際、「前回のフルバックアップ」のファイルを消してからじゃないと「今回のバックアップ」に必要な容量が空かないわけで。

「いまあるファイルのバックアップ」が重要で、「過去のファイルを取り戻したい」というニーズがないなら、rsyncでのバックアップを考えたほうがいいかもしれません……。