哪个 linux 文件系统最适合 SSD

hbt*_*hbt 133 linux ssd filesystems

来自维基:

从 2.6.33 内核(2010 年初可用)开始的 Linux 操作系统支持重要的 TRIM 功能。但是,各种文件系统之间的支持仍然不一致或不存在。安装软件也不会执行正确的分区对齐。

那么,哪个文件系统最适合 SSD 并在安装过程中支持 TRIM + 分区对齐并且在 Ubuntu 上可用?

ali*_*gar 95

文件系统 EXT4 + TRIM:

  • 带有 TRIM 的 EXT4 通过减少对 SSD 驱动器的不必要写入周期来提高性能,因为它们限制了写入-重写周期。
  • Ubuntu 和其他一些 Linux 版本支持开箱即用的带有 TRIM 的 EXT 4。

交换分区:

  • 再次确保 SSD 上没有 SWAP 空间,以减少写入周期。
  • 如果您有机械驱动器,那么您应该在机械驱动器上创建一个 SWAP 空间,并避免将它放在 SSD 上。

分区对齐:

  • 分区应该从干净的 1MB 边界开始,以便文件系统的块大小与 SSD 的块大小对齐。

因此,在机械硬盘驱动器上使用带有 SWAP 的EXT4 + TRIM或在 SSD 上不使用 SWAP。

