标签 SSD 下的文章

这个新的系统服务可以使你的生活更轻松。

在过去的十年中,固态驱动器(SSD)带来了一种管理存储的新方法。与上一代的转盘产品相比,SSD 具有无声、更冷却的操作和更快的接口规格等优点。当然,新技术带来了新的维护和管理方法。SSD 具有一种称为 TRIM 的功能。从本质上讲,这是一种用于回收设备上未使用的块的方法,该块可能先前已被写入,但不再包含有效数据,因此可以返回到通用存储池以供重用。Opensource.com 的 Don Watkins 首先在其 2017 年的文章《Linux 固态驱动器:为 SSD 启用 TRIM》中介绍过 TRIM 的内容。

如果你一直在 Linux 系统上使用此功能,则你可能熟悉下面描述的两种方法。

老的方式

丢弃选项

我最初使用 mount 命令的 discard 选项启用了此功能。每个文件系统的配置都放在 /etc/fstab 文件中。

# cat /etc/fstab
UUID=3453g54-6628-2346-8123435f  /home  xfs  defaults,discard   0 0

丢弃选项可启用自动的在线 TRIM。由于可能会对性能造成负面影响,最近关于这是否是最佳方法一直存在争议。使用此选项会在每次将新数据写入驱动器时启动 TRIM。这可能会引入其他磁盘活动,从而影响存储性能。

Cron 作业

我从 fstab 文件中删除了丢弃选项。然后,我创建了一个 cron 作业来按计划调用该命令。

# crontab -l
@midnight /usr/bin/trim

这是我最近在 Ubuntu Linux 系统上使用的方法,直到我了解到另一种方法。

一个新的 TRIM 服务

我最近发现有一个用于 TRIM 的 systemd 服务。Fedora 在版本 30 中将其引入,尽管默认情况下在版本 30 和 31 中未启用它,但计划在版本 32 中使用它。如果你使用的是 Fedora 工作站 31,并且你想要开始使用此功能,可以非常轻松地启用它。我还将在下面向你展示如何对其进行测试。该服务并非 Fedora 独有的服务。它是否存在及其地位将因发行版而异。

测试

我喜欢先进行测试,以更好地了解幕后情况。我通过打开终端并发出配置服务调用的命令来执行此操作。

/usr/sbin/fstrim --fstab --verbose --quiet

fstrim-help 参数将描述这些信息和其他参数。

$ sudo /usr/sbin/fstrim --help

Usage:
 fstrim [options] <mount point>

Discard unused blocks on a mounted filesystem.

Options:
 -a, --all           trim all supported mounted filesystems
 -A, --fstab         trim all supported mounted filesystems from /etc/fstab
 -o, --offset <num>  the offset in bytes to start discarding from
 -l, --length <num>  the number of bytes to discard
 -m, --minimum <num> the minimum extent length to discard
 -v, --verbose       print number of discarded bytes
     --quiet         suppress error messages
 -n, --dry-run       does everything, but trim

 -h, --help          display this help
 -V, --version       display version

因此,现在我可以看到这个 systemd 服务已配置为在我的 /etc/fstab 文件中的所有受支持的挂载文件系统上运行该修剪操作(-fstab),并打印出所丢弃的字节数(-verbose),但是抑制了任何可能会发生的错误消息(–quiet)。了解这些选项对测试很有帮助。例如,我可以从最安全的方法开始,即空运行。我还将去掉 -quiet 参数,以便确定驱动器设置是否发生任何错误。

$ sudo /usr/sbin/fstrim --fstab --verbose --dry-run

这就会显示 fstrim 命令根据在 /etc/fstab 文件中找到的文件系统要执行的操作。

$ sudo /usr/sbin/fstrim --fstab --verbose

现在,这会将 TRIM 操作发送到驱动器,并报告每个文件系统中丢弃的字节数。以下是我最近在新的 NVME SSD 上全新安装 Fedora 之后的示例。

