Linux、SSD、BTRFS 和 Trim

Linux、SSD、BTRFS 和 Trim

我正在运行 Linux 系统(基于 Gentoo),并在 SSD(东芝 Q300,480GB 网卡)上安装了 BTRFS 文件系统。我的/etc/fstab系统如下:

UUID=14cb9b65-... swap           swap    defaults,noatime, 0       0                                                                                                                                                                                                                           
UUID=cd7d93b3-... /              btrfs   defaults,cache,compress=lzo,subvol=@ 0       1                                                                                                                                                                                          
UUID=cd7d93b3-... /home          btrfs   defaults,noatime,space_cache,compress=lzo,subvol=@home 0       2                                                                                                                                                                                      
UUID=cd7d93b3-... /Data          btrfs   defaults,noatime,space_cache,compress=lzo,subvol=@Data 0       2                                                                                                                                                                                     
UUID=cd7d93b3-... /mnt/rootfs    btrfs   defaults,noatime,space_cache,compress=lzo 0       0                                                                                                                                                                                                   
tmpfs             /tmp           tmpfs   defaults,noatime,mode=1777 0       0                                                                                                                                                                                                                   tmpfs             /proc          proc    defaults                   0       0                                                                                                                                                                                                              
tmpfs             /var/log       tmpfs   defaults,noatime,rw,mode=1777 0    0
tmpfs             /var/tmp       tmpfs   defaults,noatime,rw,mode=1777 0    0                                                                                                                                                                                                              
tmpfs             /var/run        tmpfs   defaults,noatime             0    0 
tmpfs             /var/spool      tmpfs   defaults,noatime             0    0 
tmpfs             /var/lock       tmpfs   defaults,noatime             0    0 
tmpfs             /var/cache      tmpfs   defaults,noatime             0    0
tmpfs             /run            tmpfs   defaults,noatime             0    0
sysfs             /sys            sysfs   defaults                     0    0
tmpfs             /dev/shm        tmpfs   defaults                     0    0
devpts            /dev/pts        devpts  gid=5,mode=620               0    0
devtmpfs          /dev            devtmpfs gid=5,mode=620              0    0

之前,我有一个 240GB 容量的 Intel SSD fstrim -v /,带有 XFS 文件系统。当我每天执行该 XFS 系统时,我收到如下消息:

节省了 8 GB。

现在,在 480GByte Toshiba SSD 的顶层,我有几个子卷,例如:

# btrfs subvolume list /mnt/rootfs
ID 264 gen 273 top level 5 path @_original_install
ID 265 gen 152 top level 5 path @home_install_ok
ID 266 gen 270 top level 5 path @_snapshot_install_ok             
ID 267 gen 28504 top level 5 path @       
ID 275 gen 28504 top level 5 path @home
ID 276 gen 26900 top level 5 path @Data
ID 607 gen 245 top level 5 path @_snapshot_home_20160330
ID 628 gen 3837 top level 5 path @_root_snapshot_20160402

当我启动fstrim命令时,我收到了这个结果:

*****************************************
# fstrim -v /mnt/rootfs/@
  177,3 GiB (190331097088 Bytes) getrimmt
*****************************************

为什么修剪空间量为 177 GiB,而不是像我的旧 XFS 格式的 240 GB SSD 那样只有 8 或 10?

在第一次修剪后再次修剪我的 480GB 东芝 SSD 后,结果几乎相同,现在修剪了 172 GiB。那么:不适fstrim用于 BTRFS?

并且,您是否知道一个(非常)好的教程/网站或类似内容,可以解释 BTRFS,包括子卷如何工作、元数据如何?

有关最新 btrfs-progs(我使用 4.4.1 版)的信息越多越好。如果有德语版本就更好了……

而且修剪或者经常修剪会损害SSD吗?

答案1

来自 BTRFS Wiki 常见问题解答:

Btrfs 是否针对 SSD 进行了优化?

SSD 驱动器有一些优化,您可以通过使用 -o ssd 进行安装来启用它们。从 2.6.31-rc1 开始,如果 Btrfs 能够检测到非旋转存储,则将启用此安装选项。SSD 将成为未来存储的重要组成部分,Btrfs 开发人员计划对其进行大量调整。请注意-o ssd 不会启用 TRIM/discard

我看到您没有使用 进行安装-o ssd。也许您btrfs-progs没有将其检测为 SSD。(它会检查是否/sys/block/sdX/queue/rotational为 0。)

-o ssd不会启用 TRIM/丢弃” 可能是因为过多的覆盖会使 SSD 驱动器磨损得更快。

