在启用 timeshift 的 btrfs 文件系统上扩展 Swap 文件
想让 swapfile 变大一些?环境很复杂?不会太难的,我们一步步来。
搜索
根据我的环境,在搜索引擎搜索 swapfile 分配或扩展相关内容,可得:
- Manjaro Linux:
Manjaro 上管理 Swap; - btrfs:
挂载子卷、在 btrfs 上创建交换文件; - timeshift:
关于 timeshift 和 swap 的恩怨问题。
分析
稍微分析一下:
- 因为配置了 timeshift,swapfile 不应该放在根目录子卷(
/@/swap/swapfile),而是应该创建一个 swap 子卷来存放 swapfile(/@swap/swapfile)以防止 timeshift 在备份根目录子卷时把 swapfile 也备份进去了。 - Linux 发行版在开机时根据
/etc/fstab配置的内容挂载分区,我最好在取消挂载 swapfile 或本操作系统未运行时对文件系统修改以避免对正在运行的操作系统产生未知的影响。
执行
重启到 live 系统:
我使用 Ventoy 启动了硬盘中的 Manjaro Linux 安装镜像;初始化挂载环境:
- 确保
/mnt为空且未挂载任何分区:
执行:sudo findmnt -R /mnt,如果不为空,逐个手动取消挂载; - 创建临时文件夹:
执行:sudo mkdir /mnt/volume && sudo mkdir /mnt/subvolume;
- 确保
获取对应根目录的分区设备文件名:
执行:sudo fdisk -l,得到如/dev/sda2或/dev/nvme0n1p2,这里以/dev/nvme0n1p3为例;挂载分区:
执行:sudo mount /dev/nvme0n1p3 /mnt/volume;获取子卷 ID:
执行:sudo btrfs subvolume list /mnt/volume:ID 256 gen 272550 top level 5 path @ ID 257 gen 272550 top level 5 path @home ID 258 gen 272528 top level 5 path @cache ID 259 gen 272550 top level 5 path @log ID 260 gen 260974 top level 5 path @swap ……可见子卷
@swapID 为260,可跳至第 7 步。若无
@swap子卷,跳至第 6 步;创建子卷:
执行:sudo btrfs subvolume create /mnt/volume/@swap;
创建完成后跳至第 5 步;挂载子卷:
执行:sudo mount -o subvolid=260 /dev/nvme0n1p3 /mnt/subvolume;删除原有 swapfile:
执行:sudo rm /mnt/subvolume/swapfile;创建新的 swapfile,替换
48g为其他您想要的容量:
执行:sudo btrfs filesystem mkswapfile --size 48g --uuid clear /mnt/subvolume/swapfile;配置 swapfile 自动挂载:
编辑/etc/fstab:sudo nano /mnt/volume/@/etc/fstab;
加上以下这两行保存退出(如果已有,就不用加):UUID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx /swap btrfs subvol=/@swap,defaults,noatime 0 0 /swap/swapfile swap swap defaults 0 0xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx需替换为根目录/前的 UUID 值;清理并重启:
执行:sudo umount /mnt/subvolume && sudo umount /mnt/volume && sudo shutdown -r now。
检查
swapon
NAME TYPE SIZE USED PRIO
/swap/swapfile file 48G 0B -2