ext4 文件系统需要进行碎片整理吗?

ext4 文件系统需要进行碎片整理吗?

文件ext4系统需要需要进行碎片整理吗?如果是,如何我该对它们进行碎片整理吗?

如果没有,你可以发布一个简单的解释为什么它们不需要进行碎片整理吗?

答案1

文件系统是否ext4需要进行碎片整理?

是的(但很少)。

如果是的话,我该如何对它们进行碎片整理?

复制分区中的所有文件,从分区中删除文件,然后将文件复制回分区。当您将文件复制回磁盘时,文件系统将智能地分配文件。

如果没有,您能否简单解释一下为什么它们不需要进行碎片整理?

ext4与仅仅将新文件添加到下一个可用空间相比,Linux 文件系统的行为更加智能。Linux 文件系统不会将多个文件放在硬盘上彼此靠近的位置,而是将不同的文件分散到整个磁盘上,并在它们之间留出大量可用空间。当编辑文件并需要增大时,通常会有足够的可用空间供文件增长。如果确实发生碎片,文件系统将尝试移动文件以减少正常使用中的碎片,而无需碎片整理实用程序。

感谢@Green Reaper 的评论,我注意到了e4defrag

答案2

我已经使用 ext4 分区一年多了。我经常用完空间,将大量文件移入移出等等……这些事情都会导致碎片化,昨天我第一次检查了碎片化,只有 2 个文件(不是 %,只有两个文件)有碎片。

在使用时间大约一年多、可用空间更多的 Windows 分区上,碎片化程度达到 95%。

因此,您确实不需要对 ext4 进行碎片整理,如果您想确定,请为 ext4 保留默认的可用空间(默认为 5%,可以通过 进行更改ex2tunefs -m X)。

答案3

以下是 2022 年的更新内容

碎片化有多种原因:

  • 当操作系统无法智能地管理文件时
  • 没有足够的连续空间来写入文件
  • 当多个应用程序同时将不同的文件写入磁盘时

进行碎片整理的原因

为什么需要对文件进行碎片整理?在 HDD 上,这是为了更快地访问文件或将它们移动到磁盘上速度更快的区域(盘片的外侧)。然而,还有另一件重要的事情,许多人都不知道:当文件碎片化时,如果您有意或无意地删除它们,就无法恢复它们,因为碎片太多,无法理解它们需要以什么顺序重新组合。ext4 的正常扇区大小为 4K,因此 1GB 文件理论上最多可以有 262144 个碎片。在人们说这永远不会发生之前,我曾经有过这样的服务器,我们的程序员以大致相同的速度同时写入两个 MySQL 文件,因此生成的文件碎片严重,读取速度远低于 1MB/秒,而“正常”文件的读取速度约为 200MB/秒。

至于 SSD,几乎没有理由进行碎片整理,但也有理由不这样做,因为 SSD 的擦除/写入次数有限。但这仍然需要写入大量数据,因为现代 SSD 具有相当大的备用区域来缓解这个问题。

在数据恢复方面,存在一个问题。如果你启用了discard挂载选项,已删除的文件将永远消失,因此无论它们之前是否进行过碎片整理,你都无法物理恢复它们。

如果您选择不使用此选项,而是依靠每周执行一次的操作(fstrim),那么碎片整理就很有意义。

了解碎片数量

我真的怀疑之前的评论是否诚实地说明了 ext4 的碎片程度。在某些情况下,它可以并且会严重碎片化文件,一些应用程序(如 systemd-journald)就是这样的故意地

您可以运行以下命令e2fsck检查分区碎片化程度。在已安装的分区上,这将产生大量错误,请忽略它们:

sudo e2fsck -n -v -f /dev/partition

正在进行碎片整理

为了对 ext4 进行碎片整理,我编写了一个需要在 root/sudo 下运行的脚本 - 您可以获取它这里。它将对正在运行的应用程序的二进制文件以外的所有内容进行碎片整理 - 您可能希望事先退出它们。它需要一个参数来运行 - 一个路径,例如

sudo defrag /

该脚本仅对给定分区上的文件进行碎片整理。如果您已安装分区,请直接指定它们,即sudo defrag /mnt/archive。它可能不会对您的交换进行碎片整理文件因此,sudo swapoff -a提前运行是必要的。

这不会对可能同样碎片化的目录进行碎片整理。为此,您需要在卸载分割:

sudo e2fsck -D -f -v -C 0 -n /dev/partition

有时卸载分区会变得非常困难,请使用任何实时 Linux 发行版,例如系统救援

可用空间碎片整理问题

ext4 最大的问题是它只能对单个文件进行碎片整理,因此您无法对文件进行碎片整理或腾出连续的可用空间(为此,您需要使用不同的文件系统,例如 XFS)。完全有可能有大量可用空间,但无法对相对较小的文件进行碎片整理。

例如,我的 Fedora 根文件系统有 20GB 空间,其中占用空间不到 7GB,但我无法对几个二进制文件和库(chrome、libxul.so)进行碎片整理,这些文件的大小不到 200MB。原因何在?一般的 Linux 发行版包含大量文件(我的安装文件超过 30K,甚至不是 Gnome/KDE),当您将这些文件分散到分区中时,没有那么多“漏洞”,可用空间也很多。

结论/TLDR

  • 如果你有硬盘,你可能想对它进行碎片整理
  • 如果你有固态硬盘,通常不需要对其进行碎片整理,除非你想增加成功恢复已删除文件的机会
  • 如果您想要完全整理您的文件系统,您将需要一个不同的文件系统,例如 XFS。

相关内容