«

Dec 04 2019

使用 Btrfs 来让 Linux 支持快照功能

(与本文没什么关系的起因:研究这玩意的起因其实,是因为我尝试搞编译环境结果把系统整瘫了。)

虽说依靠之前的分区方式,把所有个人文件都保留下来,除此之外在 /etc 中的部分配置文件也都有异地备份,重装系统完全没压力。但是,重装系统本身就是件很烦的事情。

理想情况当然是能像虚拟机一样,系统被搞瘫之后能快速恢复到指定状态。

已知的比较经典的快照功能有 LVM ,资料很多,但是门槛也比较高。我在存储行业工作期间,多数同事看到 LVM 操作还是比较打怵的,像 LV、VG 的概念还是很吃脑子的。鉴于 LVM 的资料相当的多,我这里就不讲了。

这次来使用 Btrfs 来实现快照功能。

This is Linux, do whatever you feel like to do.

201904183360_idea_of_partitioning_on_linux/DSC_2350.jpg

201904183360_idea_of_partitioning_on_linux/DSC_2351.jpg

目录

  1. 重装系统
  2. 使用 Timeshift 进行快照管理
  3. 从嗝屁的系统中恢复快照
  4. 已知问题
  5. 总结
  6. 闲话
  7. 参考资料
  8. 相关文章列表

1. 重装系统

(如果是新安装系统而不是重新安装系统,请先阅读在 Linux 桌面系统上进行硬盘分区的一些想法,以理解为什么要用这种方式进行分区)

更换文件系统

鉴于原有的系统已经嗝屁了,所以重装比较省事。当然也有从 Ext3/4 转换的方式,当然也是风险自负的。

切记无论如何,都要先异地备份重要资料

把之前根分区重新格式化为 btrfs 文件系统。原来的 /mystorage 继续使用 EXT4 ,不要勾选格式化。

DSC_2763

剩下的配置没什么好说的,一直到安装结束,不要重启。

更改 home 分区

Linux Mint 如此安装之后,会创建一个 @home 子卷。

snap2755

这个子卷是为了在恢复系统快照时,保留用户数据而预备的。然而我们的 HOME 目录是放在独立的 EXT4 分区下的,所以可以删掉。

snap2756

现在可以把原来备份的 /etc/fstab 中关于 /mystorage 的设置合并过来了。切记不要用旧文件直接覆盖,格式化过后分区的 UUID 会变。

重启系统。

恢复设置

(此步骤可以延后至生成快照后再进行,这样可以保留一个纯净全新无任何修改的快照)

因为所有个人设置均是保存在 HOME 下的,重装前啥样子,重装后还是啥样子,所有桌面设置都在。

我们要做的就是恢复一下 /etc/ 下的配置文件,比如负责休眠按钮的 com.ubuntu.enable-hibernate.pkla。具体要恢复哪些,就看你重装系统之前修改过哪些配置了。

注意 PPA 源是不能简单的恢复 .list 文件就行的,还有秘钥。我的建议是还是重新安装比较好,反正只废这一次事,以后有快照功能后,就不需要再重装了。

2. 使用 Timeshift 进行快照管理

尝试理解下:快照功能呢其实就是 子卷X写入时复制

(好吧其实理解不了也无所谓)

新装的 Linux Mint 的 Welcome 在 First Steps 中第一个就是 System Snapshots,启动的是 Timeshift。我们也可以在开始菜单或命令行下启动 Timeshift。

DSC_2765

初始向导

初次启动 Timeshift 会进入 Setup Wizard。这里有两种选择。

DSC_2768

RSYNC,这个方式就是之前在 使用 Linux Mint 作为主要操作系统的一些个人设置#关闭系统备份 中讲到的,依靠 rsync 命令创建硬链接。我们这次选择使用 BTRFS 的快照功能。

选择根分区。我们的根分区是不包含 /mystorage 的,也就是说 HOME 目录也不包含在内。

DSC_2769

之后选择计划任务。我这里是禁用定时任务的。理由很简单,太多==没有。每次需要的时候手动创建快照即可。

DSC_2771

这一页可以选择 @home 子卷加入快照以及配额功能。 @home 子卷已经被我们干掉了所以不用勾选。配额功能虽然在这里开启了,但是还不清楚 Timeshift 会怎么用。

