サイズが拡大し続けるファイルをコピーする方法

サイズが拡大し続けるファイルをコピーする方法

このような状況を想像してみましょう。

while trueファイルには、繰り返し間のスリープモードなしでループ内で連続してテキストが追加されます。

while true
do
echo "foo" >> source.file
done 

ファイルを別の場所にコピーするには、別のプロセスを開始してくださいcprsyncファイルが特定のサイズ(コピープロセスの開始時にソースファイルのサイズと推測)にコピーされ、コピープロセスが終了することを確認しました。

コピープロセスの実行中にファイルサイズが増え続けるので、いつコピーを停止する必要があるかをどうやって知ることができますか?

答え1

この問題は、サイズが27バイト()にすぎないファイルをコピーしたときに発生しますstrace cp a b

read(3, "Who\222s there?\nIt's just me!\n", 131072) = 27
write(4, "Who\222s there?\nIt's just me!\n", 27) = 27
read(3, "", 131072)                     = 0

サイズは既知ですがcp(コピー中は変更されません)、cp最大128Kのデータを読み取ろうとします。 aにread()0バイトが渡されると、コピーは停止します。これはファイルの終わりに達したことを示す信号です。

レプリケーションプロセスがデータを書き込むよりもデータを読み取るのが遅い場合(たとえば、他のI / O優先順位やcgroupsコントローラなどの他のI / O制約のため)、レプリケーションは「永久に」停止します。

関連情報