ファイルのロックが解除できない場合の対処

提供:Samba-JP
2006年8月21日 (月) 06:38時点におけるRibbon (トーク | 投稿記録)による版 (→‎現象)
ナビゲーションに移動検索に移動
KB番号 J0063
最終更新日 2002/03/16
作成者 たかはしもとのぶ
最終更新者

対象

この文書は、以下のプロダクトに付いて説明したものです。

  • Samba 2.2 系列
  • Samba 2.0 系列

現象

クライアントマシンが、Samba の共有上のファイルに対してロックを掛けた状態で、クライアントとのネットワーク接続が切断されてしまうと、そのファイルに対するロックが掛かったままの状態になってしまいます。 この状態で、クライアントマシンからファイルに対する操作を行なおうすると、ロックの種類に応じて「送り側のファイルが使用中の可能性があります(図1)」といったエラーダイアログが出現して、一部の処理が失敗するようになってしまいます。

対処策

この問題の根本的な原因は、ファイルにロックを掛けたまま、ネットワーク接続が切断してしまうところにあります。利用者がファイルにロックを掛けたまま LANケーブルをぬいたり、コンピュータをサスペンド状態にしたりしてしまうと、簡単にこうした状態が発生してしまうので、利用者に対する教育を行なうなど運用面での対処を行なうことで、こうしたトラブルをある程度回避することが可能です。

予期せぬネットワーク障害などでやむを得ずこのような状態に陥ってしまった場合は、以下のようにしてロックを解除することが可能です。

1. deadtime パラメータを設定する

deadtime パラメータをデフォルト値(0)以外の値に設定することにより、一定時間利用されなかった接続は切断されます。

この時その接続中で行なわれたロックも解除されますので、deadtime を比較的短い値に設定することにより、ロックが掛かったままの状態を回避することが可能です。

deadtime パラメータについての詳細は、smb.conf(5) のマニュアルページを参照してください。

2. SWATの「動作状況(status)」ページを利用する

SWATの「動作状況(status)」ページでは、「接続中クライアント」および「使用中ファイル」といった情報が表示されます(図2)。「使用中ファイル」欄では、現在掛かっているロックの一覧と、ロックを掛けているプロセスIDが表示されています。ここでトラブルが発生しているロックを行なっているプロセスIDを調査の上、「接続中クライアント」の情報で、同じプロセスIDを利用しているエントリを確認の上、「X」ボタンを押すことで、強制的に接続を切断して、ロックを解除することが可能です。

なお、「接続中クライアント」では接続元のクライアントが確認できますので、強制切断を行なう際には、念のため、そのクライアントとのネットワーク接続が切れてしまっていることを確認してから行なった方がよいでしょう。

3. コマンドラインから行なう

smbstatus コマンドでは、前述した「使用中ファイル」や「接続中クライアント」と同等の情報が取得できます。

     %smbstatus
     Samba version 2.0.10-ja-1.2
     Service      uid      gid      pid     machine
     ----------------------------------------------
     monyo        monyo    monyo     7747   w2kpro2  (192.168.10.224) Sat Mar 16 22:11:54 2002
 
     (省略)
 
     Locked files:
     Pid    DenyMode   R/W        Oplock           Name
     --------------------------------------------------
     7747   DENY_WRITE RDONLY     NONE             /home/monyo/promote492.exe   Sat Mar 16 22:15:02 2002
     7747   DENY_WRITE RDONLY     NONE             /home/monyo/promote492.exe   Sat Mar 16 22:15:01 2002
 
     (以下省略)

「Locked files」中のプロセスIDを確認の上、該当するプロセスIDのsmbdプロセスをkillコマンドなどで終了させます。

この技術情報は samba-jp:12441 からの一連のスレッドの議論を元に作成されています。