如何在 Linux 上对 SSD 进行碎片整理?

如何在 Linux 上对 SSD 进行碎片整理?

证明碎片整理对于 SSD 是有益的。我认为这种类型的碎片整理必须具有修剪意识,以便保持磁盘的使用寿命。我怎样才能在Linux上做到这一点?

编辑:评论指出本文内容有问题。

答案1

一般来说,您可以完全忽略碎片。对于 SSD 来说更是如此,它不像 HDD 那样受寻道时间的影响。对 SSD 进行碎片整理只会浪费写入周期。

尽管在极端情况下碎片可能会产生明显的影响,例如以随机顺序写入的稀疏文件(如某些 BitTorrent 客户端所做的那样),或者当磁盘耗尽可用空间时,最后写入的文件将由于没有其他连续空间可以满足需要,因此被分成数千个碎片。

但这是例外。通常不会发生这种情况。大多数文件系统都非常擅长避免碎片,Linux 内核也擅长避免碎片带来的不良影响。一旦有多个进程同时读/写文件,磁盘就必须同时无处不在。

Linux 上没有太多的碎片整理解决方案。 XFS 的xfs_fsr效果非常好,因此如果您绝对想使用碎片整理,XFS 是一个不错的选择。

filefrag您可以使用或检查文件碎片hdparm

# filefrag debian-6.0.6-amd64-netinst.iso 
debian-6.0.6-amd64-netinst.iso: 4 extents found

# hdparm --fibmap debian-6.0.6-amd64-netinst.iso

debian-6.0.6-amd64-netinst.iso:
 filesystem blocksize 4096, begins at LBA 0; assuming 512 byte sectors.
 byte_offset  begin_LBA    end_LBA    sectors
           0    3003928    3072407      68480
    35061760    2872856    2938391      65536
    68616192    2171576    2302647     131072
   135725056   56259072   56338047      78976

如果这没有给您带来数百或数千个范围(片段),则无需担心。

通用的碎片整理方法是制作文件的副本,然后用它替换原始文件,例如:

cp -a yourfile yourfile.defrag
mv yourfile.defrag yourfile

您的文件系统应该有大量的可用空间,否则新文件很可能会像旧文件一样碎片化。 (替换前检查新文件是否比旧文件更好)。

但正如我所说,通常不需要这样做,除非文件以某种方式出现非常严重的碎片情况。

答案2

其他人提到碎片整理可能对 SSD 没有影响。 (我意识到这是一个老问题,但我想添加上下文。)

我想提出同一论点的更强有力的版本:碎片整理的概念对于 SSD 根本没有任何意义。 SSD不会将顺序逻辑块写入闪存中的顺序块;为了最大限度地提高吞吐量,SSD 控制器会将块分布在多个 NAND 芯片上(有点像迷你 RAID)。

看:http://www.anandtech.com/show/2829/5

SSD 控制器确定在哪里写入块以获得最佳速度,并均匀地磨损每个闪存单元。因此,即使逻辑块(对于操作系统而言)看起来是按顺序排列的,但实际上却以完全不同的顺序存储在 NAND 上——这是一件好事。对某些东西进行碎片整理的想法应该分裂是没有意义的。

答案3

因为ext4碎片整理程序被称为e4defrag。 (它现在是官方 e2fsprogs 的一部分)。

还有一个fstrim命令应该适用于ext4and (我认为)xfs。它发送对文件系统上未使用空间的丢弃请求。如果您的文件系统未安装-o discard(即立即发送已删除文件的丢弃信息),它可能特别有用。

这些都不会自动设置。除非你很不寻常,否则你不需要e4defrag

TRIM 的东西更相关。默认情况下它被关闭,因为当时的性能情况确实不清楚(即启用它有时会导致速度大幅下降)。抱歉,这是带有新硬件的 Linux :)。我倾向于discard在安装时启用挂载选项,并且在删除文件时我没有看到可怕的挂起。 (Crucial m500 SSD)。

如果您阅读过 SSD 评论,您会发现,如果您不将其保持 100% 满,那么大多数 SSD 都能发挥最佳性能:)。这不是强制性的,但保留空间(例如 10%)并防止其被使用的一种方法是在分区时不分配整个设备。

答案4

您正在寻找的工具是弗斯特里姆。如果您不关闭笔记本电脑/服务器,可以安排每天、每周或夜间进行:

将以下脚本放入/etc/cron.weekly/01-fstrim

#!/bin/sh
fstrim /
fstrim /home

使其可执行:

chmod +x /etc/cron.weekly/01-fstrim

现在尝试运行该脚本。它不应该打印任何错误消息。如果您更改了 LUKS 配置,则可能需要重新启动才能执行此操作。

http://lukas.zapletalovi.com/2013/11/how-to-trim-your-ssd-in-fedora-19.html

相关内容