SambaFAQ


目次

サーバ起動
接続
ブラウジングと名前解決
アクセス権
日本語ファイル名
パフォーマンス
その他

一つ前へ


サーバ起動


◆Sambaサーバを起動できない

■Q.Sambaサーバのプロセスを以下のようにデーモンモードで起動させたたのですが、
 #smbd -D
 #nmbd -D
 常駐しないようでpsコマンドのプロセス一覧に表示されません。

■A.Sambaサーバのデーモンプロセスは、起動時/常駐前の問題を端末に表示しない困ったやつです。デフォルトのログファイルの場所がどこかわかるのであれば、そちらを参照すればたいていの原因は自明でしょう。
 よくある原因は以下の3つです。
@Sambaサーバが利用するTCP/IPのポートをinetdが予約済み
 Sambaサーバはinetdからの起動にも対応しています。inetdから起動するような設定が/etc/inetd.confに記述されているなら、SambaのデーモンプロセスがNetBIOS over TCP/IP 用のポートにバインドできないため、起動に失敗します。
 一昔前のLinuxディストリビューションには、Sambaのバイナリパッケージがインストールされていないにもかかわらず、inetdのSambaサーバ用のエントリが有効になっているものがありました。

A自ホスト名の名前解決に失敗して、対応するIPアドレスを得られなかった
 Sambaサーバは、デフォルトで使用するIPアドレスを決定するために、gethostname(2または3)で取得できるホスト名の名前解決を試みますが、これに失敗すると異常終了してしまいます。
 通常、gethostnameで得られる名前はDNS名(FQDN:Fully Qualified Domain Name)ではなく、hostname(1)コマンドで設定/表示されるホストのノード名です。よって、DNSサーバに頼るよりも、/etc/hosts ファイルに自ホストのIPアドレスとノード名のエントリを追加するのがいいでしょう。

B設定ファイルsmb.conf ファイルが存在しない
 Sambaの設定パラメータのほとんどはデフォルト値を持っており、設定ファイルの中身が空でもSambaサーバを起動できます。しかし、設定ファイルのオープンに失敗した場合は異常終了します。


◆パラメータを設定したが機能しない

■Q.smb.conf書き換えて再起動しましたが、期待通りの結果になりません。参考書の通りに設定したのに・・・

■A.あなたが書き換えた設定ファイルはSambaが参照する場所に置いてありますか?ソースからコンパイルしたなら /usr/local/samba/lib/smb.conf, Linuxディストリビューションのバイナリパッケージなら /etc/smb.conf か /etc/samba/smb.conf あたりになるでしょう。
 あるいは、指定したパラメータ名のスペルが間違っていないか、無効な値を指定していないか見直してください。記述に絶対の自信があっても、マニュアルに目を通し、Sambaの testparm(1) コマンドを実行してください。Sambaのバージョンアップに伴って、パラメータが廃止されたり、デフォルト値が変更されることがあります。コンパイル時オプションによっては機能しないパラメータもあります。



接続

◆まったくアクセスできない

■Q.Sambaを入れたマシンが[ネットワークコンピュータ]で見えないし、[スタート]メニューの[検索]→[ほかのコンピュータ]で検索したり、net use コマンドで直接サーバ名を指定しても接続はできません。Sambaサーバのデーモンプロセスは稼働していて、Sambaホストからsmbclient を使っての接続はできます。

■A.見ることもアクセスもできない原因としては、後述するブラウジングと名前解決の両方の問題ということも考えられますが、それ以前に、SMBより下位レベルのプロトコルのパケットが正しく送受信できていないことも考えられます。
 SambaはTCP/IP上のSMBプロトコルに対応したサーバソフトウェアです。クライアントとSambaサーバを動作させているホスト間でTCP/IP通信ができなければ、Sambaを利用することはできません。
 pingコマンドやtracerooute(UNIX)/tracert(Windows)コマンドでパケットが届くかどうかを見たり、FTPやtelnetなどのTCP/IP対応アプリケーションを使ってサーバにアクセスできるかどうかをチェックしましょう。

 

◆正しいパスワードが間違っていると言われる

