如何对 ext4 文件系统进行彻底碎片整理

abu*_*kaj 2 filesystem ext4 defrag

我希望ext4 文件系统中的所有文件不会因为某些原因而碎片化。遗憾的是e4defrag(这里建议:如何对 ext4 文件系统进行碎片整理)无法对多个文件进行碎片整理。我有什么选择?

\n

文件系统中已经包含所有文件(不能以任何方式更改它们)并且几乎已满。有几个空闲块(根据df -h:85G 和 80G 已使用的 434M 可用)可以用作缓冲区。我不需要在碎片整理时安装文件系统。此外,我还有其他可用的文件系统,有足够的空间用作缓冲区。

\n

我的一个想法是将文件移动到其他文件系统,然后以某种方式将它们复制回来,告诉文件系统连续存储它们。

\n

[编辑]

\n

我刚刚发现我不能依赖e4defrag输出。它将具有多个范围的文件计为碎片,但它知道范围是连续的:

\n
$ sudo filefrag file.file\nfile.file: 1 extent found\n$ sudo e4defrag -vc file.file\ne4defrag 1.45.5 (07-Jan-2020)\n<File>\n[ext 1]: start 22388736: logical 0: len 32768\n[ext 2]: start 22421504: logical 32768: len 32768\n[ext 3]: start 22454272: logical 65536: len 32768\n[ext 4]: start 22487040: logical 98304: len 27962\n\n\xc2\xa0Total/best extents 4/1\n\xc2\xa0Average size per extent 126266 KB\n\xc2\xa0Fragmentation score 0\n\xc2\xa0[0-30 no problem: 31-55 a little bit fragmented: 56- needs defrag]\n\xc2\xa0This file (file.file) does not need defragmentation.\n\xc2\xa0Done.\n
Run Code Online (Sandbox Code Playgroud)\n

xio*_*ota 12

我希望 ext4 文件系统中的所有文件不会因为某些原因而碎片化。

虽然有合理的理由进行碎片整理,但没有要求每个文件都进行碎片整理并且是连续的。任何人可能希望对每个文件进行碎片整理的主要原因与 OCPD 相关,这完全是浪费时间,因为文件系统在挂载 rw 后不久就会再次变得“碎片化”。

文件系统...几乎已满...

在这种情况下,您可能无法对每个文件进行碎片整理,因为 Linux 碎片整理程序往往在文件级别工作,并且您不一定有足够的连续可用空间来对每个文件进行碎片整理。

我的一个想法是将文件移动到其他文件系统,然后将它们复制回来......

这是你最可行的选择。然而,具体的文件分配是由文件系统驱动程序决定的。


要重新排序块,有一个空闲块作为缓冲区就足够了。

Linux 文件系统开发人员没有给予碎片整理与 Windows 开发人员相同的优先级。所以问题不在于技术上不可能,而在于没有人费心编写任何程序来做到这一点。

碎片整理后,fs 可以设置为 ro。

然后使用专为 ro 使用而设计的文件系统,例如 squashfs。所有文件都将被整理、连续甚至压缩。