云网牛站
所在位置:首页 > Linux教程 > 将uos/deepin运行在btrfs文件系统中并启用快照功能的方法

将uos/deepin运行在btrfs文件系统中并启用快照功能的方法

2021-03-16 11:10:59作者:ZOLY稿源:深度站

本文介绍将uos/deepin操作系统运行在btrfs文件系统的方法,并且启用快照功能。请按照以下步骤进行操作,慢慢体会就能明白其中的操作思路了。

 

前言

由于uos/deepin系统不知道是因为什么原因,安装器并未提供安装到btrfs的选项,同时还在系统里屏蔽了btrfs,导致无法使用。不过你可以按照以下的步骤来操作,以实现在uos/deepin系统中运行btrfs文件系统。

注意,下面这个方法为了使用深度自己的内核,也为了操作上不使用过多的命令,我是先安装到ext4再到live倒腾,具体看步骤。

相关参考:将文件系统转换为Btrfs,即将当前分区迁移到Btrfs文件系统

 

操作步骤

1、将系统安装到ext4,建议硬盘只分三个区,efi swap / home,因为btrfs可以用子卷来充当更多的挂载点,而且这样一个大分区容量不会被一堵墙隔离,共享容量。

上面这个过程不用我多说,装好后启动系统。

2、现在咱们做一个操作,编辑下面这个文件,打开终端输入,回车:

sudo dedit /usr/share/initramfs-tools/init

注意使用深度文本编辑器替换里面的,btrfs,说白了就是删除,但使用替换可以精准替换成空,这样这个屏蔽项目就被删除了,保存退出。

将uos/deepin运行在btrfs文件系统中并启用快照功能的方法

3、执行:

sudo update-initramfs -u  

这一步必须做,不然内核并没有真的可以运行在btrfs。执行完毕后这套系统就可以跑在btrfs了。

4、接下来建议使用刚才装系统用的uos/deepin的iso镜像用u盘启动到安装界面,此时按下ctrl+Fn+alt+F2进入tty2,然后输入startx回车,等待又跳回来了,再执行一次发现加载到live系统了。

btrfs组件深度自带不需要安装,但是如果你不了解你的磁盘,可以联网安装一个gparted图形化操作。这样能精准不出意外:

sudo apt install gparted

接下来我们备份根分区数据,我这里使用:

sudo rsync -avr 源目录(/dev/sda3)目标目录(/dev/sda4),注意这不是命令,请往后看。

能用图形我就尽力用图形,终端运行sudo dde-file-manager以root打开文件管理器,在/mnt下面新建一个a和b文件夹,鼠标操作。

然后:

sudo mount /dev/sda3 /mnt/a 

sudo mount /dev/sda4 /mnt/b

sudo rsync -avr /mnt/a/ /mnt/b

这样就把根目录文件同步到了原来home分区,注意这里混了一个你的用户目录,不重要,后面恢复到/dev/sda3删除就行。

5、现在我们打开gparted,注意在图示位置sda3点右键,软件上的英文很容易懂的,这里截个图帮你对照,点击格式化,选择第一个btrfs,然后顶部应用:

将uos/deepin运行在btrfs文件系统中并启用快照功能的方法

将uos/deepin运行在btrfs文件系统中并启用快照功能的方法

将uos/deepin运行在btrfs文件系统中并启用快照功能的方法

6、重点来了,btrfs想要使用快照必须使用子卷功能,在最外层的大btrfs父卷是不可以直接快照的。刚才咱们把/mnt用了,先卸载了吧,这个地方操作相对方便点:

sudo mount -l /mnt/a 

sudo mount -l /mnt/b

然后把sda3再挂到/mnt:

sudo mount /dev/sda3 /mnt

sudo btrfs subvolume create /mnt/uos #创建一个名字为uos的子卷

sudo btrfs subvolume create /mnt/home #创建一个名字为home的子卷

uos用来放系统所有目录,home用来放home目录,子卷他看起来就是个文件夹目录,而且在Linux 5.0以上内核可以当个文件夹直接删除,而不用sudo btrfs subvolume delete /mnt/uos。

接下来把文件恢复回来,先:

sudo mount /dev/sda4 /mnt/b

sudo rsync -avr /mnt/b/ /mnt/uos 

恢复文件,即b下面的文件都跑到uos目录下了,文件管理打开检查一下看看,确认好进行下一步。

注意:还是运行sudo dde-file-manager以root打开文件管理器,把/mnt/uos/下你的用户目录剪切到home目录里/mnt/home确认无误。

7、这个时候打开gparted,把sda4删除,让后调整sda3移动到右侧最大处,合并为一个大的sda3,应用即可。

8、接下来我们要修改几个文件:

sudo dedit /mnt/uos/boot/grub/grub.cfg

第一步:注意里面所有的带路径的条目在前面都要加上/uos,很好理解,原来/boot在一级现在在/uos/boot二级目录了,如图,行前面带#号的那些不用。

第二步:使用blkid命令查看新的sda3的uuid,复制上替换文本中的uuid。

第三步:我们在内核参数后面加上一个参数告诉内核根目录在哪个子卷里,即:rootflags=subvol=uos,也可以使用rootflags=subvolid=257,两种表述意义一样257是子卷的id号通过sudo btrfs subvolume list /mnt命令查看。

方法还是替换最好搜索splash,替换为rootflags=subvol=uos splash,因为splash这个参数只要是深度肯定有,这么做就是在它前面加了几个字,好保存。这个文件就修改完了:

将uos/deepin运行在btrfs文件系统中并启用快照功能的方法

接下来我们修改EFI目录里的参数,随便找个地方挂一下,/mnt再新建个c文件夹吧:

sudo mount /dev/sda1 /mnt/c

sudo dedit /mnt/c/EFI/ubuntu/grub.cfg

sudo dedit /mnt/c/EFI/uniontech/grub.cfg

sudo dedit /mnt/c/EFI/boot/grub.cfg

sudo dedit /mnt/c/EFI/UOS/grub.cfg

四个文件里面内容修改uuid值修改为现在的,路径加上uos,如下所示:

search.fs_uuid d7d81d36-6cf3-400a-bf9b-6f48c6919b05 root hd0,gpt3 

set prefix=($root)'/uos/boot/grub'

configfile $prefix/grub.cfg

接下来最后一步,也就是fstab的写法,如下图所示:

将uos/deepin运行在btrfs文件系统中并启用快照功能的方法

解读一下:uuid值因为在一个大分区里,所以根和home用一样的。然后用subvolid=257这个参数告诉具体在哪个子卷里,id查看前面已经说了,如果是ssd可以加上ssd这个参数。

在blkid确认一下其他分区的uuid对不对,只有细致才能一次性重启到系统,而不是grub黑屏或者initramfs黑屏,再重新回到live多折腾。

9、至此就做好了uos运行在btrfs子卷的系统就调整完成了,看看怎么创建快照吧:

sudo btrfs subvolume snapshot /mnt/subvolume /mnt/snapshotsubvolume

注意timeshift的btrfs模式需要Ubuntu类型的@,无法直接使用他创建快照。

附:成功的截图

将uos/deepin运行在btrfs文件系统中并启用快照功能的方法

将uos/deepin运行在btrfs文件系统中并启用快照功能的方法

 

相关主题

Deepin 20用Linux 5.4或以上内核无法启动btrfs根分区的解决

精选文章
热门文章