用 snapper 輕鬆玩轉 Btrfs 的快照功能

來源:互聯網
上載者:User

用 snapper 輕鬆玩轉 Btrfs 的快照功能
一、前言

2017 年五月初 WannaCry 勒索病毒的爆發讓我意識到了部署儲存快照的重要性,特別是在提供儲存服務的伺服器上。

在 Linux 作業系統上,有多種實現儲存快照的方案,如使用 LVM、ZFS 儲存池、Btrfs 檔案系統等。

Btrfs 檔案系統具有透明壓縮、軟 RAID、快照等諸多實用功能,而且配置和管理起來比其他檔案系統都要簡單不少。

所以,Btrfs 目前是我心目中最完美的倉庫盤專用檔案系統!

注意

Btrfs 的 I/O 效能相比其他檔案系統還是要遜色不少的。如果磁碟需要大量且頻繁的 I/O 操作,建議選擇其他檔案系統。

snapper 是一款快照管理工具 + 生產力,支援多種檔案系統,當然也包括 Btrfs。

相比 Btrfs 內建的快照管理工具,snapper 可以更方便、直觀地對快照進行管理、比較,而且還有定時建立快照的功能。

二、實驗環境
  • 虛擬機器:VMware Fusion 10.0.1
  • 作業系統:CentOS 7.4.1708 最小安裝
  • 應用軟體: snapper 0.2.8
  • 虛擬磁碟:/dev/nvme0n1
  • 磁碟掛載點:/mnt/btrfs
三、準備工作3.1 安裝 snapper 快照管理工具 + 生產力
yum -y install snapper
3.2 把磁碟格式化成 Btrfs 格式
mkfs.btrfs -f /dev/nvme0n1
3.3 掛載磁碟
mount /dev/nvme0n1 /mnt/btrfs

注意

在進行下列操作時,請保持磁碟處於掛載狀態!

四、配置 snapper

在 Btrfs 中,snapper 是以子卷為單位管理快照的。我們要先為子卷建立設定檔才能管理快照。

這裡我們不另外劃分子卷,直接以 Btrfs 掛載點的根目錄來進行操作(根目錄也算是一個子卷)。

4.1 建立設定檔

命令基本用法

snapper -c <配置名稱> create-config <子卷路徑>

用法舉例

建立 /mnt/btrfs/ 的快照設定檔。

snapper -c snap_test create-config /mnt/btrfs/
4.2 刪除設定檔

命令基本用法

snapper -c <配置名稱> delete-config
4.3 列出現有設定檔

命令基本用法

snapper list-configs
五、快照的管理5.1 拍攝一個快照5.1.1 拍攝一個普通快照

命令基本用法

snapper -c <配置名稱> create [選項]
選項 功能
-p 列印快照的編號
-c <number|timeline> 指定清理演算法(後面 6.26.3 會詳細解釋)
--description=<描述> 為快照添加描述

用法舉例

/mnt/btrfs/ 上拍攝一個快照,描述資訊為 kuaizhao1,並列印其編號。

snapper -c snap_test create --description=kuaizhao1 -p

執行結果

1
5.1.2 拍攝一對快照

快照對中包含了 pre 快照和 post 兩種類型的快照。

一個 pre 快照需要對應一個 post 快照。

一般在進行檔案系統操作之前拍攝一個 pre 快照,在操作完成後再拍攝一個 post 快照。

快照對其實跟普通快照並沒有什麼本質上的區別,只是做個標記便於識別和管理而已。

命令基本用法

拍攝 pre 快照

snapper -c <配置名稱> create -t pre [選項]

拍攝 post 快照

snapper -c <配置名稱> create -t post --pre-number=<pre 快照編號> [選項]
選項 功能
-p 列印快照的編號
-c empty-pre-post 指定清理演算法(後面 6.26.3 會詳細解釋)
--description=<描述> 為快照添加描述

說明

快照編號可通過執行 5.2 的命令來查看,下同。

5.2 列出所有快照

命令基本用法

snapper -c <配置名稱> list

用法舉例

列出 /mnt/btrfs/ 中的所有快照。

snapper -c snap_test list

執行結果

# 前期:指快照對中 post 快照所對應的 pre 快照名# 清空:指清理演算法類型   | # | 前期 # | 日期                               | 使用者 | 清空     | 描述      | 使用者資料-------+---+--------+------------------------------------+------+----------+-----------+---------single | 0 |        |                                    | root |          | current   |             single | 1 |        | 2017年10月29日 星期日 13時23分48秒 | root |          | kuaizhao1 |        

說明

0 號快照並不是真正的快照,它表示當前檔案系統的狀態。

5.3 刪除快照

命令基本用法

snapper -c <配置名稱> delete <快照 1 編號> [<快照 2 編號>...]

用法舉例

刪除剛才建立的快照。

