Deepin安装到Btrfs文件系统中
Tofloor
poster avatar
tmacy
deepin
2017-07-22 03:19
Author
本帖最后由 tmacy 于 2017-7-21 21:27 编辑

原文链接:http://www.jianshu.com/p/0b2725c2a5d1?utm_campaign=maleskine&utm_content=note&utm_medium=writer_share&utm_source=qzone

说明

在Deepin上默认使用的文件系统是经典的Ext4,如果想体验Btrfs,就需要做点非主流的操作了。

为什么要用Btrfs?可以做snapshot!因为Deepin桌面版是滚动更新,所以出现一个显示问题看起来很别扭,但是目前没有回滚机制,可以用snapshot来做简单的备份系统。

关于文件系统选择:参考链接:https://segmentfault.com/a/1190000008481493

当然Btrfs对于SSD的优化会比Ext4要好一些。使用SSD的笔记本,选择Btrfs应该是有好处的。

下面内容请阅读之后再考虑操作,请慎重,请备份重要资料,请理解后再操作,本文作者对操作后果概不负责!

安装

磁盘分区

笔记本里自带win,可以安装双系统。分一个空白分区用来装Deepin:比较方便的方法是从win的磁盘管理器直接压缩出一个空白分区。
需要格式化磁盘为Btrfs,由于Deepin的安装器无法选择Btrfs,这里选择Arch的liveCD,做成U盘启动盘,利用arch的工具格式化分区。

arch iso下载地址:https://www.archlinux.org/download/
里面可以找到china的镜像地址,下载最新的iso。例如:https://mirrors.ustc.edu.cn/archlinux/iso/2017.07.01/archlinux-2017.07.01-x86_64.iso

制作U盘启动盘,可以用Linux的DD命令,在Windows中,也可以采用rufus工具。rufus download
磁盘格式化

重启电脑,进入arch启动盘。(一般是开机按F12选择U盘引导)
利用命令lsblk -f命令查看分区情况
假设需要格式化/dev/sda3
格式化Btrfs命令:mkfs.btrfs /dev/sda3
挂载分区:mount /dev/sda3 /mnt

创建subvolume

快照是基于subvolume的,所以在分区下首先创建subvolume,将系统安装到subvolume中,就可以实现快照备份。 下面创建两个subvolume,一个是deepin,用于放Deepin系统的根目录,一个是backup,用来存放快照文件。

  1. # btrfs subvolume create /mnt/deepin
Copy the Code

subvolume看起来与普通的目录没什么区别,但是无法使用rm命令删除它,只能使用btrfs的命令删除。对于btrfs来说,subvolume可以类似磁盘的两个分区。

安装Deepin

由于Deepin的安装器无法直接使用btrfs,需要预先将Deepin安装到一个独立的分区上。或者是另外一个电脑的硬盘上。如果没有SATA转USB的设备,建议可以直接在同一个磁盘上分区安装Deepin系统。如果有第二块硬盘,或者第二个电脑,可以先安装Deepin到此硬盘中,再用SATA转SUB设备连接进来。
安装Deepin的过程,其实就是将已经装在Ext4格式分区中的Deepin同步(拷贝)到Btrfs分区的过程。

在Arch的引导环境中:挂载Deepin系统分区到本地。例如,Deepin分区在另一个硬盘上的分区中(/dev/sdb2):
  1. # mkdir /root/deepin
Copy the Code

同步
同步数据一般选择rsync工具,rsync可以保留文件属性,权限等相关信息。
  1. # rsync -avr /root/deepin /mnt/deepin --progress
Copy the Code

引导
同步之后,需要搞定系统引导,不然无法启动Deepin。

  1. # mount -t proc /proc proc
Copy the Code

chroot到deepin的分区后,可以执行update-grub,更新gurb.cfg。如果命令找不到,可能是环境变量PATH不全:export PATH=$PATH:/bin:/sbin:/usr/sbin
如果使用UEFI,还需要看下grub的包是否有安装,没有需要安装一下:
  1. apt install grub-efi-amd64 grub-efi-amd64-bin
Copy the Code

挂载EFI分区:mount /dev/sda1 /boot/efi
之后需要安装grub到硬盘:grub-install /dev/sda

在实际操作中,update-grub总会报错,暂时不了解情况,直接grub-install了o(╯□╰)o


修改分区表

这里的/ 是chroot的根目录,也就是chroot之前的/mnt/deepin目录
  1. vim /etc/fstab
Copy the Code

重启
修改之后,退出chroot环境:# exit
重启系统:# reboot
进入Deepin

如果一切顺利,启动后会进入系统引导菜单,选择Deepin就可以进入系统。可能还需要再更新一下grub菜单,看个人喜好。

快照

做了这么多工作,我们该怎样为系统做snapshot呢?(毕竟这是我的初衷)
挂载btrfs分区到系统目录:
  1. # mount /dev/sda3 /mnt
Copy the Code

会看到mnt目录下有deepin 与 backup两个目录。其中deepin那么目录就是当前系统的根目录。
使用btrfs命令查看subvolume:

  1. # btrfs subvolume list /mnt
Copy the Code
能够看到mnt下的subvolume列表。
创建快照

  1. # btrfs subvolmue snapshot /mnt/deepin /mnt/backup/deepin_snapshot
Copy the Code
删除快照

  1. # btrfs subvolume del /mnt/backup/deepin_snapshot
Copy the Code



恢复系统
在启动到grub菜单时,直接编辑选项。按e键,找到linux那一行,修改rootflags=subvol=deepin,把deepin改为你的subvolume名称,例如backup/deepin-1。
按F10启动系统。
进入系统后,删除有问题的snapshot,将deepin-1做个snapshot到原路径下。
比如将/mnt/backup/deepin-1-----> /mnt/deepin


