ファイルのコピー中に変更された場合はどうなりますか?

ファイルのコピー中に変更された場合はどうなりますか?

ファイルfileA.big(900mb)をB位置からC位置にコピーするとき、cp操作中にプロセスの35%がfileA.bigに新しい情報が追加され、900MBから930MBに大きくなるとどうなりますか?

最終コピー(例:場所CのfileA.big)の結果は何ですか?

コピーが約70%に達し、元のファイルが更新されましたが、今回は400 MBに切り捨てられた(つまり、コピーの進行状況が切り捨てポイントを超えた場合)、最終コピーの結果はどうなりますか?

ext3/ext4 ファイルシステムの Linux オペレーティングシステムを表します。影魔法などはありません。ちょうど普通の古いcpです。バックアップ用にライブCouchDBファイルをコピーすることは好奇心を引き起こしましたが、特定のユースケースではなく一般的なシナリオに興味がありました。

ベストアンサー1

Patrickの声明はやや正確ですが、その理由は次のとおりです。 UNIXでファイルをコピーする方法は次のとおりです。

  1. でもう少しバイトを読んでくださいfileA
  2. ファイルの終わりに到達(または通過)してバイトを取得できない場合は、操作は終了です。
  3. それ以外の場合はバイトを書き、fileBステップ1に戻ります。

これを知り、それがとても簡単であることを知っているので、いくつかの極端なケースを見てみましょう。

ファイルの終わりを見つけたら、コピーは完了です。コピー中はファイルが大きくなりますが、コピーするよりも遅い速度で増加するとします。コピープログラムは元のファイルサイズを超え続けます。元のファイルサイズに達すると、ファイルにはより多くのコンテンツが含まれるためです。しかし、ある時点でファイルの終わりまで追いつくと、もはやバイトを読み取ることができないため、終わりに達したことがわかります。。そのため、ファイルが大きくなってもすぐに終了します。

ファイルが切り捨てられると、コピープログラムは「うわー、ファイルの終わりを過ぎました!」と言って終了します。

ファイルの一部がデータベースプログラムによってランダムに更新される場合:-) データは同時にコピーされないため、コピーには古いデータと新しいデータが混在しています。その結果、コピーが破損する可能性があるため、ライブデータベースのコピーを作成するのは一般的に良い考えではありません。

(しかし私はCouchDBに慣れておらず、この種の破損に抵抗するようにデータベースを設計することは可能ですが、絶対に確信する方が良いでしょう。)

おすすめ記事