Linux、SSD、BTRFS 和 Trim

Aug*_*nte 5 ssd trim btrfs

我正在运行 Linux 系统(基于 Gentoo),并在 SSD(具有 480GB 网络的东芝 Q300)上安装了 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
Run Code Online (Sandbox Code Playgroud)

之前,我有一个带有 XFS 文件系统的 240GB 网络的 Intel SSD。当我fstrim -v /为那个 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
Run Code Online (Sandbox Code Playgroud)

当我启动fstrim命令时,我收到以下结果:

*****************************************
# fstrim -v /mnt/rootfs/@
  177,3 GiB (190331097088 Bytes) getrimmt
*****************************************
Run Code Online (Sandbox Code Playgroud)

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

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

而且,你知道一个(非常)好的教程/网站或类似的,它解释了 BTRFS,包括子卷是如何工作的,元数据呢?

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

而且,在修剪时或经常修剪时对SSD有害吗?

Ger*_*mia 5

来自 BTRFS 维基常见问题解答:

\n\n
\n

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

\n\n

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

\n
\n\n

我发现您没有安装-o ssd. 也许您btrfs-progs没有将其检测为 SSD。(它检查是否/sys/block/sdX/queue/rotational为 0。)

\n\n

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

\n\n

fstrim说:

\n\n
\n

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

\n
\n\n

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

\n\n
\n

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

\n
\n\n

也许这与ssd_spread不开机有关,这样您就会拥有更大、碎片更少的可用空间:

\n\n
\n

ssd_spread \n 挂载-o ssd_spread对于查找磁盘上较大的未使用区域进行新分配更为严格,随着时间的推移,这往往会导致可用空间碎片增多。在较便宜的 SSD 设备上通常速度更快。

\n
\n\n

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

\n\n
\n

fstrim 不适用于 BTRFS 吗?

\n
\n\n

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

\n\n
\n

而且,您知道一个(非常)好的教程/网站或类似的教程/网站,它解释了 BTRFS,包括子卷如何工作,元数据怎么样?

\n
\n\n

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

\n\n

btrfs -subvolume 联机帮助页很好。系统管理指南的子卷部分也是如此。btrfsQuota.py是一个用于理解快照/子卷和元数据大小的简洁脚本。

\n\n
\n

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

\n
\n\n

最新的是4.5.3版本

\n\n
\n

如果有德语就太好了...

\n
\n\n

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

\n\n

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

\n\n\n