パトリックは多かれ少なかれそれを持っていますが、その理由は次のとおりです。UNIXでファイルをコピーする方法は次のように機能します。
- からいくつかの(さらに)バイトを読み取ろうとします
fileA。
- ファイルの終わりにいる(または過ぎている)ためにバイトを取得できなかった場合、完了です。終了する。
- それ以外の場合は、バイトを書き込み、
fileBステップ1にループバックします。
それを知ること、そしてそれがそれと同じくらい簡単であることを知ることは、私たちにいくつかのコーナーケースを見させます。
ファイルの終わりが見つかるとすぐに、コピーが完了します。したがって、コピー中にファイルが成長しているが、コピーするよりもゆっくりと成長しているとしましょう。コピープログラムは元のファイルサイズを超えて進みます。なぜなら、そこに到達するまでに、ファイルにはさらに多くのファイルがあるからです。しかし、いくつかの点で、それはファイルの末尾に追いつくと、それはもはやバイト読み取ることができないので、それが終わりだ知っている今。そのため、ファイルがさらに大きくなろうとしても、すぐに終了します。
ファイルが切り捨てられた場合、コピープログラムは「うーん、ファイルの終わりを過ぎました!」と言います。終了します。
また、データベースプログラムなどによってファイルの一部がランダムに更新されている場合、データはすべて同時にコピーされるわけではないため、古いデータと新しいデータが混在したものになります。結果はおそらく破損したコピーになるため、ライブデータベースのコピーを作成することは一般に良い考えではありません。
(そうは言っても、私はCouchDBに精通していないので、この種の破損に耐えられるようにデータベースを設計することは可能です。しかし、絶対に確認するのが最善です。)