samba経由で別のnfsサーバの公開領域に書き込みができるようにする
2010/02/26
sambaファイルサーバに、別のnfsサーバが公開している領域をマウントさせ、その領域をsamba経由で公開する場合のメモ。
環境
sambaサーバ
- Debian GNU/Linux 4.0/i386
- samba 3.0.24-6etch10
nfsサーバ
- Debian GNU/Linux 5.0/i386
- nfs-kernel-server 1.1.2-6lenny1
samba側サーバのnfs領域公開設定
NFSのマウント設定は別記事の設定を参照。
/etc/samba/smb.conf
[nfs-srv] path = /mnt/nfs/nfs-srv writable = yes create mask = 0660 directory mask = 0770 guest ok = no
この状態で使ってみる
この状態でWindowsクライアントからファイルを書き込もうとすると、以下のエラーが発生します。
クライアントの挙動として、以下のようになります。
- nfs公開ファイルの読み込み: 問題なし
- nfs公開領域へのフォルダ作成: 問題なし
- nfs公開領域へファイル書き込み: エラー発生
対処方法
/etc/samba/smb.confのglobalセクションに以下を追加します。
kernel oplocks = no
kernel oplocks
カーネルoplocks をサポートしているUNIX(現在はIRIXとLinux 2.4カーネルのみ)の場合、 このパラメータにより oplock の利用を制御できる。
カーネル oplocks のサポートにより、 smbd(8) が oplock を行ったファイルに対して、 ローカルな UNIX プロセスや NFS 経由でのアクセスがあった際に、 Sambaが oplocks を破棄することが可能となる。 これにより、 SMB/CIFS と NFS やローカルファイルアクセスとの間の完全な一貫性が確保される (これは非常に素晴らしいことである :-)。
このパラメータのデフォルト値は、 on であるが、 カーネルがこの機能をサポートしていないシステムでは、自動的に無効にされる。 このパラメータを変更する必要はないであろう。
デフォルト:
smb.conf(5)
kernel oplocks = yes
ちなみに、共有セクションにoplocks = noと記述しても問題は解決されませんでした。