[Share Experiences] Deepin系统在btrfs分区下采用交换文件swapfile代替交换分区
Tofloor
poster avatar
AMZ
deepin
2024-04-03 21:15
Author

挂载父卷

sudo mount /dev/sda2 /mnt

创建swap子卷

sudo btrfs subvolume create /mnt/swap

在swap子卷下创建一个0 byte大小的交换文件

sudo truncate -s 0 /mnt/swap/swapfile

配置交换文件权限

sudo chmod 600 /mnt/swap/swapfile
配置交换文件属性,具有'C'属性集的文件将不受 copy-on-write 的约束。
注意:对于btrfs,“C”标志应该是设置新的或空文件。

sudo chattr +C /mnt/swap/swapfile

配置btrfs禁止压缩交换文件

sudo btrfs property set /mnt/swap/swapfile compression none

将交换文件填充至需要的大小

sudo dd if=/dev/zero of=/swap/swapfile bs=1M count=2048

约束交换文件大小

sudo fallocate /mnt/swap/swapfile -l8G #注意这里是字母L小写跟着文件大小

格式化交换文件

sudo mkswap /mnt/swap/swapfile

启用交换文件

sudo swapon /mnt/swap/swapfile

编辑 /etc/fstab 自动挂载,添加或编辑以下行:
全部贴出来是为了对照你们自己的fstab

第一行挂载系统根目录到subvolid=256这个子卷

UUID=ab65fb1c-e037-40c4-a1bf-34a456efae91 / btrfs subvolid=256,ssd,rw,relatime 0 1

第二行挂载系efi分区

UUID=0A87-B2A1 /boot/efi vfat rw,relatime,fmask=0022,dmask=0022,codepage=437,iocharset=iso8859-1,shortname=mixed,utf8,errors=remount-ro 0 2

第三行学习deepin全盘安装的特性,创建一个数据子卷,同时挂载到根目录下的data,最新版家庭版的安卓数据也是放在/data的,二次挂载的不同之处我只把root和home放在data里,而没有加入opt、var

UUID=ab65fb1c-e037-40c4-a1bf-34a456efae91 /data btrfs subvolid=257,ssd,rw,relatime 0 2
/data/home /home none defaults,bind 0 0
/data/root /root none defaults,bind 0 0

第四行先把swap这个子卷挂载到根目录下的/swap目录,再把/swap/swapfile里面这个文件二次挂载到swap,也就是原来的交换分区

UUID=ab65fb1c-e037-40c4-a1bf-34a456efae91 /swap btrfs subvolid=272 0 0
/swap/swapfile none swap sw 0 0

使用btrfs分区的特点UUID和父卷一致,所以1、3、4行UUID一样,不同点在于后面的参数subvolid=256将其指向了对应的子卷

看一下双分区deepin运行的成果吧!

注意:需要指出的是,由于systemd低版本组件无法和btrfs文件系统下交换文件进行交互,目前deepin这样做无法实现休眠功能,交换文件也就失去价值了,静待支持!

Reply Favorite View the author
All Replies
花雨落逝
Moderator
2024-04-04 00:09
#1

学习了

like

Reply View the author
阿尼樱奈奈
Moderator
2024-04-04 00:52
#2

like

Reply View the author
铁山老道孔乙己
deepin
2024-04-04 05:52
#3

挂载选项里的 ssd,是针对固态硬盘的优化吗?还是仅对 btrfs 的选项?

Reply View the author
AMZ
deepin
2024-04-04 08:13
#4
铁山老道孔乙己

挂载选项里的 ssd,是针对固态硬盘的优化吗?还是仅对 btrfs 的选项?

都是,不过ssd现在不需要加了,默认优化

Reply View the author
忘记、过去
deepin
2024-04-04 11:34
#5

btrfs 里的 swapfile 是支持休眠的,我这里在 20.9 和 23 上都成功了,主要是 btrfs 的文件偏移量不好算(需要高版本的 btrfs-progs (>= 6.2) 提供命令行工具支持)

可以参考 Power management/Suspend and hibernate - ArchWiki (archlinux.org) 自行修改 grub 启动参数实现休眠

Reply View the author