ext4ファイルシステムを完全にデフラグするにはどうすればいいですか

ext4ファイルシステムを完全にデフラグするにはどうすればいいですか

欲しい全てext4ファイルシステム内のファイルは何らかの理由で断片化されていません。残念なことにe4defrag(ここでアドバイスされています:ext4 ファイルシステムをデフラグする方法) はいくつかのファイルのデフラグに失敗します。代替手段は何ですか?

ファイルシステムにはすでにすべてのファイルが含まれており (変更されることはありません)、ほぼ満杯です。df -hバッファとして使用できる空きブロックがいくつかあります (85G のうち 434M が使用可能、80G が使用済み)。デフラグ中にファイルシステムをマウントする必要はありません。さらに、バッファとして使用できる十分なスペースがある別のファイルシステムがあります。

私が思いついたアイデアの 1 つは、ファイルを他のファイルシステムに移動し、何らかの方法でそれらをコピーして戻し、ファイルシステムに連続して保存するように指示することです。

[編集]

出力に頼ることはできないことがわかりましたe4defrag。出力では、エクステントが連続していることは分かっているものの、複数のエクステントを持つファイルは断片化されているとカウントされます。

$ sudo filefrag file.file
file.file: 1 extent found
$ sudo e4defrag -vc file.file
e4defrag 1.45.5 (07-Jan-2020)
<File>
[ext 1]: start 22388736: logical 0: len 32768
[ext 2]: start 22421504: logical 32768: len 32768
[ext 3]: start 22454272: logical 65536: len 32768
[ext 4]: start 22487040: logical 98304: len 27962

 Total/best extents 4/1
 Average size per extent 126266 KB
 Fragmentation score 0
 [0-30 no problem: 31-55 a little bit fragmented: 56- needs defrag]
 This file (file.file) does not need defragmentation.
 Done.

答え1

何らかの理由で、ext4 ファイルシステム内のすべてのファイルが断片化されないようにしたいです。

デフラグには正当な理由があるが、一つ一つのファイルがデフラグされ、連続している必要があります。すべてのファイルをデフラグする必要がある主な理由は OCPD に関連していますが、これは完全に時間の無駄です。なぜなら、ファイル システムは rw でマウントされた直後に再び「断片化」されるからです。

ファイルシステムがほぼいっぱいです...

このシナリオでは、Linux のデフラグ プログラムはファイル レベルで動作する傾向があり、すべてのファイルをデフラグするのに十分な連続した空き領域が必ずしもあるとは限らないため、すべてのファイルをデフラグすることはできない可能性があります。

私が思いついたアイデアの 1 つは、ファイルを他のファイルシステムに移動してから、それをコピーし直すことです...

これが最も実行可能なオプションです。ただし、特定のファイルの割り当てはファイル システム ドライバーによって決定されます。


ブロックを並べ替えるには、バッファとして 1 つの空きブロックがあれば十分です。

Linux ファイル システムの開発者は、デフラグに Windows の開発者と同じ優先順位を与えていません。したがって、問題は技術的に不可能であるという点ではなく、デフラグを実行するプログラムを誰も書こうとしないという点にあります。

デフラグ後、fs は ro に設定されることがあります。

次に、squashfs のような、RO 用に設計されたファイルシステムを使用します。すべてのファイルはデフラグされ、連続し、さらに圧縮されます。

答え2

一部のファイルが大きい場合、ファイルシステムを再フォーマットせずにすべてのファイルを最適化するのは技術的に不可能である可能性があります。

どれでもext4 ファイルシステムブロック グループのシーケンスで構成されます。デフォルトでは、各ブロック グループの長さは 128 MiB です。

各ブロック グループは、一連のファイル システム メタデータ (スーパーブロック、グループ記述子、割り当てビットマップ、および inode テーブル) から始まり、その後にそのブロック グループに属するファイルによって使用される実際のデータ ブロックが続きます。つまり、ファイル システム メタデータはデバイス全体にほぼ均一に分散されます。

ただし、オプションflex_bg機能のおかげで、複数のブロック グループを 1 つの大きなグループに集約できます。mke2fsは、2008 年頃から、デフォルトで 16 個のブロック グループをまとめてパックしたファイルシステムを作成しています。 mkfs のオプションを使用してファイルシステムを作成するときにこれを変更していないと仮定すると-G、ファイルシステムは 2 GiB の flex グループに分割される可能性があります。

すべてのファイルが 2 GiB より大幅に小さい場合を除き、保存する次のファイルを 2 つ以上の (flex) ブロック グループにまたがって断片化する必要がある状況に必然的に遭遇します。もちろん、ファイルのいずれかが (flex) ブロック グループ内の使用可能なデータ ブロックよりも大きい場合は、必ずこれが発生します。

したがって、目標を達成するには、ファイル-Gシステムが本当に大きな flex ブロック グループを使用するように、デフォルトの 16 よりもはるかに高いオプション設定でファイルシステムを再フォーマットする必要がある可能性があります。

答え3

DOS 6 より前では、FAT パーティションのデフラグに関する一般的なアドバイスは次のとおりでした。

  1. パーティションからファイルを別の場所にコピーします。
  2. パーティションを消去します。
  3. 空のパーティションにディレクトリ構造を再作成します。
  4. ファイルをコピーし直します。

デフラグが私にとって問題になる前に、MS-DOS 6 (デフラグ ユーティリティが付属) がリリースされたため、これを試したことはありませんでした。

関連情報