連続コピー – ファイルを連続的にコピーする方法は?

連続コピー – ファイルを連続的にコピーする方法は?

個々のファイルが連続するように、複数のファイルをフラッシュドライブにコピーしたいと思います。互いに連続する必要はなく、どの順序でも可能です。これらのファイルは、数百メガバイトからギガバイトまで、非常に大きいです。ドライブ内の他のファイルを最適化すると、時間が無駄になり、フラッシュメディアが不必要に磨耗します。

少なくともFAT32に対してこれを行うことができるようにしたいが、*nixファイルシステムのアプローチも高く評価されます。

基本的には2つのアプローチがあります。

  • ファイルをコピーして最適化してみてください。
  • 各ファイルに十分な連続した空き容量を確保し、各ファイルをその場所にコピーします。

2番目のオプションは通常、最初のオプションよりはるかに速く、フラッシュメディアの不要な摩耗を防ぐため、2番目のオプションは非常に優先されます。

オフラインで動作するソリューションは気に入らないが、明らかにオンラインの方が良い。

答え1

私はあなたがしたいことをよく理解していないことを認めなければなりませんが、それが重要だとは思いません。あなたが要求したタスクを実行するように設計されたこのツールを見つけましたdefragfs(あなたがしたいことを私が理解した場合)。

http://defragfs.sourceforge.net/index.html

私の考えでは、このツールの特徴は最適化が可能であることです。後ろに、私の考えでは、基本的にディスクにファイルを書き込むときに順番に完了することを保証したいようです。 StackOverflow Q&Aによると、Linuxで隣接するディスクブロックにファイルを保存する方法、書き込み完了アーキテクチャを考えると不可能に見えます。

このQ&Aを完了するのに役立つように、次のリソースが見つかりました。

答え2

Linuxでこれを行う必要がある場合:

rsync --preallocate /path/to/source/file /path/to/destination/

rysnc は隣接するストレージブロックを事前に割り当て、ファイルをここにコピーします。 FATとNTFSでも動作します。

ファイルがターゲットにすでに存在しないことを確認してください。それ以外の場合、rsync はそのファイルを再割り当てして再コピーしません。その場合は、削除し、ごみ箱を空にして本当になくなったことを確認してから、このコマンドを実行してください。

連続複製の確認:

filefrag /path/to/destination/file

「1つの範囲が見つかりました」は、ファイルが連続していることを意味します。複数の場合は断片化されていることを意味します。

断片化が続く場合は、filefragソースファイルの断片化チェックを使用します。その場合は、rsync --preallocateソースファイルを新しい名前でコピーし、ソースファイルを最適化します。その後、目的のターゲットに再度rsyncします。時には、これを複数回実行すると、ソースファイルとターゲットファイルが1つの範囲に縮小される可能性があります。

その後も断片化されたままになると、ターゲットドライブにファイル全体を保存するのに十分な空き容量がない可能性があります。ターゲットドライブ全体のデフラグを実行するか、filefragそのドライブの大容量ファイルの断片化チェックを使用してを使用してデフラグを実行し、もう一度やり直しrsync --preallocateてください。

最後に、NTFS ドライブに同期する場合、NTFS は 3 GB ポイントにカタログ ファイルの小さな部分を予約するため、ファイルがその 3 GB ポイントと重複しても連続しないことがあります。ここでEasy2Boot議論を参照してください。

https://easy2boot.xyz/create-your-website-with-blocks/make-using-linux/#Making_files_contigulous

(Easy2Bootには、LinuxでFATおよびNTFSドライブを最適化するためのdefragfsユーティリティも含まれているudefragため、フルドライブの最適化が必要な場合に便利です。)

答え3

少なくともFAT32では可能ですが、ツール名は覚えていません。

私の記憶が正しい場合は、最初にフルレングスホールを呼び出し、それを新しいストリームに割り当ててから、そのストリームからファイルを読み書きすることに基づいています。

記憶が正しい場合は、事前に割り当てられたコピーでもNTFSを使用できます。

しかし、NTFS圧縮ファイルの場合、方法はありません... Windowsはファイルを最初に(非圧縮)書き、次にファイルをブロック単位で圧縮するので...正直に言うとパイプで実行されます...理由です(10GiBファイルは数十万を超えるフラグメントを生成する可能性があります)。

NTFS圧縮が有効になっている場合は、それを防ぐツール/コマンドがあるかどうかわかりません。ずっと前に、Windowsで断片化せずにコピーできる素晴らしいGUIを持つツールを使用していましたが、名前が覚えていないようです。

したがって、私が言うことができる最善の方法は、WindowsでXCOPYそのフラグと一緒に/Jコマンドラインユーティリティを使用することです。

断片化しないようにし、NTFS圧縮が無効になっている場合、またはFAT32を使用している場合は、大容量ファイルに適しています。

NTFS圧縮パイプの断片化説明:

  1. ブロックNはクラスタNに書き込まれる。
  2. N+# 周辺のクラスターは圧縮され、他の場所に保存されるため、N と N+# 間のクラスターは無料になります。つまり、ファイルは非常に断片化されます。 10GiB = 100,000個(50%圧縮仮定)。これがNTFS圧縮がとても悪い理由です。ファイルが最初にRAMに圧縮されてからディスクに転送されると、断片化が発生しないか、最小限に抑えられます。

これのもう一つの副作用は、5GiBの空き領域があり、6GiBファイルを作成しようとすると仮定すると、圧縮後3GiBだけが必要であるということです。これは不可能ですが、まず2GiB(非圧縮)を他の場所に移すと、空きスペースが7GiBになり、6GiBを書き、3GiBだけになるように圧縮すると空きスペースは4GiBになり、後で入れると私たちが移動するデータのうち2GiBはすべてあります。は無料です。要点は、解凍するのに十分な空き領域がないとNTFSにファイルをコピーできないことです。NTFS圧縮後に十分なスペースがあるかどうかは重要ではありません。最初に圧縮なしで書き、次に圧縮を適用するので、これはすべて必要です。最後に、NTFSドライバはパイプでこれを行うため、理論的にはまだ可能ですが、空きサイズ部分の確認は変更されていません。

Windowsは圧縮されたファイルの後ろにファイルを書きませんが、圧縮されていない状態で保存した後にファイルを圧縮します。したがって、各クラスタについて、ハードドライブには2回の書き込み試行が表示されます。 1つ目は圧縮されていないデータを使用し、2つ目は圧縮されたデータを使用します。最新のパイプ型NTFSコントローラは、HDDが両方の書き込みを表示できないようにしますが、最初のNTFSバージョンでは、HDDが圧縮されていないファイル全体を書き込み、ファイルを圧縮します。これは非常に大きく、圧縮可能なファイルの場合に非常に顕著です。 NTFSで数MiBに圧縮された10GiBファイル(0で埋められたファイル)を作成するのは、圧縮されていないファイルバージョンを作成するよりも時間がかかります。最近では、パイプラインはこれを破るのに時間がかかりませんが、以前に利用可能なサイズはまだ十分です。

いつかNTFS圧縮方法は、1行を圧縮して書き込み後に最適化を行わずに、断片化されていないNTFS圧縮ファイルを取得できることを願っています。それまでの最善の方法は、フラグおよび/または名前が記憶されていないGUIツールをXCOPY使用することです。 Windowsは当時XPのみをサポートし、一時停止、HDD1からHDD2、HDD3からHDD4への並列コピー、および事前割り当てオプションがありました。役に立ったことを願っています!/JCONTIG

答え4

これがFAT32でのみ機能することを発見しました。

関連情報