手册fstrim页上说:

频繁运行fstrim,甚至使用mount -o discard[永久启用 TRIM],可能会对质量较差的 SSD 设备的使用寿命产生负面影响。对于大多数台式机和服务器系统,每周一次修剪频率就足够了。请注意,并非所有设备都支持排队修剪,因此每个修剪命令都会对当时可能尝试使用磁盘的其他设备造成性能损失。

此外,BTRFS 的CoW(写时复制)对 SSD 有利,可以最大限度地减少不必要的覆盖,因此 TRIM 对于 BTRFS 来说并不是那么必要。SSD 上的非 CoW 文件系统需要TRIM 已打开。

为什么修剪空间量为 177 GiB,而不是像我的旧 XFS 格式的 240 GB SSD 那样只有 8 或 10?

也许这与没有开启有关ssd_spread,因此您会拥有更大,更少碎片的可用空间:

ssd_spread-o ssd_扩展对于寻找磁盘上未使用的大片区域进行新分配更为严格,随着时间的推移,这往往会使可用空间更加碎片化。在较便宜的 SSD 设备上,它通常速度更快。

由于您的 Toshiba Q300 是低端 SSD,因此您应该打开ssd_spread安装选项。

fstrim 不适用于 BTRFS 吗?

确实如此。BTRFS 挂载选项页面说“您可以fstrim定期运行命令。”

并且,您是否知道一个(非常)好的教程/网站或类似内容,可以解释 BTRFS,包括子卷如何工作、元数据如何?

这是最好的 BTRFS 资源:https://btrfs.wiki.kernel.org/

btrfs-子卷手册页很好。Sysadmin 指南的子卷部分btrfsQuota.py是一个用于了解快照/子卷和元数据大小的简洁脚本。

有关最新 btrfs-progs(我使用 4.4.1 版本)的信息越多越好。

最新版本4.5.3

如果是德语的话就更好了...

我强烈推荐btrbk利用 BTRFS 进行自动备份和快照的 Perl 脚本。它真正展示了 BTRFS 的强大功能。作者阿克塞尔·布里来自瑞士苏黎世,根据他的名字是德国的,他可能也懂德语;也许他可以给你推荐一些德国的 BTRFS 资源。

此外,在 WorldCat 上进行搜索,这本书提到了 BTRFS,但它有点过时了(2011):

答案2

使用 udev 将您的 ssd 设置为非旋转驱动器。

编辑/添加一个名为 10-ssd.rules (或其他)的文件到 /etc/udev/rules.d/ 并插入类似如下的行

ACTION=="add|change", KERNEL=="sd[az]", ATTR{queue/rotational}=="0", ATTR{queue/scheduler}="mq-deadline" (这会将我的 ssd 的 ioscheduler 设置为 mq-deadline,你的 ioscheduler 将会像这样

ACTION=="add|change", KERNEL=="sda", ATTR{queue/rotational}=="0"(其中 sda 是您的 ssd,不知道您是否可以使用 UIDS,请查看手册以了解正确的设置,如果您的内核支持,您也可以添加 ATTR{queue/scheduler}="mq-deadline",因为它对于 ssds 和 mq 来说速度更快,并且现在可以按设备选择正常的 ioschedulers)

我会在 fstab 中使用类似 rw,lazytime,compress=zstd,ssd,space_cache=v2 的内容,显然是为了调整你的子卷配置。

如果重启后一切正常,则 cat /sys/block/sda/queue/rotational 应该显示 0,cat /sys/block/sda/queue/scheduler 应该显示 mq-deadline。

此后,fstrim -va 应该可以在驱动器上工作。您不应该一直发出丢弃,因此最好添加一个 systemd 计时器,每隔一段时间运行 fstrim。

答案3

BTRFS 有一个很多就扇区写入而言,开销比 XFS 和 EXT2/3/4 更高。我编写了一些脚本来测试这一点,你可以获取它们这里并亲眼看看。

在我的脚本中的大多数测试中,BTRFS 的写入速度比 XFS 多 11 倍(比 EXT4 多 48 倍)。这很可能是由于 BTRFS 的“写入时复制”工作方式。

与 XFS 相比,您会看到修剪的字节数增加了 22 倍,而不是 11 倍,但请记住,我的数字只是测试,您看到的是实际使用情况。

我的建议是让 BTRFS 远离 SSD,或者,如果您需要/想要 BTRFS 功能,请继续关注 SSD 上的“磨损” SMART 属性,并准备尽快更换它。

相关内容