■Q.Sambaに接続するとパスワード入力を求められました。telnetやFTPでも使っているユーザ名とパスワードを入力したのですが、パスワードが間違っていると言われてしまいます。

■A.Sambaを平文パスワード認証モードで動かしている(smb.confの設定で "encrypt passwords = no" ) なら、おそらくそれが原因です。
Windows95にいくつかのアップデートを加えたバージョン以降、Windows98、そしてWindowsNT4.0 ServicePack3 以降のWindowsは、暗号化パスワード認証に対応していないサーバへの接続を拒否するように設定されています。よりセキュリティを強化したのはよいことですが、拒否したことを明示せずに「パスワードが間違っている」と的外れなエラーメッセージを表示する困った仕様(?)になっています。
 "encrypt password = yes" であるなら、smbpasswdファイル内のフラグでユーザが無効になっているのかもしれません。smbpasswdコマンドの -e オプションで有効にしてみてください。または、smbpasswdファイルが壊れていたり、smbpasswdファイルのパラメータ値と実際のsmbpasswdファイルの置き場所が異なっている可能性があります。




ブラウジングと名前解決

 ブラウジングと名前解決は、Windowsネットワークの鬼門です。名前解決だけを見れば、DNSよりも単純でトラブルを抱えることもすくないようです。しかし、ブラウジングの動作によって混乱してしまうユーザが後を絶ちません。
 ここでは、ブラウジングと名前解決の動作を明らかにし、トラブルに役立ててもらおうと思います。

◆ブラウジングはマスターブラウザが支える

 Windowsの「ネットワークコンピュータ」アイコンは、ネットワーク上のリソースをすばやく見つけ、手軽にアクセスする手段を提供する便利な機能です。この機能に一役買っているのが「マスターブラウザ」です。
 マスターブラウザは、ネットワーク上のホスト名(NetBIOS名) とワークグループ名を収集/維持し、クライアントに提供するためのサーバです(この名前のリストを「ブラウザリスト」と呼びます)。WindowsだけでSambaを利用したことがない方は、このサーバの存在を意識したことはないかもしれません。
 まづは、ブラウジングとマスターブラウザに関する基本的な動作を知ってください。

ワークグループごと、サブネットワークごとに1台存在する
 各マスターブラウザは、サブネットワーク内のホスト名とワークグループ名を収集します。別のワークグループのホスト名、別のサブネットワーク内の名前は収集しません。

Windowsネットワークのホストはマスターブラウザの機能を持っている
 マスターブラウザの機能はNTServerだけでなくWindows9Xにもあります。Sambaにもあります。

マスターブラウザとなるホストは自動的に決定される
 サブネットワーク内の同一ワークグループのホスト間で強調し、一定のルールでマスターブラウザが選定されます。
 優先度はホストで稼働するOSの種類(たとえばWindows9XよりNTServerのほうが高い)や役割(PDC,BDC,WINSサーバの順に高い)などによって決まります。Sambaでは、os level パラメータや preferred master パラメータで調整することができます。

マスターブラウザはホスト名とワークグループだけを保持する
 収集したホストが持つIPアドレスや共有名などの情報は保持しません。このため、ある条件では「ブラウズリストに表示されるがアクセスできない」という現象が見られることがあります。

ドメイン名とワークグループ名の区別はない
 同じ名前を持つドメインとワークグループを設置してみるとわかりますが、そのグループ名のブラウズリストには、ドメインに属するホストとワークグループに属するホストのNetBIOS名が何の区別もなく保持されます。[ネットワークコンピュータ]→[ネットワーク全体]のワークグループ名一覧でも区別されません。
 以下、「ワークグループ名」は同名のドメイン名も指すことにします。

 

◆ドメインマスターブラウザ

 各サブネットのマスターブラウザが保持する情報を統合し、ネットワーク全体の名前一覧を管理する「ドメインマスターブラウザ」(以下DMB) と呼ばれるサーバが存在します。このサーバは、各ワークグループに唯一存在します。
 これに対し、各サブネットワーク内のマスターブラウザを「ローカルマスターブラウザ」(以下LMB) と呼びます。ここで、[ネットワークコンピュータ]アイコンなどからブラウズリストを取得するホストを「ブラウズクライアント」と称することにします。
 LMBは、自分が収集した名前一覧を定期的にDMBに提供します。DMBは各LMBから得た情報を統合し、ネットワーク全体のブラウズリストをLMBに提供します。この結果、各サブネットのブラウズクライアントは、LMBからネットワーク全体のブラウズリストを入手できるようになります。
 さて、DMB/LMBの存在を知っていただいたところで、もう少しブラウジングに関する知識を広めましょう。

