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

qdi*_*dii 6 performance ssd hard-disk

页面展示了碎片整理对 SSD 有益。我想这种类型的碎片整理必须具有修剪意识,以保持磁盘的使用寿命。我怎么能在linux上做到这一点?

编辑:评论指出这篇文章的内容有问题。

fro*_*utz 14

一般来说,您可以完全忽略碎片。对于不受硬盘寻道时间影响的 SSD 更是如此。对 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
Run Code Online (Sandbox Code Playgroud)

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

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

cp -a yourfile yourfile.defrag
mv yourfile.defrag yourfile
Run Code Online (Sandbox Code Playgroud)

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

但正如我所说,通常没有必要这样做,除非文件以某种方式出现了非常糟糕的碎片情况。


Mar*_*ase 12

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

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

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

SSD 控制器计算出写入块的位置以获得最佳速度并均匀地磨损每个闪存单元。因此,即使是(对操作系统而言)按顺序排列的逻辑块实际上也以完全不同的顺序存储在 NAND 上——这是一件好事。对应该碎片化的东西进行碎片整理的想法是没有意义的。


sou*_*edi 6

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

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

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

TRIM 的东西更相关。它在默认情况下被关闭,因为当时的性能故事真的不清楚(即启用它有时会出现大幅减速)。抱歉,这是带有新硬件的 linux :)。我倾向于discard在安装时启用挂载选项,并且在删除文件时我没有看到可怕的挂起。(至关重要的 m500 SSD)。

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


psu*_*usi 6

文章作者是卖蛇油的。虽然如果您执行完全随机的小块 (4k) IO,您确实会看到 SSD 的性能下降,但这在实践中从未发生过,即使在因严重碎片化而臭名昭著的 Windows 文件系统上也是如此。碎片对 SSD 的影响比 HDD 小 100-1000 倍。甚至每 64k 引入一次搜索对 SSD 的吞吐量影响可以忽略不计。当您认为 Linux 文件系统在实践中碎片化程度不够严重以至于即使在 HDD 上也需要进行碎片整理时,以及任何尝试碎片整理而引入的写入会缩短磁盘寿命的事实,显然应该避免这种情况。

如果您坚持对 ext[234] 进行碎片整理,您可以使用旧的e2defrag程序来完成。