/home: 291.5 GiB (313011310592 bytes) trimmed on /dev/mapper/wkst-home
/boot/efi: 579.2 MiB (607301632 bytes) trimmed on /dev/nvme0n1p1
/boot: 787.5 MiB (825778176 bytes) trimmed on /dev/nvme0n1p2
/: 60.7 GiB (65154805760 bytes) trimmed on /dev/mapper/wkst-root

启用

Fedora Linux 实现了一个计划每周运行它的 systemd 计时器服务。要检查其是否存在及当前状态,请运行 systemctl status

$ sudo systemctl status fstrim.timer

现在,启用该服务。

$ sudo systemctl enable fstrim.timer

验证

然后,你可以通过列出所有计时器来验证该计时器是否已启用。

$ sudo systemctl list-timers --all

会显示出下列行,表明 fstrim.timer 存在。注意,该计时器实际上激活了 fstrim.service 服务。这是实际调用 fstrim 的地方。与时间相关的字段显示为 n/a,因为该服务已启用且尚未运行。

NEXT   LEFT    LAST   PASSED   UNIT           ACTIVATES
n/a    n/a     n/a    n/a      fstrim.timer   fstrim.service

结论

该服务似乎是在驱动器上运行 TRIM 的最佳方法。这比必须创建自己的 crontab 条目来调用 fstrim 命令要简单得多。不必编辑 fstab 文件也更安全。观察固态存储技术的发展很有趣,并且我很高兴看到 Linux 似乎正在朝着标准且安全的方向实现它。

在本文中,学习了固态驱动器与传统硬盘驱动器有何不同以及它的含义…


via: https://opensource.com/article/20/2/trim-solid-state-storage-linux

作者:Alan Formy-Duval 选题:lujun9972 译者:wxy 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

如果你还没注意到,一些极速的固态磁盘技术已经可以用在 Linux 和其他操作系统上了。

Sandra Henry-Stocker

NVMe 意即 非易失性内存主机控制器接口规范 non-volatile memory express ,它是一个主机控制器接口和存储协议,用于加速企业和客户端系统以及固态驱动器(SSD)之间的数据传输。它通过电脑的高速 PCIe 总线工作。每当我看到这些名词时,我的感受是“羡慕”。而羡慕的原因很重要。

使用 NVMe,数据传输的速度比旋转磁盘快很多。事实上,NVMe 驱动能够比 SATA SSD 快 7 倍。这比我们今天很多人用的固态硬盘快了 7 倍多。这意味着,如果你用一个 NVMe 驱动盘作为启动盘,你的系统能够启动的非常快。事实上,如今任何人买一个新的系统可能都不会考虑那些没有自带 NVMe 的,不管是服务器或者个人电脑。

NVMe 在 Linux 下能工作吗?

是的!NVMe 自 Linux 内核 3.3 版本就支持了。然而,要升级系统,通常同时需要一个 NVMe 控制器和一个 NVMe 磁盘。一些外置磁盘也行,但是要连接到系统上,需要的可不仅仅是通用的 USB 接口。

先使用下列命令检查内核版本:

$ uname -r
5.0.0-15-generic

如果你的系统已经用了 NVMe,你将看到一个设备(例如,/dev/nvme0),但是只有在你安装了 NVMe 控制器的情况下才显示。如果你没有 NVMe 控制器,你可以用下列命令获取使用 NVMe 的相关信息。

$ modinfo nvme | head -6
filename:       /lib/modules/5.0.0-15-generic/kernel/drivers/nvme/host/nvme.ko
version:        1.0
license:        GPL
author:         Matthew Wilcox <[email protected]>
srcversion:     AA383008D5D5895C2E60523
alias:          pci:v0000106Bd00002003sv*sd*bc*sc*i*

了解更多

如果你想了解极速的 NVMe 存储的更多细节,可在 PCWorld 获取。

规范、白皮书和其他资源可在 NVMexpress.org 获取。


via: https://www.networkworld.com/article/3397006/nvme-on-linux.html

作者:Sandra Henry-Stocker 选题:lujun9972 译者:warmfrog 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

