tweeeetyのぶろぐ的めも

アウトプットが少なかったダメな自分をアウトプット<br>\(^o^)/

macからnfsマウントしてlinux(centos)のファイルをsublime textで保存/編集したときに困ったことメモ③ - 保存するたびに'Has changed on disk. Do you want to reload it?'と言われる

はじめに

macからlinuxnfsマウントしてsublime textでファイルを編集する際に困ったことがあったのでメモ。

困った内容

以前macからlinuxnfsマウントをする記事を書いた。
Mac OS XでCentOSに入れたsamba経由でのアクセスが遅いのでNFSにしてみるメモ(exports, mount_nfs, diskutil unmount)

上記の記事でやりたいことはこれ

  • macnfsクライアント(マウントする側)
  • linuxnfsサーバー(exportsする側/マウントされる側)
  • mac側とlinux側のユーザ、グループは一致していない
  • macではエディタとしてsublime textを使ってlinux(nfs)のファイルを保存/編集
困ったこと

保存時に毎回
Has changed on disk. Do you want to reload it?
とダイアログが出る

キャプチャ的にはこんな感じ
  • 毎回reloadしろと言われてしまう

f:id:tweeeety:20141224231744p:plain

対応前の設定

詳細は前回記事リンクを見てもらうとして、今回に関係ありそうな設定のみにフォーカス

linux

/etc/exportsの設定

# /etc/exports
/mnt/hoge 172.23.83.0/24(rw,insecure,no_root_squash,sync)
mac

mac側でマウントするときのコマンド(とオプションとか)

# sudo mount_nfs -P 10.33.87.216:/mnt/hoge /Volumes/nfs01

対応

こちらに関しては前回の①、②よりさらに何が効いたかの確信が薄かったのですが、
exportsファイル内のsyncに関する設定をしてみたら出なくなりました。

→下に書きましたがどうやらsublimeプラグインの問題がビンゴっぽいです

※ ②の記事と合わせてsyncの設定を変更
# sudo vi /etc/exports
---- vi編集 ----
/mnt/hoge 172.23.83.0/24(rw,insecure,all_squash,anonuid=1105,anongid=1105,async)
----------------

syncに関して参考

http://linuxjm.sourceforge.jp/html/nfs-utils/man5/exports.5.html

なぜsyncを変えようと思ったか

sublime textでとあるファイルAを開いてるとき、
他の誰かがファイルAを編集したり、今回の場合であればlinuxサーバにsshで入って直接ファイルAを編集しても同様のreloadが起こる。

nfsでの保存が遅いためにsublime textでの保存タイミングと
nfs先のlinuxでの保存リクエスト受付のタイミングが異なったりしてる?とかいろいろ考え
上記参考サイトのこの一文のあたりが怪しいと思った

このオプションは NFS サーバを NFS プロトコルに違反させ、 あるリクエストによってなされた変更が安定した保存場所 (例えばディスクドライブ) に渡される前に、 そのリクエストに応えるようにする。

対応追記

上記のsyncについても変えたものの、どうやらsublime textの設定が怪しい。

疑ったところ①

sublime textの基本設定 > 基本設定 - ユーザでこのあたりのtrue/falseを変えて何度か試してみた

  "ignoreChanged": true,

どこでこの設定いれたか忘れたけど、、もしかしたらこんな設定ない?、、、かも汗

疑ったところ②

今回、nfs先のlinuxで扱っているファイルエンコードutf-8以外である。
shift-jisやeuc-jpを扱うために、プラグインConvertToUTF8Codecs33を入れている。
どうやらこいつが怪しい。結構本命。

プラグインではおおよそこんな処理を行っているらしい。

shift-jisのファイルを選択(開く)

開く時にutf-8に変換

なんか修正

ファイルを保存

shift-jisにconvertして保存

sublime textでふつうに保存したあと、 sublime textがnkf的に保存したファイルに対してconvertしてる?とすると
確かに他のBさんが変更/保存した的な感じになっちゃいますね。

思い切ってプラグインを削除

思い切ってプラグインを削除してエンコード変換を行わなくしたら
こちらのダイアログが出なくなりました。
やっぱりこいつなんですかねぇ。。。 でもそれはそれで毎回nkfとかで編集したファイルをエンコード変換ってめんどくさい。。。

が、このreloadが出なくなるって問題が解決すればこの記事の本題はクリアなので
エンコード問題はまた別で。。

関連の記事

まとめ

syncとasyncを変えて

  • linux側のnfs再起動
  • mac側でマウントしなおし
  • sublime textで設定の変更&プロジェクトの読み直し

等々を繰り返してるうちに起こらなくなってしまったので
本当に対応はコレか?という感じはあるのですが
sync周りの設定をいじってるときに直ったので何かの手がかりになればとメモりました (><)

SJISEUC-JPの文字化けが気にならないで修正できる場合は
思い切ってプラグインCodecs33ConvertToUTF8を消しちゃうのはありかもです。
インストールも1分とかでしなおせますしね。