[ネットワークコンピュータ]の機能は同じサブネットのLMBからブラウズリストを得る
 ブラウズクライアントは、ほかのサブネットにあるLMBにはアクセスしません。このため、ブラウズリストからワークグループ名を選択したときにそのワークグループのLMBが同じサブネットに存在しない場合、ブラウズリストの取得に失敗します。
 また、ブラウズクライアントはDMBにもアクセスしません。このため、LMBがDMBと通信できない状態では、そのLMBと同一のサブネットワーク/ワークグループのホストは、ほかのサブネットワークにあるホスト/ワークグループの名前は見えません。

PDC=DMB(Sambaは例外)
 Windowsでは、PDC(プライマリドメインコントローラ)に設定したNTServerがDMBとして動作します。NTServerは、PDCとDMBを切り離すことはできません。このため、Windowsだけでネットワーク全体のブラウズリストを維持するには、必ずPDCを用意しなければなりません。
 一方、SambaはPDCとDMBの機能を別々のホストで提供することができます。ワークグループ構成でネットワーク全体のブラウズリストを維持するには、SambaをDMBに設定します。

DMB=そのサブネットのLMB
 DMBは、そのホストがあるサブネットワークのLMBでもあります。SambaはDMBとLMBを別々のホストで提供することができますが、そのような設定をしてはいけません。

DMBは固定のホストがなる
 LMBと違い、DMBは自動的に選定されません。PDCと同じくワークグループ名ごとに1台だけ設置することができます。


◆名前解決の手段

 Windowsネットワークのサービスは「NetBIOS名」と呼ばれる識別子を使用してアクセスすることができますが、その名前を持つホストの居場所を知るためには「名前解決」を行う必要があります。NetBIOS over TCP/IP では、ホストの居場所はIPアドレスです。
 NetBIOS名からIPアドレスを得る(名前解決)には4種類の方法が利用できます。

ローカルのLMHOSTSファイルを参照する
 hostsファイルに似たフォーマットのLMHOSTSファイルにNetBIOS名とIPアドレスの対応表を記述することで名前解決に利用できます。

ブロードキャストで問い合せする
 問い合せパケットをローカルのサブネットにブロードキャストし、そのNetBIOS名を持つホストからの応答を待ちます。ルータを越えた先にあるホストの名前解決はできません。

WINSサーバに問い合せる
 WINSクライアントは、NetBIOSサービスの起動時に、NetBIOS名とIPアドレスをWINSサーバに登録します。また、ほかのホストも登録されていることを想定し、そのNetBIOS名を名前解決するときにWINSサーバに問い合せます。

DNSサーバに問い合せる
 NetBIOS名をDNS名として扱い、DNSサーバに問い合わせます。その際Windowsは、DNS設定の[ドメイン]名と[ドメインサフィックスの検索順]で指定したドメイン名を追加します。


◆NetBIOS名の名前種別
 NetBIOS名は、いわゆる「半角」で15文字(15バイト) の長さまで設定できますが、Windowsネットワークのプロトコル上では「名前種別(nametype) 」を示す1バイトを加えた16文字(16バイト) で構成されます。NetBIOSの名前種別はTCP/IPプロトコルでいうポート番号に相当するもので、そのNetBIOS名上で提供される各種のサービスを識別します。