当我在运行 Linux 的计算机上安装我的第一块固态驱动器(SSD)后,我开始探索如何用好它们。SSD 在操作方式上与传统磁性驱动器不同,并且它们需要在软件上另行处理以达到功能优化。

在传统磁盘驱动器上,删除时所删除的文件不会从磁盘中完全删除。这就是为什么你可以恢复已删除的文件的原因。基本上,文件系统仅引用磁盘上文件的位置,并且当文件被删除时,该引用被擦除,以允许你在这些空间中写入新数据覆盖原来的数据。然而,对于 SSD,新数据只能写在驱动器上完全新的或已擦除的单元上。因为必须在写入之前清除空间,如果在写入文件时尚未有足够的可用空间,则必须首先擦除该空间。这可能会对性能产生负面影响。

如果操作系统在写入新数据之前就擦除了未使用的空间,而不是在写入时同时进行擦除,则可以提高文件保存性能。这种做法就是 TRIM)。 TRIM 命令本质上允许你的操作系统告诉驱动器哪些区域的数据不再使用,以便擦除它们,加快驱动器将来的写入,可以 SSD 的用户提供更佳的体验。

在 Linux 中,fstrim 提供此功能,它可以为写入新数据而准备驱动器,并延长驱动器的使用寿命。由于在我使用的 Linux 发行版上 SSD 的 trim 不是自动的,所以必须去调度该操作,否则 SSD 的性能会随着时间的推移而降低。

为了在驱动器上运行 fstrim,驱动器本身以及其上的文件系统必须支持 TRIM。在文件系统挂载过程中可以启用 TRIM。例如,为了将设备 /dev/sda2 启用 TRIM 挂载到 /mnt,你要运行:

mount -t ext4 -o discard /dev/sda2 /mnt

一旦启用,TRIM 过程本身就相当简单。TRIM SSD 也可以在命令行或 cron 任务中手动完成。作为超级用户(使用 susudo),运行 fstrim / -v 以完成手动 trim,或者设置 cron 任务以在计算机未使用时定期为你运行此命令。对于 fstrim 的完整选项列表请参考它的 man 手册

硬件支持根据使用的驱动器接口类型如 PCI、ATA#ATA)、SCSI#SCSI) 还是 SD/MMC#SD.2FMMC) 而有所不同。你需要咨询你的 Linux 供应商以了解你的特定发行版是如何支持 TRIM 的。

例如,红帽提供以下 SSD 磁盘指南。“性能随着所使用的块数接近磁盘容量而降低,性能影响程度因供应商而异,但是所有设备都会遇到一些性能降低。为了解决性能降低问题,主机系统(例如 Linux 内核)使用丢弃请求以通知存储器给定范围的块不再使用。”

Debian wiki 提供了 SSD 使用的一些基本注意事项:使用 Linux 3.2 或更高版本内核,使用 SSD 的最新固件,使用 EXT4 文件系统,并且“在正常工作负载下有足够的 DRAM 用来操作而不用使用交换空间“。


作者简介:

Don Watkins - 教育家、教育技术专家、企业家、开源倡导者。教育心理学硕士、教育领导硕士、Linux 系统管理员、CCNA、使用 Virtual Box 虚拟化。关注我 @Don\_Watkins。


via: https://opensource.com/article/17/1/solid-state-drives-linux-enabling-trim-ssds

作者:Don Watkins 译者:geekpi 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

优化挂载参数

在 Linux 中挂载 SSD 上的 btrfs,可以采用各种参数进行优化:

# <file system> <mount point>   <type>  <options>  <dump>  <pass>
UUID=<略>  /  btrfs defaults,ssd,discard,noatime,compress=lzo,subvol=@ 0   1

这些参数各有优缺点,酌情添加。

ssd

btrfs 文件系统有对 SSD 进行优化,在挂载参数中加入 ssd 即可。该参数不会自动启用 TRIM/discard。

discard

可以通过以下命令确认 SSD 是否支持 TRIM

sudo hdparm -I /dev/sdX | grep TRIM
   * Data Set Management TRIM supported (limit 8 blocks)

