分发安装程序是否会损害 SSD?

分发安装程序是否会损害 SSD?

据英特尔称,在固态驱动器上创建 Linux 文件系统时,不要丢弃块,这一点很重要。该文档指出(2015 年 3 月)的默认行为mke2fs是不丢弃区块。然而,当前的mke2fs手册页指出:

丢弃:尝试在 mkfs 时丢弃块(最初丢弃块对于固态设备和稀疏/精简配置存储很有用)。当设备通告丢弃也将数据清零时(丢弃之后和写入之前的任何后续读取都返回零),则将所有尚未清零的 inode 表标记为清零。这显着加快了文件系统初始化的速度。这是默认设置

当我手动格式化 SSD 时,我可以通过添加-E nodiscardmke2fs命令行来防止格式化期间块丢弃,但由于分发安装程序是自动的,因此不可能执行此操作。这是值得担心的事情吗?

答案1

链接的文档似乎有特定目的(Linux 内核 NVME 驱动程序开发和基准测试),并不代表对最终用户的一般建议。

它声称 ext4 不会在 mkfs 时丢弃......

核心文件系统:

  • ext4 – 默认的扩展选项不是在文件系统创建时丢弃块,保​​留它,并且不要像某些信息会告诉您的那样添加“丢弃”扩展选项。
  • xfs – 对于 mkfs.xfs,添加 –K 选项,这样就不会丢弃块。

...但确实如此。这是它所做的第一件事。

# mkfs.ext4 /dev/loop0
mke2fs 1.46.4 (18-Aug-2021)
Discarding device blocks: done
Creating filesystem [...]

因此,如果您不想丢弃所有数据,则需要主动阻止它,对于 xfs 使用mkfs.xfs -K建议,对于 ext4 使用mkfs.ext4 -E nodiscard.

# mkfs.ext4 -E nodiscard /dev/loop0
mke2fs 1.46.4 (18-Aug-2021)
Creating filesystem [...]

我不知道默认行为是否改变过。据我所知,它一直是默认的。在 -E 丢弃、nodiscard 选项出现之前,还有 -K 来保留数据(禁用默认丢弃),而没有对应的选项来启用丢弃(默认情况下禁用)。

手册页曾经声称 nodiscard 是默认值,但我没有看到它反映在提交历史记录中任何地方的代码中,所以也许它可以追溯到文档错误。

mke2fs:弃用-K选项,引入discard/nodiscard

(实际上,在这个提交中,它同时声明了discard和nodiscard都是默认的。)

如果 nodiscard 是默认值并且 fstrim 直到一周后才可能实现,那就太好了。 Linux 丢弃数据的速度有点快。格式化错误的设备,即使您立即发现错误,也已经来不及进行任何类型的数据恢复了。

答案2

前期:不太买账。

该文档较旧,可能不再准确。

而且,这也可能是错误的。历史上围绕这一点存在很多误解,编写指南的人不一定与来自同一家公司为 Linux 内核做出贡献的人是同一个人。情况确实很复杂——对一个 SSD 进行优化可能对另一个 SSD 来说是最糟糕的事情,而且芯片组制造商还没有找到一种方法来传达其控制器的偏好。
然而,NVMe 丢弃功能早已标准化(英特尔已经参与其中,实际上,占主导地位),这就是它的预期用途,所以如果它不“好”,我会感到有点惊讶。

总而言之,使用丢弃可以为 SSD 提供更多信息 - 它如何处理这些信息取决于 SSD。因此,如果您了解更多可能忽略的信息,情况会更糟:这实际上是 SSD 控制器固件问题,而不是驱动程序问题。我敢打赌,英特尔对 Linux 数据中心的良好支持非常感兴趣,早就解决了这个问题。

相关内容