使用Btrfs对Linux系统进行快照回滚方法

07-17

  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对Linux系统进行快照回滚方法

  如果满足 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

使用Btrfs对Linux系统进行快照回滚方法

  按 Y 继续执行系统升级,你会看到 apt-btrfs-snapshot 已经自动为升级之前的系统状态创建了快照。

使用Btrfs对Linux系统进行快照回滚方法

  你也可以使用如下命令查看当前系统中的快照列表:

  btrfs subvolume list /

  apt-btrfs-snapshot list

使用Btrfs对Linux系统进行快照回滚方法

  还原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对Linux系统进行快照回滚方法

  删除Btrfs快照

  当快照恢复后,或需要腾出部分磁盘空间时,可以使用如下命令来删除快照:

  mount /dev/sda1 /mnt/

  btrfs subvolume delete /mnt/@_latest-root/

  umount /mnt

  说得直白一点,Btrfs 快照实际上就是与其它子卷进行数据共享的子卷,其使用 Btrfs 的 copy-on-write 能力共享数据和对快照进行修改,原始子卷并不可见。一旦快照创建完成,它就被视为原始文件系统的可替换版本。