
すばらしい質問がありましたが、残念ながら私はやや広範な答えを書いている間に削除されました。 :(
このような努力を無駄にしたくないので、質問文やコメントで問題を説明します。
dd
ファイルの上書きを使用すると、断片化が増加することがわかりました。dd
断片化を引き起こさない選択肢を探しています。断片化がどのように起こるかの例として、ファイルシステム全体を占めるファイルを想像してみてください。上書きを開始すると、パーティションが完全に「無料」になる方法をすぐに確認でき、同時に他のファイルをここに書き込むことができます。ブロックは動的に割り当てられ、ファイルを上書きすると以前のブロックが再利用されるという保証はありません。
私は複数のファイルシステム(ext2、3、4、XFS、FAT32、NTFS)と複数のオペレーティングシステム(win95から最新のFedoraまで)でこの動作を観察しました。
私はこれがファイルシステムやオペレーティングシステムとは何の関係もないと確信しています。
私の主なファイルシステムはBog標準ext4です。 FedoraROOT: 103874/1310720 ファイル(0.2% 非連続)、1754833/5242880 ブロック。最小限の完全な部分。
気づく私私はこれを直接観察することができませんでした。私はこの断片的な声明の元の質問者を信じています!
答え1
長すぎる博士!代わりにどのツールを使用する必要がありますかdd
?A:はいcp
、GNU coreutilsが十分に新しい場合です。
物理ファイルシステムの救出
これは、ファイルシステムとオペレーティングシステムはまったく独立していません!ブロックファイルの割り当ては特定のファイルシステムによって異なり、ファイルシステムによって異なります。だからできない厳密に独立しています!
Ext4の遅延割り当てが役立ちます
Ext4 サポート更新時に割り当てられる:ブロックは、以前以外のデータがディスクにフラッシュされるとファイルに割り当てられます。これは、あなたのシステム(現代のFedoraは確かにそうです)がファイルシステムバッファを使用している場合、順番に拡張されたファイルの割り当てサイズが非常に大きく、断片化が非常に低いことを意味します。これを有効にすることができ、後で何もする必要はcp
ありませんdd
。cp
ext4ではこれを呼び出します。遅延割り当て;delalloc
インストールオプションを追加するだけです! (望むよりman ext4
)
cp
最新の Fedora で will 呼び出しを使用すると、copy_file_range
コンテンツをディスクにフラッシュする際に連続割り当てが発生します。
XFSが救出されます
XFSはデフォルトで遅延割り当てを実行します。 ext4を参照してください。
同じファイルシステム:reflink
cp
Fedora >=34 または GNU coreutils >=9.0 を使用する場合にcp
サポートされます。reflinks
つまり、単にいいえデータを複製する代わりに、両方のファイルで使用されているブロックを表示し、どちらかが変更されたときにコピーを1つだけ作成します。これは非常に良い機能ですが、もちろん、ソースファイルとターゲットファイルが同じファイルシステムにある場合にのみ機能します。
その結果、ターゲットファイルは実際には同じブロックであるため、ソースファイルと同じです(断片化なし)。
さまざまなファイルシステム:XFS割り当てグループ
XFS は、ファイルシステム全体の空き領域と使用領域を「1 つ」として管理しません。課題グループ。引用するman xfs
:
データセクションには、すべてのファイルシステムメタデータ(inodes、ディレクトリ、間接ブロック)、および一般(非アクティブ)ファイルのユーザーファイルデータとログ領域(ログがデータセクション内にある場合)が含まれます。データ部分は割り当てグループに分けられます。割り当てグループの数とサイズはmkfs.xfs(8)によって選択されるため、通常は同じサイズの少数のグループがあります。割り当てグループの数は、ファイルおよびブロック割り当てで使用可能な並列処理レベルを制御します。十分なメモリがあり、割り当てアクティビティが多い場合は、デフォルト値を増やす必要があります。割り当てグループの数を高すぎるように設定しないでください。これは、ファイルシステムがほぼいっぱいになったときにファイルシステムが多くのCPU時間を使用できるためです。 xfs_growfs(8) を実行すると、より多くの割り当てグループ (元のサイズ) が追加されます。
したがって、「断片化につながる同時割り当て」の問題を解決するには、十分な割り当てグループだけが必要です。私はいくつかの適切なサイズのファイルシステムを期待していましたが、デフォルトで数を増やすだけで十分でした(4デバイスストライプLVMボリュームに5を使用したため、パフォーマンスが良いようです)。ただし、割り当てグループの数を増やすには、ストレージを再フォーマットまたは追加する必要があります。
構造ツール
dd
ファイルを他のファイルで上書きするのに好ましいツールではありません。cp
はい、現在のバージョン(9.0)とFedoraに同梱されているバージョン(Fedoraパッチを含む8.32)の両方で動作し、copy_file_range
最終的にコピーされるデータの量を基本ファイルシステムに通知します。 - このように割り当てるだけでブロックにしてください。