あるホストが持つNetBIOS名の一覧を表示

 $ nmblookup -S gyoukai16
  querying gyoukai14 on 10.41.153.255
  10.41.153.64 gyoukai14<00>
  Looking up status of 10.41.153.64
  received 5 names
    GYOUKAI14   <00> −            B <ACTIVE>
    GYOUKAI14   <03> −            B <ACTIVE>
    GYOUKAI14   <20> −            B <ACTIVE>
    KIKAKU      <00> − <GROUP>    B <ACTIVE>
    KIKAKU      <1e> − <GROUP>    B <ACTIVE>
  num_good_sends=0 num_good_receives=0


 上記のようにSambaのnmblookupコマンドを使えば、指定したホストが持つNetBIOS名の一覧を得ることができます。これはWindowsのnbtstat -a NETBIOSNAME コマンドとほぼ等価です。
 「GYOUKAI14」や「KIKAKU」の後の「<」と「>」で括られた16進数がNetBIOSの名前種別です。<GROUP>は、複数のホストで共有されるNetBIOSグループ名を示しています。それ以外はネットワーク上で一意(unique)な名前で、このホストだけが持っている名前です。

GYOUKAI14<00>(一意名)
 これがWindowsでいう「コンピュータ名」です。以下に示すとおり、実はワークグループ名などもNetBIOS名の一種ですが、普段よく使われる「NetBIOS名」とは、この名前のことを指します。

GYOUKAI14<03>(一意名)
 Windows9x付属のアプリケーションwinpopup.exe、WindowsNTのMessengerサービスで送信される「WinPopup メッセージ」を受信するための名前です。Windowsマシン上では、ユーザがログインすると、「USERNAME<03>」というNetBIOS名も登録されます。

GYOUKAI14<20>(一意名)
 共有サービスを提供しているサーバを示す名前です。

KIKAKU<00>(グループ名)
 このホストが属しているワークグループ名です。