DSC_2774

之后点击完成就可以了。

创建快照

没啥特别需要讲的。唯一能提的就是创建快照后,可以点击 Comments 这一栏编辑备注。

DSC_2776

恢复快照

没啥特别需要讲的。恢复快照前会自动打一个当前快照.

DSC_2780

DSC_2781

删除快照

没啥特别需要讲的。

浏览

可以浏览快照中的文件。

设置和向导

就是初始向导那些玩意。

3. 从嗝屁的系统中恢复快照

使用安装盘启动并进入桌面,启动 Timeshift,选好相应的 Btrfs 分区。

DSC_2782

毫无难度

4. 已知问题

TLP

有已知记录 TLP 可能导致 Btrfs 格式文件系统损坏。有如下建议进行以下设置

SATA_LINKPWR_ON_BAT=max_performance

另一说 kernel 4.15 已被修复,所以还不确定具体情况。

鉴于我们只有根分区是使用 btrfs 而数据文件仍然保存在 EXT4 分区下,我选择铤而走险。

GRUB_TIMEOUT 设置失效,Grub 超时时间被强制 30 秒

嗯,这个是已知 Bug: GRUB_TIMEOUT in /etc/default/grub not changing the wait time with LVM

简单来讲就是 Grub 没有在 EFI 环境下,向 LVM 或 Btrfs 写入的能力,所以一直是走的 GRUB_RECORDFAIL_TIMEOUT 而不是 GRUB_TIMEOUT。

官方有修复但是还没有正式发布,像修改 Grub 这种高难度动作我觉得也不要随意尝试。

鉴于其实问题不是很大,所以可以直接给 GRUB_RECORDFAIL_TIMEOUT 设置个小一点的值,比如 5 秒。

5. 总结

好了,现在你有了一台远远超越 Windows 任何系统备份恢复手段的 Linux 系统了。

你可以放心大胆地在上面做开发做测试,随便搞(只要别把 Btrfs 分区搞坏就行),只要搞之前拍个快照,有问题直接恢复快照,舒适。(把EXT4下的文件搞坏属于活该)

6. 闲话

竞品

其实 Windows NTFS 的卷影功能和 Btrfs 的写入复制很像,然而可靠性并不是很友好。一方面卷影功能打快照是基于 系统还原 功能,然而这个功能本身就没多少人待见。由于系统还原是个纯黑盒工具,一方面他恢复的时候到底恢复什么完全不清楚,另一方面他自动清理功能对用户也是不可控的。我曾几次把系统搞砸,之后尝试依靠系统还原补救,10次能有5次成功5次失败,所以我也没把这功能当做什么靠谱功能。

卷影英文名是:Volume Shadow Copy Service,于 Windows Server 2003 引入。对我来说,误删文件可以用回收站,但是误改文件就比较恐怖。所以我一直开着系统还原,并依靠不定期的 Windows Update 来拍快照。很多次都是靠这个功能救回误修改的文件。最近一次靠这个功能救命是因为 Steam 不知为何搞丢了我的 100 Orange Juice 存档(存档文件还在,但是内容是空的)。

snap2757

7. 参考资料

8. 相关文章列表

Linux 桌面系统相关文章列表

8 comments

Skip to comment form

  1. 心灵博客

    …… 好复杂,我的linux一般都是一次性弄好就基本再也不动了,要不就整体备份一下。下次装有机会按你的试试

    1. 石樱灯笼

      什么叫【基本再也不动】?

      1. 心灵博客

        就是基本不会再去更改环境配置了。

  2. Glegoo

    Windows 下面只有 Server 自带的那个 Windows Server Backup 还不错,系统还原感觉不靠谱

    1. 石樱灯笼

      Server 用备份感觉更荒唐,连备份的是啥都不知道。Server 才更应该针对不同应用手动做备份,不然还不如用 ESXi 拍个快照。(是有多土豪会在主机上跑一个 Server 系统)

  3. 哥斯拉

    有点太难了哈,搞不懂

  4. ⑨BIE

    快照需求一般都是用KVM/VM这种虚拟东西的_(:з)∠)_。。。实际服务倒是都是自己写脚本备份

    1. 石樱灯笼

      来在你的笔记本上装个KVM/VM做主系统

发表评论

电子邮件地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据