«

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 文件就行的,还有秘钥。我的建议是还是重新安装比较好,反正只废这一次事,以后有快照功能后,就不需要再重装了。

使用 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

删除快照

没啥特别需要讲的。

浏览

可以浏览快照中的文件。

设置和向导

就是初始向导那些玩意。

从嗝屁的系统中恢复快照

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

DSC_2782

毫无难度

已知问题

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 秒。

总结

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

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

闲话

竞品

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

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

snap2757

参考资料

相关文章列表

Linux 桌面系统相关文章列表

2 comments

  1. 心灵博客

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

    1. 石樱灯笼

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

发表评论

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

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