samba経由で別のnfsサーバの公開領域に書き込みができるようにする

2010/02/26PC::Linux/BSD

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クライアントからファイルを書き込もうとすると、以下のエラーが発生します。

smb_error.jpg

クライアントの挙動として、以下のようになります。

  • 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 であるが、 カーネルがこの機能をサポートしていないシステムでは、自動的に無効にされる。 このパラメータを変更する必要はないであろう。

デフォルト:
kernel oplocks = yes

smb.conf(5)

ちなみに、共有セクションにoplocks = noと記述しても問題は解決されませんでした。