是否值得对 SSD 上的 XFS(许多文件)进行碎片整理?

Ale*_*der 13 email centos ssd xfs

我在 maildirs 中有 4+ Tb 邮件的相当旧的邮件服务器(CentOS 6)(所以你可以想象文件的数量)。它是 SSD 存储上的 VM (VMware 7)。

我想知道我是否应该关心 FS 碎片?我可以将整个存储同步到新的 VM 磁盘(有效地使碎片几乎为零),或者运行在线碎片整理工具(因为这是 XFS),但我应该关心吗?SSD 支持的存储似乎可以原谅任何事情?

for*_*est 16

碎片整理有何帮助?

当使用旋转磁盘将数据存储在 HDD 上时,碎片整理可显着减少机械寻道时间损失。这些设备上高度碎片化的文件系统可能会变得非常慢。固态设备没有任何寻道惩罚。然而,现代高速 SSD 通常受到 IOPS 限制,这意味着通过总线发送命令的速率才是瓶颈,而不是设备访问实际数据和服务这些请求的能力。

对文件系统进行碎片整理会增加给定文件中连续逻辑扇区的数量。即使对于 SSD,这也可以提高性能,因为可以通过单个 I/O 请求来读取文件的一小部分。如果同一部分是碎片化的,则可能需要多个请求。当使用极快的 SSD 和碎片严重的文件系统时,这很容易使总线饱和。

然而,有更好的方法来提高性能。

使用 TRIM 代替

如果您想提高 SSD 的性能,则必须使用TRIM帮助 SSD 知道可以擦除哪些块。TRIM 命令允许文件系统告诉 SSD 哪些扇区是空的并且可以移交给垃圾收集器,即使它们上仍然有(未分配的)数据。这极大地提高了设备​​管理存储的能力。在 Linux 上,您可以执行该命令fstrim /var/mail(或您的分区所在的任何位置)来为 SSD 提供可以丢弃的未分配扇区列表。有关命令用法的更多详细信息,请参阅fstrim(8)参考资料。

TRIM大大提高了SSD抗写放大的能力,并实现更好的磨损均衡。这不会加快设备的读取速度,但会加快写入速度。如果您的驱动器的可用空间非常少,那么好处就会较少(毕竟,您不会有很多可用扇区)。

固态硬盘有自己的碎片整理形式

由于SSD 的FTL(闪存转换层,闪存控制器的一部分)负责将逻辑扇区映射到物理扇区,因此在大多数情况下不需要对文件系统进行碎片整理。碎片整理所花费的时间和磨损通常是不值得的。

SSD 会自动尝试优化文件存储。这种优化受到NAND闪存的限制。为了理解这些限制,我们必须描述一些术语:

单元是闪存设备中存储数据的最小物理单元。在 SLC 器件中,每个单元存储一个位。MLC 器件,每个单元存储两个(通过保持四个不同的电压电平)。TLC 设备可存储 3 个(通过保存 8 个),而 QLC 设备可存储 4 个(通过保存 16 个)。多个单元,再加上一些额外的内容来保存纠错码,帮助从单个单元的故障中恢复,组成一个页面

页面是可以立即读取或写入的单元格的集合。页是 NAND 闪存设备实现物理扇区的方式,大多数页的大小在 512 字节到 4 KiB 之间。仅当页已被擦除(所有位初始化为 1)时才可对其进行写入。如果页面上有数据,则在不先擦除的情况下无法将其覆盖。这是因为单个位只能从 1 更改为 0。反之则只能通过擦除整个页来完成。但是,无法删除单个页面。要擦除一页,必须擦除整个

是页面的集合,以数十或数百千字节为单位。128 个单独的 4 KiB 页可以组成一个 512 KiB 块。对单个块可以采取的唯一操作是擦除。这将擦除它包含的所有页面。任何需要保留的页面中的任何数据都必须移动到已经具有一些已擦除页面的另一个块。这是由闪存控制器透明地完成的。如果空闲块很少,控制器可能需要移动一些数据才能写入任何内容,这会持续减慢写入速度。

这就带来了一个问题:为了最有效地优化写入,SSD 需要知道文件系统不再需要哪些扇区。然而,块存储设备甚至没有文件系统的概念。它们无法区分不再分配给任何文件但仍包含剩余数据的扇区和仍属于文件一部分且必须保留的扇区。因为让 SSD 识别文件系统将是一项西西弗斯任务,所以最好简单地告诉 SSD 文件系统不再需要哪些扇区。现代 SSD 通过 TRIM 支持此功能。

  • 从字面上看,您无法对 SSD 进行碎片整理,除非您使用一些没有自己的控制器的奇怪驱动器,因为操作系统无法控制数据在驱动器上的存储位置。 (3认同)
  • +1。令人兴奋的是,科学终于找到了超光速驱动器,但说实话,这有点平淡无奇 (2认同)
  • @ScottishTapWater:您可以对存储在 SSD 固件公开的逻辑块设备上的*文件系统*(XFS、EXT4 或其他)进行碎片整理。正如森林所说,读取碎片较多的文件将要求操作系统通过 SATA、SAS 或 NVMe 向 SSD 发送更多较小的请求,并为范围列表的元数据占用更多空间。你是对的,你不能要求SSD对其内部闪存转换层进行碎片整理,但这是一个单独的事情,或多或少是正交的。SSD 控制器在内部可以直接访问各个块,并且不必将数据批处理到读取命令中。 (2认同)