snapper -c snap_test delete 1
5.4 比較兩個快照的差異

命令基本用法

snapper -c <配置名稱> status <快照 1 編號>..<快照 2 編號>

執行完該命令之後,snapper 會分析快照 2 相比快照 1 有哪些差異,並將比較結果儲存到檔案中以便下次快速查詢。

具體有哪些差異要看檔案名稱以及對應的旗標。

旗標 說明
+ 檔案被建立
- 檔案被刪除
c 檔案內容被修改
t 檔案類型被修改(例如檔案變為目錄)
p 檔案許可權被修改
u 檔案屬主別修改
g 檔案屬組別修改
x 檔案擴充屬性被修改
a 檔案 ACL 許可權被修改

用法舉例

/mnt/btrfs/ 上建立檔案 1.txt,然後拍攝一個快照,再往 1.txt 添加一點內容,然後建立檔案 2.txt,再拍攝一個快照。比較這兩個快照的差異。

touch /mnt/btrfs/1.txt  # 建立 1.txtsnapper -c snap_test create # 拍攝快照echo "Hello" > /mnt/btrfs/1.txt # 新增內容touch /mnt/btrfs/2.txt  # 建立 2.txtsnapper -c snap_test create # 拍攝快照snapper -c snap_test status 1..2    # 比較快照 1 到快照 2 的差異

執行結果

c..... /mnt/btrfs/1.txt # 1.txt 被修改了+..... /mnt/btrfs/2.txt # 增加了 2.txt
5.5 復原快照

命令基本用法

snapper -c <配置名稱> undochange <快照編號>..<0>

注意

建���在復原快照之前先為目前狀態建立一個快照。

用法舉例

復原到上面建立的快照 1,並對比前後結果。

tree /mnt/btrfs/    # 查看復原前檔案snapper -c snap_test undochange 1..0    # 復原快照tree /mnt/btrfs/    # 查看復原後檔案

執行結果

# 復原前狀態/mnt/btrfs/├── 1.txt└── 2.txt# 執行復原命令後建立:0 修訂:1 刪除:1# 復原後狀態/mnt/btrfs/└── 1.txt
5.6 快照檔案的管理

由 snapper 所產生的快照預設儲存在子卷下面的 .snapshots 目錄中。我們來看一下它的結構:

/mnt/btrfs/.snapshots/├── 1   # 快照 1 目錄│   ├── info.xml    # 快照基本資料│   └── snapshot    # 快照內容│       └── 1.txt└── 2   # 快照 2 目錄    ├── filelist-1.txt  # 快照差異比較結果    ├── info.xml    # 快照基本資料    └── snapshot    # 快照內容        ├── 1.txt        └── 2.txt

可以看到,每個快照的基本資料和內容都在其對應編號的目錄中,子目錄 snapshot 的內容就是拍攝快照時子卷的所有內容。

快照檔案預設是唯讀,而且只有 root 可以訪問。如果需要恢複單一檔案,可以把快照裡面的內容用 cp 命令拷貝回來。

由於 Btrfs 檔案系統具有寫時複製的特性,所以如果檔案系統中的檔案沒有經常被替換,快照佔用的空間是非常小的。

六、快照的自動拍攝與清理

自動拍攝及清理快照是 snapper 的特色功能之一。

6.1 開啟快照自動拍攝
systemctl start snapper-timeline.timer ; systemctl enable snapper-timeline.timer

預設情況下,每小時自動拍攝一次快照。

如需修改時間間隔,請修改相關的定時器設定檔。修改方法這裡就不說了。

快照的清理演算法將被自動設定為 timeline

6.2 開啟快照自動清理
systemctl start snapper-cleanup.timer ; systemctl enable snapper-cleanup.timer

預設情況下,每天自動清理一次快照。

如需修改時間間隔,請修改相關的定時器設定檔。修改方法這裡就不說了。

不指定清理演算法的快照不會被自動清理。

6.3 修改快照自動清理的參數

設定檔位置:/etc/snapper/configs/<配置名稱>

常用欄位及對應的功能如下:

欄位名 功能
NUMBER_CLEANUP 開啟 number(基於數量) 的清理演算法
NUMBER_LIMIT 最大快照數量
TIMELINE_CLEANUP 開啟 timeline(基於時間) 的清理演算法
TIMELINE_LIMIT_HOURLY 每小時快照的保留數目
TIMELINE_LIMIT_DAILY 每天快照的保留數目
TIMELINE_LIMIT_WEEKLY 每周快照的保留數目
TIMELINE_LIMIT_MONTHLY 每月快照的保留數目
TIMELINE_LIMIT_YEARLY 每年快照的保留數目
EMPTY_PRE_POST_CLEANUP 開啟 empty-pre-post(基於快照對) 的清理演算法
EMPTY_PRE_POST_CLEANUP 開啟自動清理無變化快照對

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.