本文介绍将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,说白了就是删除,但使用替换可以精准替换成空,这样这个屏蔽项目就被删除了,保存退出。
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,然后顶部应用:
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这个参数只要是深度肯定有,这么做就是在它前面加了几个字,好保存。这个文件就修改完了:
接下来我们修改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的写法,如下图所示:
解读一下: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类型的@,无法直接使用他创建快照。 附:成功的截图
相关主题 |