Joh*_*ohn 15

您不应尝试对 SSD 上的文件/文件夹进行碎片整理。碎片整理不会对固态存储做任何有用的事情,因此不应使用。“碎片”实际上并不适用于 SSD 中的单元组织。

如果您需要收缩(减少机器占用的空间),您可以在VMware中使用shrink命令来执行此操作。

我经常使用收缩剂,但你必须尝试使用​​旧机器。它应该有效。

打开终端会话,从那里运行:

sudo vmware-toolbox-cmd disk shrink /
Run Code Online (Sandbox Code Playgroud)

让收缩完成。有一个终端组件将达到 100%,然后一个 VMware GUI 窗口将缩小计算机。

收缩将恢复空间并删除计算机中未使用的空间,但对性能的影响很小(如果有的话)

  • 每个文件连续仍然有一点帮助。 (14认同)
  • @Deduplicator 这是正确的。现代 SSD 通常受到 IOPS 限制,但吞吐量不受限制。经过碎片整理的文件将需要更少的 IO 来读取,经过碎片整理的可用空间将需要更少的 IO 来写入。这是否值得进行碎片整理是另一个问题。 (10认同)
  • 这是一个常见的***神话*** - 顺序读取仍然比随机读取快得多,即使在 SSSD 上也是如此。差异比传统旋转硬盘小得多,但顺序读取比随机读取快得多。 (10认同)
  • 固态硬盘可以将数据存储在任何单元中,并且不会受益于任何特定的文件组织。 (8认同)
  • @Deduplicator虽然这个说法是正确的,但你必须不遗余力地创建这些场景,并且OP正在谈论邮件服务器档案。处理此类数据时,在功能上不存在真正的“连续”数据。如果是大型媒体收藏,当然可以,但是电子邮件档案呢? (2认同)
  • 关键是VMware如何提供磁盘:如果磁盘只是真实SSD的抽象,则不能保证VM内的碎片磁盘实际上在物理设备上进行了碎片整理。另外频繁的碎片整理也会缩短SSD的寿命。假设虚拟机看到的磁盘已完全配置,最好的策略可能是不要将文件系统填充到超过 80%;否则无论如何它都会碎裂。 (2认同)

Pet*_*des 9

SSD 不会花费额外的时间在磁盘的较远部分之间进行查找,因此潜在的收益非常小。充其量只是服务器 CPU 使用率的微小减少,也许只是百分之几的疯狂猜测。

但这是一个有效的问题;如果多个小文件的读取可以在块级别合并为一个较大的读取,那么发送到 SSD 的命令就会减少,因此您将获得更多的可用带宽。至少这是值得期待或好奇的合理事情。读取一个较大的文件也是如此。

但它仍然可能无法证明实际做任何事情都是合理的,特别是因为XFS 只能对单个文件进行碎片整理,而不能将多个小文件分组到连续的存储中(按文件名或其他顺序)。

您的文件大多很小,每个单独的文件可能都是一次性写入的,而不是稍后追加的。你说你有 maildir,每封电子邮件一个文件。mbox与传统方式不同,传统/var/mail方式中每个邮箱一个文件,邮件到达时会附加邮件。在这种情况下,可能会出现碎片,尽管删除消息涉及至少从该点重写文件的尾部。

因此,在这种情况下,您可能没有太多 XFS 可以处理的碎片;大多数文件可能只有一个范围。您可以使用 进行检查filefrag /var/mail/**/* | grep -v '1 extent found'

有关更多详细信息,您可以用来filefrag -e查看文件的各个范围,或者由于您使用的是 XFS,因此您可以用来xfs_bmap获取相同的信息。请参阅unix.SE 答案以获取示例输出


正如 @Roger Lipscombe评论的那样,即使逻辑块地址是连续的,存储文件数据的物理闪存单元也可能不连续;SSD 内的闪存重新映射层可能会在该级别产生碎片。但这没关系;SSD固件应该能够以最小的开销读取闪存的必要部分;与内核必须以某种协议(SATA、SAS 或 NVMe)发送命令不同,固件直接连接到原始闪存,读取 2 个独立区域可能并不比读取一个较长区域慢。


SHa*_*den 5

对固态驱动器进行碎片整理并不能提高磁盘性能,因为在具有移动部件的驱动器中不存在寻道/磁头移动时间。它还会增加写入周期次数有限的芯片的磨损,从而缩短使用寿命。

如果需要缩小分区,可以在卸载驱动器的情况下进行。

  • SSD 磁盘甚至不一定线性地表示块。仅仅因为这些块在文件系统中彼此相邻并不意味着它们在 SSD 上彼此相邻。 (9认同)
  • 这不是真的。连续的 8KB 文件将需要 1 个 I/O 来读取。一个 8KB 文件被分成两个 4KB 块,将需要两个 I/O 来读取。现代 SSD 在达到数据速率限制之前经常会达到 IOPS 限制。 (8认同)