使用 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
当然,来自 lilydjwg 的 btrfs-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 文件系统快照