Raspberry Pi 3(Rasbian Jesse)で実行されているプログラムがあり、/mount-point
というディレクトリにファイルをドロップします。起動時に、/incoming
というWindows共有を/mount-point
にマウントしています。これらのファイルが共有にドロップされるときにこれらのファイルを処理しているWindowsプログラムがあります。
mount -t cifs -o username=<share user>,password=<share password> //<Win-IP>/c/incoming /home/pi/mount-point
ネットワークがダウンした場合に問題が発生します。ネットワークがダウンしている場合、Linuxプログラムは引き続きファイルを/mount-point
ディレクトリにドロップします。ネットワークが復旧すると、Windows共有が再マウントされ、現在/mount-point
にあるファイルがマウントされて消えます。
現在/mount-point
にあるファイルが非表示にならず、Windowsの/incoming
に表示されるように、Windows共有を「マージマウント」する方法はありますか?
このようにマウントポイントの内容を直接マージする方法はありません。最も近いオプションは、ユニオン/過度のマウントを使用することですが、これらはネットワーク化されたファイルシステムでは確実に機能せず、この場合にそれを機能させるために必要なことはかなり直感的ではありません。
理想的には、おそらく次のいずれかを行う必要があります。
どちらの場合も、ユニオンマウントよりも堅牢であり、どちらも基盤となるストレージ構成にとらわれません(これは保守性にとって良いことです)。
ある方法で物事をマウントすることは可能です(それでもやや面倒です)ので、Linuxは同じディレクトリ内のローカルファイルとリモートファイルを参照します。ただし、Windowsには、Windows側に存在するファイルのみが表示されます。
代わりにファイルを/mount-point/some-dir/
に移動するようにプログラムに指示すると、共有がマウントされていない場合は存在しません、後で試すのに十分賢い場合とそうでない場合があります。それが十分に賢い場合、これは最も簡単な回避策かもしれません。
十分に賢くない場合は、ファイルを別のディレクトリに移動し、cronジョブを実行してファイルを共有に移動します。十分に賢くしてください。単純なmv
は、ターゲットディレクトリが存在しない場合は中止されます。