こんにちは、私は2台のLinuxマシンを持っています。サーバーA(LUbuntu)とサーバーB(Raspbian)。私がやりたいことは、サーバーAがサーバーBの特定のディレクトリ(AにマウントされているNFS)を確認し、ファイルがある場合はサーバーAの場所に転送することです。理想的には、Bに転送されたすべてのファイルは転送後に削除されます。私はAとBを同期させたくありません。また、理想的には重複したファイルを転送したくなく、削除するだけです。
あまりにも多くのスクリプトなしでこれを達成するための最良の方法は何ですか? Aは常にオンラインではないため、ファイル転送を再開することが重要です。
これを行うことができる既存のソフトウェアはありますか?それとも、すべてのスクリプトを自分で書く必要がありますか?
ありがとう
ベストアンサー1
この方式の基本的な欠陥は、ホストBがいつファイルをコピーするのが安全であるかを知ることができないことです。ホストAがNFS共有にファイルを書き込んでいて、ホストBが完全に書き込む前にファイルをインポートする場合はどうなりますか?ホストBはファイルの一部をコピーし(部分)、コピーが成功するとファイルを削除する。みんなホストAが書き込みを完了していないため、コピーされていない部分を含むファイル。
つまり、これはとても簡単なようですrsync
。man
ページ、特に--partial
オプション、おそらく--checksum
オプションをお読みください。特にその部分に関する警告 --remove-source-files
オプション。*.new
ホストAがホストBがコピーするファイルを作成してからファイル名を.new
元に変更した場合など、ファイル名を使用して提案された解決策が有効になることがあります。単一のファイルシステム内で名前を変更するのは通常アトミックな操作であるため、ホストBは忍耐を持ち、すべての* .newファイルを無視する必要があります。名前が変更されると、ホストBはcron
次にジョブが実行されるとそれを送信します。