简体中文
cover

效果预览

之前的方案

通过之前写的文章:如何在安装 Debian 时配置 Btrfs 子卷 | 详细分步指南

对安装好的 Debian sid 做了如下分区方案

├─nvme0n1p1 259:1    487M  part /boot/efi
├─nvme0n1p2 259:1     16G  part SWAP
└─nvme0n1p3 259:2  226.4G  part /
                                /home

其中 nvme0n1p3 里有两个子卷,分别是 @ 和 @home 采用扁平式布局,而且介绍了 Timeshift 快照工具

但是使用后发现 Timeshift 不支持自定义快照存放的位置,而且 Swap 用分区的形式不方便管理,于是便有了这篇文章,记录我更改的过程

优化后的方案

保留 @ 和 @home 子卷,新增 @var @tmp @snapshots 子卷,使用 Zram 作为 SWAP。并且重新对分区进行编号,不能格式化磁盘

├─nvme0n1p1 259:1    0   487M  0 part /boot/efi
└─nvme0n1p2 259:2    0 232.4G  0 part /
                                      /home
                                      /var
                                      /tmp
                                      /.snapshots

之所以要将 /var 以子卷的形式存放,是为了后续使用 snapper 的方便

准备工具

只需要一个 Fedora KDE 版本的 liveCD 即可

其实哪个版本并不重要只要有 btrfs 工具就行,关键是 KDE 里面的分区工具很好用,避免可以敲错命令

方法步骤

1. 重启进入 LiveCD

之所以进 LiveCD 是为了方便对 / 进行操作,而且在 LiveCD 里面方便对子卷重新布局

2. 重新设计分区

在 KDE 的分区管理工具中,找到你的 SWAP 分区(nvme0n1p2)删掉就行,删掉之后会变成 Free Space

删除 Swap 分区

这是我随便截的一张图,必须按照你自己的分区表来删除

现在的分区表变成了一个 nvme0n1p1、一个 FreeSPace 和一个 nvme0n1p3,并且保证这三个是紧挨着的

然后选择之前的 nvme0n1p3 重新调整分区大小

重新调整分区大小

你可以拖动 1 和 2 的位置让 nvme0n1p3 占满所有空余空间,也可以直接填写 0MB 到前方空置和后方空置

这是我随便截的一张图,必须按照你自己的分区表来删除

这里的调整分区大小需要将分区 nvme0n1p3 里面所有的文件往前移动,所以需要一点时间

调整完成之后保存并写入,现在你的磁盘就只剩下了 nvme0n1p1 和 nvme0n1p3 这两个分区

然后通过 sfdisk 对分区重新排序,在 LiveCD 的终端执行如下命令(需要用 root 账户)

sfdisk -r /dev/nvme0n1

这里是选择的你的磁盘而不是分区,按照自己电脑进行调整

现在,你的分区已经变成了 nvme0n1p1 和 nvme0n1p2 ,分区重新设置的部分到此结束了

3. 重新设计 Btrfs 子卷布局

继续在刚才 LiveCD 的终端里面操作

将 Btrfs 分区挂载到任意目录下,比如说 /mnt

mount /dev/nvme0n1p2 /mnt

然后可以查看下 /mnt 下的现有子卷

btrfs subvolume list /mnt

如果你是按照我之前的文件进行设计的话,你应该会有一个 @ 和 @home

然后新增你需要的子卷

cd /mnt # 进入 /mnt 后再操作

btrfs su cr @var
btrfs su cr @tmp
btrfs su cr @snapshot

su 是 subvolume 的缩写、cr 是 create 的缩写

接下来要看好 @/ 和 @ 的位置关系,不要敲错了命令

将 @ 子卷中的 /var 和 /tmp 中的文件移动到 @var 和 @tmp 中

mv @/var @var
mv @/tmp @tmp

因为 @snapshot 子卷我们会挂载到 /.snapshot 上,所以需要创建这个目录

mkdir @/.snapshot

现在的子卷布局已经重新设计并且迁移了数据,不出意外的话,查看 /mnt 下的子卷应该出现如下内容

btrfs subvolume list /mnt

top level 5 path @
top level 5 path @home
top level 5 path @var
top level 5 path @tmp
top level 5 path @snapshots

子卷的重新布局到此结束

4. 修改 fstab

这里对 btrfs 子卷添加一些特性参数挂载

UUID=$(blkid -s UUID -o value /dev/nvme0n1p2)  # 获取 Btrfs 分区的 UUID

tee /mnt/@/etc/fstab <<EOF
UUID=${UUID}  /           btrfs  noatime,space_cache=v2,compress=zstd:1,ssd,discard=async,subvol=@snapshots  0  0
UUID=${UUID}  /home       btrfs  noatime,space_cache=v2,compress=zstd:1,ssd,discard=async,subvol=@snapshots  0  0
UUID=${UUID}  /var        btrfs  noatime,space_cache=v2,compress=zstd:1,ssd,discard=async,subvol=@snapshots  0  0
UUID=${UUID}  /tmp        btrfs  noatime,space_cache=v2,compress=zstd:1,ssd,discard=async,subvol=@snapshots  0  0
UUID=${UUID}  /.snapshots btrfs  noatime,space_cache=v2,compress=zstd:1,ssd,discard=async,subvol=@snapshots  0  0
EOF

最后查看你的 /mnt/@/etc/fstab 应该如下图所示

/etc/fstab

5. 重启进入正常的系统

修改完毕后卸载 /mnt 并且重新到 Debian 系统

umount /mnt
reboot

重启之后你可以验证当前的分区表和子卷

6. 设置 Zram

安装 Zram 组件

sudo apt update && sudo apt upgrade
sudo apt install zram-tools

修改 Zram 配置文件

sudo vim /etc/default/zramswap
Zram 配置文件

主要就是改一下大小,我这里修改成内容的 60% 其他不变

然后重新加载服务

sudo service zramswap reload

可以通过 zramctl 验证你的修改

Zram 交换

接下来...

接下来就可以使用 snapper 这个更强大的快照工具了

具体可以去看 Arch Wiki https://wiki.archlinux.org/title/Snapper

文章分类在技术
0
0
0
0