私は大容量(〜200 GB)の出力ファイルを生成するアプリケーションを実行しており、実行には約35時間かかります(現在は約12時間かかります)。アプリケーションはファイルを一度開いた後、書き込まれるまでファイルを開いたままにします。さらに、アプリケーションはファイルへの多くのランダムアクセス書き込み(つまり、順次書き込みではありません)を実行します。
現在、ファイルはローカルハードドライブに保存されていますが、完了したら別のデバイス(ネットワークドライブ、SMB経由でマウントされたNTFS)に移動することにしました。
時間を節約し、後でファイルを移動したくない場合は、プログラムを中断し、現在部分的に完了したファイルを別のデバイスに移動し、いくつかのトリックを実行してからプログラムを再起動して、新しい場所を使用する方法はありますか?
答えは「いいえ」と確信しています。でも、聞いてみたいと思いました。時には素晴らしいトリックがあります...
答え1
tail
ファイルはランダムに作成されるため、他のソリューションを公開すると心が痛くなります。増分転送アルゴリズムを使用して機能し、ファイルの変更された部分のみを転送して転送時間を節約できるため、ここでのアイデアはrsync
有望です。 2つのローカルファイルで実行するrsync
と、rsync
デフォルトではモードになりますが、--whole-file
これは望むものではありません。
提案
rsync -av --inplace --no-whole-file /your/local/file.dat /your/remote/file.dat
...または(CIFSインストールが増分転送に同意しない場合)、pureを使用してくださいrsync
。
rsync -av --inplace --no-whole-file /your/local/file.dat remoteserver:/your/directory/file.dat
したがって、200 GB ファイルがいっぱいになったら、このコマンドを複数回実行する必要があります。実行するたびに、リモートファイルは徐々に更新されます。これは、ソースファイルがランダムに更新された場合にも機能します。たぶん15分ごとに実行できます。その後、pidが完了すると再実行され、これは急速な増分増加になります。
答え2
ネットワークドライブがマウント(NFSなど)されていると仮定すると、
tail -f -c1000000000000 /your/local/file.dat > /mnt/nfs/drive/file.dat
これにより、出力ファイルがネットワークドライブにコピーされ始め、同期が維持されます。プログラムが完了すると、ローカルファイルとネットワークファイルシステムに同じ200 GBのファイルが表示されます。おそらく両方でmd5sumを実行して確認することもできます。
一部のUNIXバージョンでは実行をサポートすることがありますが、これはpidが完了するtail
と自動的にテーリングを停止します。--pid={Your pid here}
答え3
コメントするにはクレジットが足りません。
もちろん、それは質問に答えません。そのため、レビューとみなすことができます。それにもかかわらず、内部の外観をはっきりと示しています。これが、このレビューがこのページに掲載される価値があると考える理由です。時間をいただきありがとうございます。どういうわけか関係ありませんウェブサイト。
私が見つけた移動削除後にファイルハンドルを開く、これは2021年半ばのもので、ここで何が起こっているのか非常によく説明します。私の考えでは、これよりも優れています。コピー、コメントで指摘したミラフ5月3日13時55分。