若 SSD 支持 TRIM 命令,可以在 /etc/fstab 中启用 discard 参数。建议将 discard 挂载参数作为首选。据 debian wiki 所述,包括三星,镁光,英睿达在内的一些 SSD 在 discard/TRIM 上有问题,不能合适地处理 TRIM 命令。以下是 linux 内核相关处源代码 (2015/10/15):

/* devices that don't properly handle queued TRIM commands */
{ "Micron_M500_*",      NULL,    ATA_HORKAGE_NO_NCQ_TRIM |
                                 ATA_HORKAGE_ZERO_AFTER_TRIM, },
{ "Crucial_CT*M500*",   NULL,    ATA_HORKAGE_NO_NCQ_TRIM |
                                 ATA_HORKAGE_ZERO_AFTER_TRIM, },
{ "Micron_M5[15]0_*","  MU01",   ATA_HORKAGE_NO_NCQ_TRIM |
                                 ATA_HORKAGE_ZERO_AFTER_TRIM, },
{ "Crucial_CT*M550*",   "MU01",  ATA_HORKAGE_NO_NCQ_TRIM |
                                 ATA_HORKAGE_ZERO_AFTER_TRIM, },
{ "Crucial_CT*MX100*",  "MU01",  ATA_HORKAGE_NO_NCQ_TRIM |
                                 ATA_HORKAGE_ZERO_AFTER_TRIM, },
{ "Samsung SSD 8*",     NULL,    ATA_HORKAGE_NO_NCQ_TRIM |
                                 ATA_HORKAGE_ZERO_AFTER_TRIM, },
{ "FCCT*M500*",         NULL,    ATA_HORKAGE_NO_NCQ_TRIM |
                                 ATA_HORKAGE_ZERO_AFTER_TRIM, },

/* devices that don't properly handle TRIM commands */
{ "SuperSSpeed S238*",      NULL,   ATA_HORKAGE_NOTRIM, },

该参数不是必需的,也可以自定义周期性运行 fstrim 命令来取代该参数,使用该命令前要确认 SSD 支持 TRIM,否则可能造成数据丢失。当 SSD 有足够的空余空间或(未分配的)可用空间时不需要该参数。

noatime

挂载参数可以加入 noatime,通过禁止更新访问记录来减少不必要的写操作以提高性能。该选项对 HDD 同样有性能提升。btrfs 的默认配置为 relatime

compress

打开压缩功能在通常情况下有利于提高传输性能(并非绝对),也可以节省存储空间。加入以下挂载参数:

compress=lzo
或
compress=zlib

lzo 速度更快,zlib 压缩率更高。注意确认 SSD 主控是否是非压缩主控,若为压缩主控不建议加入该参数。

写缓存

若 SSD 带有缓存,启用 Write Cache 可以提高性能:Disks -> Drive Setting -> Enable Write Cache,但在突然断电的情况下可能造成数据丢失。

I/O 调度

SSD 结构不同于传统硬盘,寻址时间短,I/O 调度算法可选择 noop 以降低延迟。以下命令可查看与修改调度器:

cat /sys/block/sdX/queue/scheduler  # sdX 指你的设备
sudo tee /sys/block/sdX/queue/scheduler <<< noop

注意以上方法并不持久,重启后会重置。如果 SSD 是系统唯一的存储设备,可考虑通过 elevator=noop 内核参数设置 I/O 调度器。也可使用 udev 规则来修改调度器,对多存储设备同样有效:

/etc/udev/rules.d/60-ssd-scheduler.rules # 创建该文件

文件内容如下:

# set deadline scheduler for non-rotating disks
ACTION=="add|change", KERNEL=="sd[a-z]", ATTR{queue/rotational}=="0", ATTR{queue/scheduler}="noop"

参考:

  1. 关于在SSD上使用btrfs文件系统需要做的优化 - akarin.cn
  2. Solid State Drives - Arch wiki)
  3. SSD Optimization - debian wiki
  4. Btrfs wiki