对 btrfs 的吐槽

刚把本来给/home/var用的 btrfs 换回 ext4,po 一发记(tu)录(cao)一下。

一开始换 btrfs 呢,是感觉这个文件系统各种功能、各种酷炫啊,比如subvolume, snapshot什么的。我主要看中的其实是他的透明压缩,不仅节省硬盘空间,还能提高io的速率,这对我 5400转的 500G 硬盘还是有点作用的。不过当时年少不懂事,不知道有C这个文件属性,直接在/etc/fstab里用了全局压缩选项,结果导致虚拟机这种从单文件随机读取数据的场景速度慢到可怕。

有一个日常使用经常遇到的问题,不知道是不是和这个压缩的功能有关。跨文件系统(具体好像是btrfs<->{fat32,ntfs})cp或者mv的时候,非常有可能会在读写进行到最后的时候 hang 住,怎么kill都终止不了 io 进程。这个时候如果ps看一下,会发现 io 进程陷入了disk_sleep的状态。这时候只好直接拔 USB 储存才行。

还有就是大家都在说的 btrfs 会丢失文件的问题。虽然我只遇到过一次,时间是在刚换 btrfs 之后没几天,有一个目录里面的有些文件莫名其妙就不见了,我当时很肯定是没有动这个目录的文件的,所以这件事就让我对 btrfs 的印象变得不是那么好了。

subvolume, snapshot虽然很酷,但是平时基本也没有不会用到太多。

subvolume可以实现一个分区挂载到多个目录,这样就省去了分区的麻烦。但是硬盘里面的东西多了以后,挂载一个subvolume的速度会变得非常慢。在我换回 ext4 之前,挂载一个subvolume的时间平均是 5s, 一次开机就让挂载卡去了 15s, 实在是非常不划算。而且这也不是没有替代方案。比如我现在就是把/var/home放在一个分区,开机后挂载整个分区,然后用bind的方式挂载到根目录的具体位置上。

至于snapshot,用到它的就是我每两天一次的全盘备份和 docker 了。这还确实有点用处,不过用了半年,需要用到备份的时间也就一两次,docker 有没有 btrfs 其实也没什么区别。

所以呢,总的来说, btrfs 的问题还是有点多,一些有意思的功能日常也起不到必不可少的作用。想入 btrfs 坑的还是再观望一段时间吧,已经入 btrfs 坑的话我只能祝你好运了。