Zapic's Blog
Btrfs Swapfile 踩坑指南

#0 一不小心内存就不够了

当初装系统时不知道脑子抽了还是咋地,特意倒回去把Swapfile禁用掉了,然后又脑子抽了选了个Btrfs.
今天内存意外的耗尽了,整个系统假死,键盘敲碎了都没动静,于是决定启用Swap.

以下是标准剧情:

$ sudo dd if=/dev/zero of=/swapfile bs=1M count=4096
$ sudo mkswap /swapfile
$ sudo chmod 600 /swapfile
$ sudo swapon /swapfile

结果万万没想到:

swapon: swapfile: swapon failed: Invalid argument

我:?

#1 再来一次...什么不支持?

于是不信邪的我再来了一次:

$ sudo rm /swapfile
$ sudo dd if=/dev/zero of=/swapfile bs=1M count=4096
$ sudo mkswap /swapfile
$ sudo chmod 600 /swapfile
$ sudo swapon /swapfile

嗯...

swapon: swapfile: swapon failed: Invalid argument

于是搜索了一下.
嗯...btrfs不支持swapfile...完全明白了...
个鬼啊!给我支持啊baka!

#2 实际上...是支持的...

感谢Arch wiki,虽然不用你家的系统,但是你家wiki是真的香

仔细翻阅Arch Wiki,从Kernel5.0+开始,内核提供了对Btrfs的Swapfile支持,Wiki内指出了一条在Btrfs启用Swapfile的指南:
首先创建一个0 byte的文件,并设置No_COW属性,同时禁用压缩:

# truncate -s 0 /swapfile
# chattr +C /swapfile
# btrfs property set /swapfile compression none

再利用dd将文件扩容到想要的大小:

# dd if=/dev/zero of=/swapfile bs=1M count=4096

一套带走:

# mkswap /swapfile
# swapon /swapfile

在Ubuntu 20中,swapon貌似会自动将swapfile加入fstab里自动挂载,因此无需手动添加.

于是,一块在Btrfs上的swap就开好了.

#3 记住...

以后不要乱选文件系统.
好奇坑死猫.
你以为只是加强版ext4,实际上是加墙版ext4.

还没有博客的屑
2021-11-12 15:23还没有博客的屑
2021-11-12 15:23

其实btrfs还是挺好的吧,分区快照,可灵活扩容,mint上自带的timeshift可以使用btrfs的快照功能实现根文件系统自动备份,有时可以把搞炸的系统恢复

访客