KIKAKU<1e>(グループ名)
 このワークグループのLMBを選定する際に呼ばれるNetBIOS名です。LMBになる機能を持つすべてのホストはこの名前を保持しています。
 この例で示されたNetBIOS名前種別は、定義されている種別のほんの一部です。詳細はWeb(NetBIOS Suffixes(16th Caracter of the NetBIOS Name)URL=http://support.microsoft.com/support/kb/articles/Q163/4/09.asp)や書籍(Microsoft WindowsNT Server 4.0 リソースキット)を参照してください。


◆ブラウジングと名前解決の関係

 ブラウジングと名前解決には密接な関係があります。NetBIOS名の名前種別には、ブラウザに関する機能を示すものがあり、LMBとDMB、ブラウズクライアントとLMBはその名前を利用してアクセスし、各種ブラウザサービスを実行しています。つまり、これらのNetBIOS名(+名前種別) を解決できる状態でなければ、ブラウジングはうまく機能しないことになります。

GROUPNAME<1d>(一意名)
 LMBが持つNetBIOS名です。[ネットワークコンピュータ]で表示されるホスト名とワークグループ名(ドメイン名)の一覧は、この名前を持つホスト(LMB)から取得されます。
 複数のサブネットで見ればグループで共有されている名前ですが、1つのサブネット内で1意な名前となります。

GROUPNAME<1b>(一意名)
 DMBが持つNetBIOS名です。LMBはこの名前を持つホスト(DMB)とブラウズリストの交換を行います。
 前述のとおり、ブラウズクライアントは同じサブネットのLMBだけを頼りにするため、名前解決の問題は起こりません。Windowsは通常、ローカルサブネットへのブロードキャストによる名前解決を行うためです。
 しかし、DMBは別のサブネットにあるため、ローカルサブネットのブロードキャストパケットは届きません。WINSサーバを導入し、LMBがDMBを見つけられるようにしなくてはなりません(LMHOSTSファイルかDNSサーバを利用することもできますがお勧めできません)。

◆ブラウザリストに表示されない

■Q.あるワークグループのブラウズリストに別のサブネットワークのホストが表示されません。

■A.LMB単独では、接続されているサブネットワークのブラウズリストしか収集しません。別途、WindowsNT ServerのPDC(兼DMB)かSambaによるDMBを導入してください。
 また、LMBがDMBにアクセスするには、DMBを指すNetBIOS名「GROUPNAME<1b>」からIPアドレスを解決できなくてはなりません。別サブネットにあるDMBの名前解決ができるように、WINSサーバを導入し、全ホストがこれを利用するように設定してください。
 下のリストがSambaサーバをワークグループ「KIKAKU」用のDMBとするための設定です。

SambaをDMBにするためのsmb.confの記述(DMBとWINS以外の記述は省略)

 [global]
  workgroup = KIKAKU
  os level = 255
  domain master = yes
  local master = yes
  preferred master = yes
  wins server = 10.41.153.3


このSambaをWINSサーバにもするなら wins serverパラメータのかわりに "wins support = yes" を記述してください。
 DMBを設置する場合は、すでにNT Server PDCあるいはSamba DMBが存在していないか充分にご注意ください。


◆ホスト名は見えるのにアクセスできない

■Q.ブラウズリストに目的のホストが表示されるのですが、共有を表示しようとすると「ネットワーク名が見つかりません」とエラーになります。

■A.まずはホストが正常に稼働中かどうかを確認してください。ブラウズリストに保持されるホスト名は、LMBへの名前通知が途絶えてからしばらくしないと消去されません。
 そのホストが別のサブネット上にある場合、名前解決の問題である可能性が高いです。前述のとおり、ブラウズリストにはNetBIOS名しか保持されず、その名前を持つホストにアクセスするには別途NetBIOS名に対応するIPアドレスを取得(名前解決)する必要があります。お使いのクライアントとアクセス先のホストがWINSサーバを利用するように設定されていることを確認してください。

◆ワークグループ名は見えるのにホスト名一覧を表示できない

■Q.[ネットワークコンピュータ]から[ネットワーク全体]を選択し、別のワークグループのホスト一覧を表示しようとしましたが、ホストが1台も表示されません。

■A.前述のように、[ネットワークコンピュータ]で表示されるブラウズリストは、ローカルサブネットにある対象のワークグループに属するLMBから取得します。よって、そのワークグループのLMBが同じサブネットに存在しなければ、ホスト一覧はブラウズできません。


◆ブラウジングが不安定

■Q.一部のホスト、あるいは自ホストしかブラウズリストに表示されません。

■A.ブラウジングとは直接関係ない部分の問題でも、ブラウジングの動作に影響することがあります。具体的には以下のようなケースがあります。

DNSサーバにアクセスできない
 ある例として、LMB候補として優先順位の高いSambaを稼働させているホストで、DNSクライアントとしての設定を間違えたときに、1つのサブネットワークにLMBが2台出現するという異常な状態が起こったことがあります。
 LMBの選定は、あるタイミングをもって選定パケットを交換することで行われるプロトコルです。LMB選定中にSambaがDNSのタイムアウト待ちで停止している間に、WindowsNTが選定に勝利したと勘違いし、その後タイムアウトして処理を続行したSambaもLMBとして動作してしまったようです。
 

ゲストアカウントが無効
 DMBとLMB間、LMBとブラウズクライアント間のアクセスは、ゲストアカウントの権限で行われます。
 smb.confの[global]セクションで、guest account パラメータで指定されているユーザが存在しなかったり、invalid users パラメータでゲストアカウントによるアクセスが禁止されていると、ブラウジングの機能が動作しません。
 

WindowsNTにTCP/IPのほか、NetBEUI、IPX/SPXがインストールされている
 SambaはNetBIOS over TCP/IPにのみ対応していますが、WindowsはNetBEUI、IPX/SPX上のNetBIOSインタフェースにも対応し、それらを同時に利用することができます。しかしこの場合、ブラウジングや名前解決に異様に時間がかかったり、ときには正常にブラウジングできないなどの障害が発生することがあるようです。
 必要のないプロトコルは削除しておいたほうがよいでしょう。
 

LMBの選定中もしくは選定直後にブラウジングを行った
 LMBの選定中は、そのワークグループのブラウズリストは完全ではありません。
 LMBの選定が頻発しないように、優先度の高いホストは起動とシャットダウンを控えめにすることも大事です。Sambaには、起動時にLMB選定を強制実行させる preferred master パラメータがありますが、意味もなくこのパラメータに "yes" を設定しないで下さい。
 



アクセス権

◆書込み許可したのに書込みができない

■Q."write ok = yes" や "read only = no" を設定したのですが、共有に書き込めません。

■A.Sambaによる読み書きアクセス権の設定は、SMBによるアクセスにのみ適用されます。実際のファイルへのアクセスは、認証されたユーザの権限で実行されるため、ファイルが持つアクセス権によって制限されます。
 つまり、直接アクセスした場合に許されない操作は、当然SMBを介した場合にも許されません。この制限はSambaに限らず、Windowsでも同様です。

 

◆他人が作成したファイルに書込めない

■Q.ほかの人が作成したファイル/ディレクトリに書き込めません。自分のファイルへの書込みや新規作成はできます。

■A.Sambaのデフォルトの設定では、新規作成されたファイル/ディレクトリには、作成者以外のユーザへの書込み権は付与されません。create mask、directory mask パラメータを調節してみてください。下に共有の定義例を示します。

グループで利用するディレクトリ共有の定義例

 [web]
  path = /project/web
  valid users = +webadmin +webguest
  read only = no
  read list = +webguest
  create mask = <0664BR>   directory mask = 0775


この例は、webadminグループに属するユーザには読み書きを、webguestグループに属するユーザには読みだしのみを許可しています。マスクの設定によって、作成されるファイルにはグループの書込み権も付与されます。
 しかし、これだけでは不十分なことがあります。通常、新規作成されるファイルの所有グループは、作成者が所属するプライマリーグループのものになります。このため、webadminグループに属していてもプライマリグループでないユーザが作成したファイルは、webadmin以外の所有グループで作成されてしまいます。
 あるディレクトリ以下で作成されるファイルに一定の所有グループ名を割り当てるには、ディレクトリのアクセス権にsetgidビットを設定するといいでしょう(下参照)。

グループで利用するディレクトリの作成例

 #mkdir /project/web
 #chgrp webadmin /project/web
 #chmod 2775 /project/web
 #ls -ld /project/web
  drwxrwsr-x 2 root webadmin  1024 Aug 18 00:07 /project/web


こうすると、作成されるファイルには親ディレクトリの所有グループが引き継がれるようになります。また、Sambaのforcegroupパラメータを利用して、強制的にプライマリグループを設定することもできます。


◆書込み権があるファイルを削除できない

■Q.書込みのアクセス権があるファイルを削除できません。

■A.Windows(DOS)とUNIXの基本動作の違いです。Windowsは書き込み権があるファイルは削除することができます。UNIXはファイル自身のアクセス権は関係なく、そのファイルが置かれているディレクトリに書き込み権があると削除することができます。リネームも同様です。


日本語ファイル名

◆日本語ファイルのアクセス問題

■Q.日本語を含む名前のファイルを作成すると文字化けします。ファイルにアクセスしようとすると失敗することもあります。

■A.smb.confの[global]セクションの先頭に "client code page = 932" を追加し、Sambaサーバを再起動してください。
 Windowsは「コードページ」と呼ばれる種別で文字コードの扱いを切り分けており、SMBサーバにアクセスするときも、これに則した文字コードで送受信します(UNICODEを使うSMBコマンドはこの限りではありません)。コードページ932は、日本語のシフトJISコード体系を意味します。

 

◆UNIXからみた日本語ファイル名

■Q.Windowsで作成した日本語ファイル名をUNIXから見ると、正常に表示されません。

■A.SambaがUNIXのファイルシステムに保存する日本語ファイル名は、coding system パラメータで指定されたコード体系になります。"client code page = 932" であれば、デフォルトはシフトJISです。最近のいわゆる「フリーUNIX」と呼ばれる類のOSなら、対応している日本語コードは日本語EUCなので、coding system パラメータを euc に設定してみてください(ただし、最新のSamba日本語版でないとシフトJIS特有の文字で問題が起こります)。
 coding system をOSに合った設定にしても依然として日本語ファイル名を表示できない場合は、UNIX側のソフトを疑ってください。表示に利用したUNIX端末、アプリケーションはその日本語コードに対応していますか?たとえば、GNU fileutils のls コマンドは、コードの8ビット目が立っている文字を「?」に置き換えて表示しようとします。これを抑制するには --show-control-chars オプションを指定するか、ls の出力をパイプで cat コマンドに渡してみてください。
 coding system に cap あるいは hex を設定してあるときは、日本語を含むファイル名は符号化されて保持されるため、UNIXからは暗号分のように見えるでしょう。フィルタスクリプトを用意するなどして対処してください。
 

パフォーマンス

◆Sambaのパフォーマンスが低い

 同じサーバ/クライアント間で、FTPやHTTPを使ったファイル転送のパフォーマンスも測定してください。より単純なプロトコルの FTP / HTTP のほうが高いパフォーマンスを示すはずですが、2倍も差が開かないようでは Samba 固有の問題ではありません。
 よく見聞きされる原因は以下のとおりです。

ネットワーク経路上のどこかにボトルネックがある
ネットワークカードのドライバが腐っている(バグなど)
ケーブル、HUBなどのネットワーク機器が壊れている
共有HUBに接続しているネットワークカードを全二重通信モードに設定している
サーバあるいはクライアントの処理性能の問題(CPU,HDD,メモリなど  

◆Sambaのチューニング

 一番メジャーで手軽なチューニングは、socket options パラメータに TCP_NODELAY(Samba2.0.4以降ではデフォルト値)を指定する方法です。このオプションによりパケットの送信遅延が可能な限り少なくなり、大幅なパフォーマンスの改善が見込めます。
 もう1つの効果的なオプションは、SO_SNDBUF,SO_RCVBUF ソケットオプションでパケット送受信用のバッファを大きくする方法です(下参照)。

socket options によるチューニングの例

 [global]
  socket options = TCP_NODERAY SO_SNDBUF = 8192 SO_RCVBUF = 8192


いくつかの報告によると、速度向上はだいたい8000バイトほどで飽和するようです。Windowsでよりよいパフォーマンスを叩き出すための方法が奥山健一氏のHPで公開されています。
 これを読んで、SO_SNDBUFのサイズを調整してみてください。

その他

◆UNIXとWindows間でファイルの更新が同期しない

■Q.Samba共有上のファイルにWindowsから変更を加えても、UNIXからみると変更内容がすぐに反映されないようです。Windowsクライアント間では問題ありません(あるいは逆に、UNIXからの変更内容がWindowsから見えない)

■A.SMBではファイルを oplock(opportunistic lock,便宜的ロック)することで、そのファイルを独占的にアクセスすることができます。ファイルへのoplock権を得たクライアントは、そのファイルをアクセスしているのは自分だけであると判断し、ファイルのデータをクライアント上で積極的にキャッシュします。
 oplockされているファイルを別のSMBクライアントがアクセスしようとすると、SMBサーバはいったんそのアクセス権を待たせ、oplockを行っているクライアントにロックを解除するように要求します。oplock解除要求を受け取ったクライアントはキャッシュをフラッシュして解除したことを応答すると、サーバは待たせていたアクセスを続行します。
 Windowsは、ローカルのファイルをアクセスするときもoplockの状態を見ており、必要であればリモートのクライアントにoplock解除要求を送ることで、ファイルの整合性を保ことができます。一方UNIXにはoplockに相当する機能がないため、Sambaは自身とSMBクライアント間の閉じた世界でoplockを実装しています。このためUNIX上のほかのソフトウェアは、oplockの状態にまったく関係なくファイルを読み書きしてしまいます。
 よって、Samba共有上のファイルをUNIXからもアクセスするような場合は、その共有を定義している smb.conf の共有セクションで "oplocks = no" を指定し、oplockが機能しないようにする必要があります。

 

◆印刷のトラブル

■Q.印刷できません

■A.まずはUNIXから印刷できることを確認してください。UNIX上でプリンタに合った印刷フィルタを用意するのが面倒であれば、Windows上で印刷を実行するときに「ファイルに出力」を選択し、そのファイルをUNIXの印刷コマンドに渡してテストしてください。
 次に、プリンタ共有の path パラメータで指定したディレクトリユーザが書き込めること、printing パラメータの値がお使いの印刷システムと一致していること、print name パラメータの値が印刷システムで有効にプリンタ名になっていることを確認してください。
 参考までに言いますと、クライアント上のプリンタドライバを更新したら印刷できるようになったという例もあります。

一つ前へ