参考资料:

关于fstab的信息,参考链接:https://wiki.archlinux.org/index.php/Fstab
关于btrfs的信息,参考链接:https://wiki.archlinux.org/index.php/Btrfs




Reply Favorite View the author
All Replies
1 / 2
To page
jingle
deepin
2017-07-22 03:28
#1
大神们耍起来
Reply View the author
星外之神
deepin
2017-07-22 03:50
#2

不如改安装器源代码
Reply View the author
comzhong
deepin
2017-07-22 04:55
#3
搞复杂了,不必这么复杂
Reply View the author
tmacy
deepin
2017-07-22 05:14
#4
https://bbs.deepin.org/post/142941
看看你们家的LJ论坛,发出来的代码都是html的标签
@tmacy

哎。。。求支持markdown
Reply View the author
tmacy
deepin
2017-07-22 05:27
#5
https://bbs.deepin.org/post/142941
搞复杂了,不必这么复杂

如何搞,求指点
Reply View the author
窄口牛
deepin
2017-07-22 05:28
#6
按照这个是不是就能实现我的把它装到一个文件夹里,和别的系统共分区?
Reply View the author
tmacy
deepin
2017-07-22 05:28
#7
https://bbs.deepin.org/post/142941
不如改安装器源代码

那岂不是连安装器界面都要改。
Reply View the author
tmacy
deepin
2017-07-22 05:29
#8
https://bbs.deepin.org/post/142941
按照这个是不是就能实现我的把它装到一个文件夹里,和别的系统共分区?

可以,都是btrfs的子卷
Reply View the author
窄口牛
deepin
2017-07-22 05:35
#9
抽空照猫画虎一下,谢谢回复。
Reply View the author
comzhong
deepin
2017-07-22 05:46
#10
本帖最后由 comzhong 于 2017-7-22 17:47 编辑
tmacy 发表于 2017-7-21 21:27
如何搞,求指点

一会发个帖告诉你https://bbs.deepin.org/post/142951
Reply View the author
comzhong
deepin
2017-07-22 20:18
#11
本帖最后由 comzhong 于 2017-7-22 12:20 编辑
https://bbs.deepin.org/post/142941
看看你们家的LJ论坛,发出来的代码都是html的标签
@tmacy

这是 discuz 默认编辑器的锅,避免的办法是,切换为纯文本模式编辑就不会乱了,像无忧论坛都默认纯文本模式,我觉得是不是也改成默认纯文本? https://bbs.deepin.org/user/48640
Reply View the author
窄口牛
deepin
2017-07-22 20:29
#12
支持中文名字吧,论坛昵称。
Reply View the author
152******25
deepin
2017-07-22 20:37
#13
opensuse默认根分区是使用btrfs的,安装的时候我特意手动关闭了快照功能,因为装的稳定版,一般不会滚挂了(德国人很认真),嫌要定期删快照麻烦(只给了20g的作为根分区,快照一多就挤炸了)
Reply View the author
tmacy
deepin
2017-07-23 01:31
#14
https://bbs.deepin.org/post/142941
一会发个帖告诉你

发个链接
Reply View the author
tmacy
deepin
2017-07-23 01:34
#15
https://bbs.deepin.org/post/142941
opensuse默认根分区是使用btrfs的,安装的时候我特意手动关闭了快照功能,因为装的稳定版,一般不会滚挂了 ...

你可以手动分区吧,20G根确实太少。不过也可以把快照做到其他分区啊?
Reply View the author
comzhong
deepin
2017-07-23 01:35
#16
本帖最后由 comzhong 于 2017-7-22 17:47 编辑

我以为你看见了呢。
https://bbs.deepin.org/post/142951
Reply View the author
tmacy
deepin
2017-07-23 02:12
#17
https://bbs.deepin.org/post/142941
我以为你看见了呢。
https://bbs.deepin.org/post/142951#=1

先建subvolume,再做系统是不是好些?做好系统后,建立快照到本地分区,这个。。。不知道会不会有问题
Reply View the author
comzhong
deepin
2017-07-23 02:24
#18
https://bbs.deepin.org/post/142941
先建subvolume,再做系统是不是好些?做好系统后,建立快照到本地分区,这个。。。不知道会不会有问题 ...

都一样嘛,快照也是 subvolume,分区根目录是 root subvolume ,实际也是个subvolume,只不过是默认被外部访问的 subvolume ,也可以把别的 subvolume 设置为默认 subvolume 。

反正随便啦,都一样。
Reply View the author
tmacy
deepin
2017-07-23 02:33
#19
https://bbs.deepin.org/post/142941
都一样嘛,快照也是 subvolume,分区根目录是 root subvolume ,实际也是个subvolume,只不过是默认被外 ...

如果你做系统快照,会不会把你之前的快照也做快照呢?
比如说你把快照放在/snapshot中,你做了整个/的快照
那么/snapshot是否也会被涉及到?会不会混乱?
Reply View the author
comzhong
deepin
2017-07-23 02:39
#20
本帖最后由 comzhong 于 2017-7-22 18:46 编辑
https://bbs.deepin.org/post/142941
如果你做系统快照,会不会把你之前的快照也做快照呢?
比如说你把快照放在/snapshot中,你做了整个/的快 ...

快照也是子卷,做快照的时候,并不会包含另一个子卷,你可以试试,它只是看起来像个文件夹,但不会真的像个文件夹。
我给你试过了,虽然会在 / 的快照里有个 /deepin 子卷的名字的文件夹 deepin,但那个文件夹是空的,里面什么都没有,要是看不惯,删掉就是。
Reply View the author
1 / 2
To page