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 能力共用資料和對快照進行修改,原始子卷並不可見。一旦快照建立完成,它就被視為原始檔案系統的可替換版本。