Btrfs 又被称为 Butter FS、Better FS 或 B-Tree FS,是由 Oracle 于 2007 年开始设计、开发的一个现代文件系统,它于 2009 年开始便被合并入 Linux 2.6.29 内核。Btrfs 基于 GPL 许可,由于不是十分稳定,虽然许多 Linux 发行版都对其进行了集成,但并不作为默认文件系统进行使用。Btrfs 之所以被广泛集成,因其支持磁盘快照、支持递归快照、对 RAID 的支持,支持子卷(Subvolumes),以及允许在线调整文件系统大小等优秀特性。虽然目前大多 Linux 发行版都在用 Ext4 作为主要文件系统,但将来随时有可能被 Btrfs 所取代。
Btrfs 主要被设计用于解决当前 Linux 文件系统各种「弱点」的 COW(copy-on-write)文件系统, 有望提供更好的可扩展性和可靠性,其主要开发焦点都放在了容错、修复和易于管理等方面。
接下来我将主要向大家介绍如何使用 apt-btrfs-snapshot 将 Linux 中的 btrfs 文件系统快照回滚到之前的系统状态。使用 apt-btrfs-snapshot 创建和管理文件系统快照就像其它 APT 操作一样简单,使用它我们可以轻松地恢复 btrfs 文件系统的状态。
先决条件
为了创建并使用 btrfs 恢复你的 Linux 文件系统,当然需要使用的是 btrfs 文件系统,还需要没有使用 Ext 文件系统的单独 /boot 分区,不然就没法玩了。
安装Btrfs包
条件满足之后,就使用如下命令安装 apt-btrfs-snapshot 包:
apt-get install apt-btrfs-snapshot
安装完成之后使用如下 apt-btrfs-snapshot 命令检查是否支持 btrfs 快照的创建:
apt-btrfs-snapshot supported
如果满足 btrfs 文件系统的先决条件,会输出 Supported,否则会输出:
Sorry, your system lacks support for the snapshot feature
你可以使用如下命令检查 Ubuntu 上的 btrfs 子卷的默认布局:
btrfs subvolume list
使用ATP操作创建快照
为了测试回滚操作,我们先在当前系统中执行一些 apt 操作,例如 apt-get。
apt-get update && apt-get upgrade
按 Y 继续执行系统升级,你会看到 apt-btrfs-snapshot 已经自动为升级之前的系统状态创建了快照。
你也可以使用如下命令查看当前系统中的快照列表:
btrfs subvolume list / apt-btrfs-snapshot list
还原Btrfs快照
例如在系统升级过程中遇到了问题,我们需要恢复升级之前的系统状态,可以将 btrfs 文件系统 mount 到一个单独的位置,例如 /mnt 下进行操作。
mount /dev/sda1 /mnt
查看 /mnt 目录会输出子卷:
ls -l /mnt/
其中的 @apt-snapshot-2016-05-24_02:18:31 是之前 apt 操作时的 root 文件系统快照。将当前子卷重命名为 @ 开头,再将 @apt-snapshot-2016-05-24_02:18:31 重命名为为当前子卷后重启系统,即对快照进行了恢复操作。
删除Btrfs快照
当快照恢复后,或需要腾出部分磁盘空间时,可以使用如下命令来删除快照:
mount /dev/sda1 /mnt/ btrfs subvolume delete /mnt/@_latest-root/ umount /mnt
说得直白一点,Btrfs 快照实际上就是与其它子卷进行数据共享的子卷,其使用 Btrfs 的 copy-on-write 能力共享数据和对快照进行修改,原始子卷并不可见。一旦快照创建完成,它就被视为原始文件系统的可替换版本。