web-dev-qa-db-ja.com

ネットワーク共有をマウントし、マウントポイントで既存のファイルとマージします

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共有を「マージマウント」する方法はありますか?

1
S May

このようにマウントポイントの内容を直接マージする方法はありません。最も近いオプションは、ユニオン/過度のマウントを使用することですが、これらはネットワーク化されたファイルシステムでは確実に機能せず、この場合にそれを機能させるために必要なことはかなり直感的ではありません。

理想的には、おそらく次のいずれかを行う必要があります。

  1. 共有がマウントされているかどうかを検出するようにプログラムに指示し、共有がマウントされていない場合はファイルをキャッシュして、マウントされているときに書き込みます。
  2. プログラムに別の場所にデータを書き込んでもらい、定期的なタスク(cronjobまたはsystemdタイマーを使用)を使用して、ファイルがマウントされている場合は共有にコピーします。

どちらの場合も、ユニオンマウントよりも堅牢であり、どちらも基盤となるストレージ構成にとらわれません(これは保守性にとって良いことです)。

4

ある方法で物事をマウントすることは可能です(それでもやや面倒です)ので、Linuxは同じディレクトリ内のローカルファイルとリモートファイルを参照します。ただし、Windowsには、Windows側に存在するファイルのみが表示されます。

代わりにファイルを/mount-point/some-dir/に移動するようにプログラムに指示すると、共有がマウントされていない場合は存在しません、後で試すのに十分賢い場合とそうでない場合があります。それが十分に賢い場合、これは最も簡単な回避策かもしれません。

十分に賢くない場合は、ファイルを別のディレクトリに移動し、cronジョブを実行してファイルを共有に移動します。十分に賢くしてください。単純なmvは、ターゲットディレクトリが存在しない場合は中止されます。

0