[Share Experiences] 【教程】使用btrfs+timeshift秒级自动快照备份(超简单版本) Resolved
Tofloor
poster avatar
neko
deepin
Ecological co-builder
2023-05-10 01:49
Author

先手动分区安装,分区结构如下:

挂载点 文件系统 大小
efi efi 300MB
/boot ext4 4096MB(也可以用默认大小)
swap swap 与内存大小一致,超过16G内存的可以不要
/ btrfs 剩下的全部

安装完成后进行如下操作:

#创建/@子卷(必须,timeshift需要)

sudo btrfs subvolume snapshot / /@

#创建@home子卷(必须,timeshift需要)
sudo btrfs subvolume create /@home

#复制/home数据到@home
sudo cp -a /home/* /@home

修改/etc/default/grub,在GRUB_CMDLINE_LINUX_DEFAULT这行追加rootflags=subvol=@参数

如下:

# Generated by deepin-installer
GRUB_BACKGROUND="/boot/grub/themes/deepin/background.jpg"
GRUB_CMDLINE_LINUX_DEFAULT="splash quiet rootflags=subvol=@"
GRUB_DEFAULT=0
GRUB_DISTRIBUTOR="`/usr/bin/lsb_release -d -s 2>/dev/null || echo Deepin 23`"
GRUB_THEME="/boot/grub/themes/deepin/theme.txt"
GRUB_TIMEOUT=1
GRUB_GFXMODE=1024x768
DEEPIN_GFXMODE_DETECT=1

执行 sudo update-grub更新grub引导

然后先重启1次会进入子卷的初始快照,重启后执行下面操作

!!!以下操作重启后进行!!!
!!!以下操作重启后进行!!!
!!!以下操作重启后进行!!!


修改/etc/fstab文件(此时处于@子卷)

直接原有的 / 上修改,删除subvolid=x字段,将原来的subvol=/改成/@

UUID=xxxx-xxxx-xxxx-xxxx / btrfs rw,relatime,ssd,space_cache,subvol=/@ 0 0

复制上一条进行修改,将/改成/home ,subvol=/@改成/@home(注意不能有subvolid=x字段)

UUID=xxxx-xxxx-xxxx-xxxx /home btrfs rw,relatime,ssd,space_cache,subvol=/@home 0 0

再把/boot挂载注释掉(隔离初始的boot分区,如果要升级内核就到 grub菜单 按e删除 rootflags=subvol=@进入原始环境安装新内核后
执行 cp -av /lib/modules/* /@/lib/modules,主要是为了防止不同快照之间安装和卸载内核操作导致找不到内核模块无法进入系统,如果出现这种情况需要复制当前原始环境/lib/modules里面的文件到/@/lib/modules即可)

如图:

image.png

最后再重启,安装timeshift就可以正常开启快照功能了


image.png

timeshift下载地址:https://github.com/teejee2008/timeshift/releases/download/v22.06.1/timeshift_22.06.1_amd64.deb


timeshift_24.01.1_amd64.zip

Reply Favorite View the author
All Replies
3 / 3
To page
毛毛虫
deepin
2024-06-21 16:17
#41
qq4945286

将原来的subvol=/ 改成 /@

这个没看懂,改成那里换成什么

这个地方我也没太明白,如果重启都可以进系统了,那么修改这个地方是什么意思呢?难道重启后挂载的还是原来的系统吗?如果是那么rootflags=subvol=@的配置意义又是什么呢?这个地方只看大家都说要改改改,就是没有一个说清楚的

Reply View the author
Tent
deepin
2024-06-21 18:09
#42

一、有不够优雅的情况—有原系统文件冗余:

1、这一步是在@子卷外层的原系统文件中修改的,所以启动时读的仍然是原系统文件中的grub.cfg

修改/etc/default/grub,在GRUB_CMDLINE_LINUX_DEFAULT这行追加rootflags=subvol=@参数

2、按照楼主的操作后,efi文件里面的grub.cfg,仍然使用的是原系统文件中的grub.cfg

3、home已经修改为子卷挂载,但原来的/@/home目录中仍有残留文件

二、我打下补丁:

针对问题1、2—

#修改efi配置
find /boot/efi/EFI -name grub.cfg | xargs sed -i 's|/boot|/@/boot|'
#修改@子卷中的grub.cfg
sed -ri 's|root=UUID.*$|\0 rootflags=subvol=@|' /@/boot/grub/grub.cfg
#重启系统进到@子卷为根的环境下
reboot
#重新生成grub.cfg
update-grub
#删除原系统文件
mount `df | grep -w / | awk '{print $1}'` /mnt
cd /mnt
shopt -s extglob
rm -r !(@|@home)

针对问题3—

首先进到livecd或者initramfs,然后手工把/@/home下面文件清空掉。

Reply View the author
fishtca
deepin
18 hours ago
#43

非常不错的教程,我这也有一个关于debian12使用timeshift回档的教程:https://www.ytca.top/guidance/linux/730/

Reply View the author
3 / 3
To page