◆ シンボリックリンク
◆ 並列処理でのファイルの書き込み/削除
◆ 変更監視

Windows でフォルダを共有して Linux で cifs マウントする際の問題点についてです
あくまで私が経験したものです

シンボリックリンク

これは一番ありがちなものです
Linux 側でシンボリックリンクを作ろうするとエラーになります
Windows 側で作ったシンボリックリンクを Linux 側で扱えるので 自分で作るのなら Windows 側で作ることが出来ます

しかし npm などツールが自動で作る場合の問題があります
一応有名どころはシンボリックリンクを作らないオプションがあることが多いです
ですが 作らないのはそれはそれで問題なケースがあります

シンボリックリンクを作るフォルダが一時用フォルダやビルド用フォルダなど完全にツールが自動で扱うもので直接見る必要もないなら そのフォルダだけ Linux のものにしてしまうことができます
方法は Windows 側でマウントポジションより上の階層へのシンボリックを作っておくものや mount の bind オプションなどがあります

npm を使った例です

/etc
/home
/root
/tmp
/89a398b1fe729
/mnt <-- mount point
/node_modules --> ../tmp/89a398b1fe729
/src

/mnt に node.js のプロジェクトをマウントします
/mnt 以下は Windows のフォルダです
/mnt/node_modules の中にはシンボリックリンクが作られる可能性があります

Windows 側で node_modules フォルダを ../tmp/89a398b1fe729 にシンボリックリンクを作っておきます
Linux 側で見ると /tmp/89a398b1fe729 へのリンクとなります
Windows 側でそのパスにフォルダやファイルがある必要はありません
あって全然関係ないものだとややこしいのでむしろないほうがいいかもしれません

mount を使う方法も同じようなもので /mnt に Windows の共有フォルダをマウントするのですが その中の指定したパスに他のパスをマウントできます
ここだと node_modules に /tmp/89a398b1fe729 となります

mount --bind /tmp/89a398b1fe729 /mnt/node_modules

たぶんこれでいけると思います (ためしてません)

ファイルの書き込み削除でエラー

elm で起きたのですが マウントしたフォルダへファイルの書き込みや削除を一瞬で行うと正常に動かないケースがあるようです
io エラーが起きて 壊れたファイルが残ります
毎回ダメということでもなく同じ処理でもうまく動くケースもありました
elm のコンパイルは並列処理を行っているみたいなのでマルチスレッドで同時にアクセスすると問題があるように思います

うまく行くまで連続で繰り返しているとファイルが完全に消せなくなることがありました
Windows 側で unlocker を使ってもダメです
というか Windows 10 になってから unlocker が動いた試しがないです
process explorer でファイルを開いてるプロセスを全部止めても消せない状態で OS の再起動して消せるようになりました

watch が使えない

bundler 等にファイルを監視して変更があれば差分更新してくれる便利機能があります
ものによっては OS の機能をつかって監視してるようで (たしか parcel) では監視時にエラーになりました
ディスク空き容量がないというエラーでしたが 数十 GB の空きがあります
Windows なので inode という問題もありません



という感じで 結構困る部分があります
変に Linux で動かすことにこだわらずに Windows でいいかなと思い始めました