2
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

samba 経由でファイルを保存するとタイムスタンプが10秒ぐらいずれる

Last updated at Posted at 2019-10-26

CentOS7 において表題のような問題が発生してしまったので、解決方法を共有したいと思います。

解決方法

sambaサーバー側の /etc/samba/smb.conf の [global] セクションに以下を加える

[global]
    oplocks = No

解説

oplocks とは CIFS クライアントにおけるパフォーマンス向上を目的とした仕組みです。詳しい内容については MS の以下の記事を見てみて下さい。

うまく機能すれば有効なのかも知れませんが弊害も多いようです。デフォルトで有効になっているので、オフにする場合は前述の通りに設定します。

経緯とテスト

以下は samba サーバー上に存在する適当なテキストファイルを Windows 10 のメモ帳で開き、Ctrl+S 押下で保存した瞬間を inotify-tools で観察した結果です。

[develop@localhost 1]$ inotifywait -m /home/develop/test.txt |
> while read L;do echo `date`' '$L;done
Setting up watches.
Watches established.
2019年 10月 27日 日曜日 07:28:56 JST /home/develop/test.txt OPEN
2019年 10月 27日 日曜日 07:28:56 JST /home/develop/test.txt ACCESS
2019年 10月 27日 日曜日 07:28:56 JST /home/develop/test.txt ATTRIB
2019年 10月 27日 日曜日 07:28:56 JST /home/develop/test.txt MODIFY
2019年 10月 27日 日曜日 07:29:07 JST /home/develop/test.txt CLOSE_WRITE,CLOSE
2019年 10月 27日 日曜日 07:29:07 JST /home/develop/test.txt ATTRIB
^C
[develop@localhost 1]$

ファイルのオープン (OPEN) と書き込み (MODIFY) は Ctrl+S の押下直後に発生していますが、クローズ (CLOSE_WRITE) は約11秒後になっています。このため保存直後に1度更新され、11秒後にさらに更新されます。「10秒ぐらいいいじゃん」という意見もあると思いますが、webpack の watch モードで2回トランスパイルされてしまったり、タイムスタンプ監視機能のあるエディタで「外部で更新されてます。再読み込みしますか?」等と聞かれてしまったりして何かと不便です。

そこでsmb.conf — Samba の設定ファイル等を読んでみた所、ズバリの情報はありませんでしたが oplocks が怪しいのではないかと当たりをつけました。これをオフにして smb デーモンを再起動後、再び inotigy-tools でログを取りました。以下の通りです。

[develop@localhost 1]$ inotifywait -m /home/develop/test.txt |
> while read L;do echo `date`' '$L;done
Setting up watches.
Watches established.
2019年 10月 27日 日曜日 07:29:32 JST /home/develop/test.txt OPEN
2019年 10月 27日 日曜日 07:29:32 JST /home/develop/test.txt ACCESS
2019年 10月 27日 日曜日 07:29:32 JST /home/develop/test.txt MODIFY
2019年 10月 27日 日曜日 07:29:32 JST /home/develop/test.txt ATTRIB
2019年 10月 27日 日曜日 07:29:32 JST /home/develop/test.txt CLOSE_WRITE,CLOSE
^C
[develop@localhost 1]$

書き込み (MODIFY) の直後にクローズ (CLOSE_WRITE) されるようになり、問題解決となりました。

2
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?