使用 Btrfs 文件系统快照

和其他的 ArchLinux 的用户一样,Y7n05h 也很热衷于尝试一些有趣且实用的技术.

Btrfs 早就因 Cow、透明压缩和子卷管理让 Y7n05h 感到心动.在此早在本文写作的 1 年之前,Y7n05h 就尝试过了 Btrfs 这一 Linux Kernel 的源码树内 fs.
当时 Y7n05h 只是浅层次的使用 btrfs(btrfs 具有而 xfs 没有的功能 Y7n05h 没用到),到了现在 Y7n05h 也尝试过了 btrfs 的很多特性,并且 Y7n05h 开始认为这些特性对 Y7n05h 很重要.
下面,就请允许 Y7n05h 聊聊对此的认识吧.

子卷管理

既然都说道了子卷的管理,那就先说一下子卷是什么:

A Btrfs subvolume is an independently mountable POSIX filetree and not a block device (and cannot be treated as one). Most other POSIX filesystems have a single mountable root, Btrfs has an independent mountable root for the volume (top level subvolume) and for each subvolume; a Btrfs volume can contain more than a single filetree, it can contain a forest of filetrees. A Btrfs subvolume can be thought of as a POSIX file namespace.[1]

为了简化理解困难,在初始 btrfs 的时候,不妨将子卷理解为多个不同的分区.

子卷的常见布局可以参考:这里

快照

粗略的说完 子卷,那么我们可以谈谈快照了.

  • Q:为什么要使用快照?
  • A:快照是为了恢复回滚,这是所有人都知道的事情.但说我为什么需要他的话,就是给自己错误操作后留下更多的补救的余地,避免重装系统.还能为应用程序错误导致系统故障或崩溃提供方便的恢复方式.我想快照的用途是不言自明的.

tip
TIP

或许有人会说,你注意点,别进行错误操作,只要谨慎的使用命令,就用不到快照.

当然,Y7n05h 也不希望有用快照恢复的情景出现.毕竟出现恢复的情景就已经意味着故障的发生了.但错误的出现有时是难以简单的通过谨慎的方式来避免的.在使用 Linux 命令时,谨慎的操作是必要的,但真的当 bad 的情况出现时,快照则是迅速将崩溃的系统拉出泥潭的有力工具.

举个例子:
Y7n05h 曾为了清除某文件夹下面的所有文件,本想使用命令 sudo rm -rf test/* 没主要到多输入了一个空格,成为了 sudo rm -rf test /*,导致错误的执行了删除 /* 的命令.最后只好用重装系统来解决问题.

btrfs 现如今只支持对 btrfs 子卷进行快照,而快照也会以 btrfs 的一个特殊的子卷的方式存在.
至于创建快照与删除快照的方式,可查看 ArchLinuxWiki-Btrfs#Snapshots 或者 Btrfs Wiki 中的相关内容.在本文中不给出具体的命令也是希望看到本文想去尝试 btrfs 的读者认真的阅读 wiki 与相关文档并审慎的做出决定,而不仅仅是受到了 Y7n05h 的鼓动.

自动快照

得益于 Btrfs 上相对廉价的快照开销,频繁的使用快照也并不总是不可接受的.

snapper

Y7n05h 使用来自 openSUSE snapper) 完成自动化的 btrfs 快照.
snapper 会在每小时为 btrfs 子卷进行一次快照,并自动的删除旧的快照.

在默认配置下,snapper 将保留 10 个每小时快照,10 个每日快照,10 个每月快照和 10 个每年快照。[2]

btrfs-autosnapshot

当然,来自 lilydjwgbtrfs-autosnapshot 同样是不错的工具.
btrfs-autosnapshot 作为一个 python 脚本,提供了一种更自定义的方式来控制快照的创建和清理.

参考资料

1. BtrfsWiki编者. SysadminGuide[G/OL]. BtrfsWiki, https://btrfs.wiki.kernel.org/index.php/SysadminGuide#Subvolumes.
2. ArchWiki编者. Installation guide (简体中文)[G/OL]. ArchWiki, https://wiki.archlinux.org/index.php/Installation_guide_(简体中文).
3. farseerfc. Btrfs vs ZFS 实现 snapshot 的差异[G/OL]. Farseerfc的小窝, https://farseerfc.me/zhs/btrfs-vs-zfs-difference-in-implementing-snapshots.html.

使用 Btrfs 文件系统快照

https://blog.y7n05h.dev/Btrfs/

作者

Y7n05h

发布于

2021-11-29

更新于

2021-11-29

许可协议

CC BY-SA 4.0