以上可以参考来源:How to Maximize SSD Performance 来实现

  • 当您还指定了 `noatime` 时,就没有必要指定 `nodiratime`。同意,它看起来很酷而且对其他书呆子来说很先进,但是由于 `noatime` 禁用了 inode 上的 atime,并且目录也是 inode,这就像是在说 _“洗手,也洗你的拇指”。_ :) (7认同)
  • 不,“[Linux 交换分区](https://en.wikipedia.org/wiki/Solid-state_drive#Swap_partitions) 在底层块设备支持 TRIM 时默认执行 TRIM 操作,并且有可能将它们关闭,或者在一次性或连续 TRIM 操作之间进行选择。” 所以swap分区应该放在SSD上以利用快速访问时间,这将导致每次页面交换发生大量时间 (5认同)
  • @aliasgar F2FS 与 ext4 相比是一个不错的选择吗? (2认同)

Tot*_*tor 81

简答

  • 选择ext4,然后使用TRIM支持选项安装它,或者使用 FITRIMdiscard(见下文)。noatime如果您担心“SSD 磨损”,也可以使用该选项。

  • 不要更改多应用服务器上的默认 I/O 调度程序 (CFQ),因为它提供进程之间的公平性并具有自动 SSD 支持。但是,在桌面使用 Deadline可以在负载下获得更好的响应能力。

  • 为了轻松保证正确的数据对齐,每个分区的起始扇区必须是 2048 (= 1 MiB)的倍数。您可以使用fdisk -cu /dev/sdX来创建它们。在最近的发行版中,它会自动为您处理这个问题。

  • 在 SSD 上使用交换之前请三思。与在 HDD 上交换相比,它可能会快得多,但它也会更快地磨损磁盘(这可能无关紧要,请参见下文)。

长答案

  • 文件系统:

Ext4是最常见的 Linux 文件系统(维护良好)。它为 SSD 提供了良好的性能,并支持TRIM(和 FITRIM)功能以随着时间的推移保持良好的 SSD 性能(这会清除未使用的内存块,以便以后快速写入访问)。NILFS是专为闪存驱动器,但并没有 真的不是执行更好的ext4的基准。BTRFS,仍处于实验(并没有真正有更好的表现无论是)。

  • SSD 性能和修剪:

TRIM功能,清除未通过文件系统不再使用的SSD模块。这将优化长期写入性能,并因其设计而推荐用于 SSD。这意味着文件系统必须能够将这些块告诉驱动器。当文件系统块被释放时discardext4的mount 选项将发出这样的TRIM命令。这是网上弃牌

然而,这种行为意味着一点性能开销。从 Linux 2.6.37 开始,您可以避免使用discard并选择偶尔使用 FITRIM 进行批量丢弃(例如从 crontab 中)。该fstrim实用程序执行这个(网上),还有-E discard的选择fsck.ext4。但是,您将需要这些工具的“最新”版本。

  • SSD磨损:

您可能希望限制对驱动器的写入,因为 SSD 在这方面的使用寿命有限。不过不要太担心,当今最差的 128 GB SSD 可以支持每天至少20 GB 的写入数据超过 5 年(每个单元 1000 个写入周期)。更好的(和更大的)可以持续更长时间:到那时你很可能已经更换了它。

如果您想在 SSD上使用交换,内核会注意到一个非旋转磁盘并随机交换交换使用(内核级磨损均衡):SS当启用交换时,您将在内核消息中看到(固态):

在 /dev/sda1 上添加 2097148k 交换。优先级:-1 范围:1 跨:2097148k SS

  • I/O 调度程序:

另外,我同意aliasgar的大部分答案(即使其中大部分是 - 非法的? - 从本网站复制),但我必须部分不同意调度程序部分。默认情况下,期限调度用于将旋转磁盘优化,因为它实现了电梯算法。所以,让我们澄清这一部分。

关于调度程序的长答案

从内核 2.6.29 开始,会自动检测 SSD 磁盘,您可以通过以下方式进行验证:

cat /sys/block/sda/queue/rotational
Run Code Online (Sandbox Code Playgroud)

您应该1购买硬盘和0SSD。

现在,CFQ 调度程序可以根据此信息调整其行为。从 linux 3.1 开始,内核文档cfq-iosched.txt文件

CFQ 对 SSD 进行了一些优化,如果它检测到可以支持更高队列深度的非旋转媒体(一次多个请求),[...]。

此外,截止日期调度程序尝试根据扇区号限制旋转磁盘上的无序磁头移动。引用内核文档deadline-iosched.txtfifo_batch 选项描述

请求被分组到特定数据方向(读或写)的“批次”中,这些方向以递增的扇区顺序提供服务。

但是,在使用 SSD 时将此参数调整为 1 可能会很有趣:

此参数调整每个请求延迟和总吞吐量之间的平衡。当低延迟是主要问题时,越小越好(值 1 表示先到先得的行为)。增加 fifo_batch 通常会提高吞吐量,但代价是延迟变化。

一些基准测试 表明 不同调度程序之间的性能差异很小。那么,为什么不推荐公平呢?当CFQ 在替补席上很少表现不佳时。但是,在桌面设置中,由于其设计(尽管可能以较低的吞吐量成本),您通常会在负载下使用 Deadline体验更好的响应能力

也就是说,更好的基准测试将尝试将 Deadline 与fifo_batch=1.

默认情况下,要在 SSD 上使用 Deadline,您可以创建一个文件,/etc/udev.d/99-ssd.rules如下所示:

# all non-rotational block devices use 'deadline' scheduler
# mostly useful for SSDs on desktops systems
SUBSYSTEM=="block", ATTR{queue/rotational}=="0", ACTION=="add|change", KERNEL=="sd[a-z]", ATTR{queue/scheduler}="deadline"
Run Code Online (Sandbox Code Playgroud)

  • @jarno 在最近的发行版中(现在已经好几年了),分区工具,从 fdisk 到图形化的东西,往往会自动默认为从设备开始以 1Mb 的倍数创建分区对齐。这预先与 512 字节、4k、8k 和半亿其他的 2^n 块/集群大小对齐。除非您付出很大的努力,否则几乎不可能使分区错位。 (4认同)

har*_*ymc 16

archlinux 文章Solid State Drives文件系统的选择部分说:

文件系统有很多选项,包括 Ext2/3/4、Btrfs 等。

Btrfs
Btrfs 支持已包含在 Linux 内核的主线 2.6.29 版本中。有些人认为它对于生产用途来说还不够成熟,同时也有 ext4 的潜在继承者的早期采用者。鼓励用户阅读 Btrfs文章以获取更多信息。

Ext4
Ext4 是另一个支持 SSD 的文件系统。它自 2.6.28 以来被认为是稳定的,并且已经足够成熟以供日常使用。与 Btrfs 相反,ext4 不会自动检测磁盘性质;用户必须使用 fstab 中的丢弃挂载选项(或使用 tune2fs -o discard /dev/sdaX)显式启用 TRIM 命令支持。

Btrfs 和 Ext4 都满足了高效使用 SSD 的两个主要要求:

  • 文件系统必须能够向底层 SSD 发出 ATA_TRIM 命令
  • 文件系统不得对磁盘执行不必要的写入

对于性能,还有另外两个要求:

  • 分区需要与 SSD 的块大小对齐
  • 必须为每个 Ext4 格式的分区显式启用 TRIM

第一个是现在大多数 Linux 安装程序自动执行的。如果以“-cu”标志开始,fdisk 还将在 1024KB 边界创建分区。

第二个对于 Btrfs 是自动的,但对于 Ext4,这是通过将“discard”添加到“/etc/fstab”文件中每个 Ext4 分区的挂载选项列表来手动完成的。欲了解更多详细信息,请参阅本HOWTO

在我看来,这对于 Ext4 需要很少的 fstab 摆弄是没有理由不使用这个成熟和优秀的文件系统。