简短回答

简短回答

来自维基百科:

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

那么,哪种文件系统最适合 SSD,并在安装期间支持 TRIM + 分区对齐,并且可以在 Ubuntu 上使用?

答案1

简短回答

  • 选择ext4并使用菲特里姆(见下文)。noatime如果您担心“SSD 磨损”,也可以使用该选项。

  • 不要更改默认的 I/O 调度程序(通常是 CFQ)在多应用程序服务器上,因为它在进程之间提供了公平性,并具有自动 SSD 支持。然而,使用截止日期在台式电脑上在负载下获得更好的响应能力。

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

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

编辑2022:NVMe 驱动器的速度非常快,显然 Linux 中它们的默认 I/O 调度程序是none/ noop。这是因为 CPU 用于 IO 调度的时间可能比实际直接从驱动器获取数据的时间更长。因此,对于这些驱动器,我只会保留内核设置的默认 IO 调度程序。

长答案

  • 文件系统:

扩展4是最常见的 Linux 文件系统(维护良好)。它提供了良好的 SSD 性能,并支持修剪(和 FITRIM)功能可以随着时间的推移保持良好的 SSD 性能(这会清除未使用的内存块以便以后快速进行写入访问)。近端局部缺血模型是专门为闪存驱动器设计的,但不是 真的表现优于ext4在基准上。文件系统仍被认为是实验性的(并且实际上并没有表现得更好任何一个)。

  • SSD 性能和 TRIM:

修剪功能会清除文件系统不再使用的 SSD 块。这将优化长期写入性能,并且由于 SSD 的设计,建议在 SSD 上使用。这意味着文件系统必须能够将这些块告知驱动器discardext4将发出修剪命令在文件系统块被释放时执行。这是在线丢弃

但是,这种行为意味着一些性能开销。从 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调度程序:

此外,我同意大部分别名的答案(即使其中大部分内容是非法复制的?)本网站),但我必须部分不同意调度程序部分。默认情况下,deadline 调度程序针对旋转磁盘进行了优化,因为它实现了电梯算法。那么,让我们澄清一下这部分。

关于调度程序的长答案

从内核 2.6.29 开始,SSD 磁盘会被自动检测,你可以使用以下命令进行验证:

cat /sys/block/sda/queue/rotational

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

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

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

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

请求被分组为特定数据方向(读取或写入)的“批次”,并按照扇区递增的顺序进行服务。

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

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

一些基准 建议 不同的调度器之间的性能差别不大。那么,为什么不推荐公平? 什么时候CFQ 在替补席上很少表现糟糕

然而,在桌面设置中,你通常会遇到使用 Deadline 提高响应能力在负载下,由于其设计(但可能吞吐量成本较低)。

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

要在 SSD(以及 NVMe 和闪存驱动器)上默认使用 Deadline,您可以创建一个文件,/etc/udev.d/99-ssd.rules如下所示(编辑2022: mq-deadline(多队列)取代了已弃用的deadline):

# all non-rotational block devices use 'mq-deadline' scheduler
# mostly useful for SSDs on desktops systems
SUBSYSTEM=="block", ATTR{queue/rotational}=="0", ACTION=="add|change", ENV{DEVTYPE}=="disk", ATTR{queue/scheduler}="mq-deadline"

答案2

文件系统 EXT4 + TRIM:

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

SWAP 分区:

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

分区对齐:

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

因此使用EXT4 + 修剪机械硬盘上有 SWAP,SSD 上没有 SWAP。

以上可以参考Source来实现:如何最大程度提高 SSD 性能

答案3

archlinux 文章固态硬盘在部分中说文件系统的选择

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

文件系统
Linux 内核的主线 2.6.29 版本已包含 Btrfs 支持。有些人认为它还不够成熟,无法用于生产,而也有早期采用者使用这个潜在的 ext4 继任者。鼓励用户阅读 文件系统文章了解更多信息。

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

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

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

为了性能,还有另外两个要求:

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

如今,大多数 Linux 安装程序都会自动执行第一个操作。如果以“-cu”标志启动,fdisk 还将在 1024KB 边界处创建分区。

对于 Btrfs 来说,第二个是自动的,但对于 Ext4,这是通过在“/etc/fstab”文件中每个 Ext4 分区的挂载选项列表中添加“discard”来手动完成的。有关更多详细信息,请参阅如何

在我看来,Ext4 的 fstab 需要稍微调整一下,这并不是不使用这个成熟而优秀的文件系统的理由。

答案4

我认为是 BTRFS。Ubuntu 8.04 及更高版本包含支持 GPT 的 GRUB 版本。使用 GPT 和 Gdisk,它将为您对齐分区。不过我相信 fdisk 也能做到这一点。

无论如何,这里是在 BTRFS 文件系统上安装 Ubuntu 的链接。

http://www.linuxbsdos.com/2011/05/05/how-to-install-ubuntu-11-04-on-a-btrfs-file-system/

希望有所帮助。

相关内容