用 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 指定清理算法(后面 6.2 和 6.3 会详细解释)
--description=为快照添加描述

用法举例

/mnt/btrfs/
上拍摄一个快照,描述信息为 kuaizhao1
,并打印其编号。

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

执行结果

5.1.2 拍摄一对快照

快照对中包含了 pre
快照和 post
两种类型的快照。

一个 pre
快照需要对应一个 post
快照。

一般在进行文件系统操作之前拍摄一个 pre
快照,在操作完成后再拍摄一个 post
快照。

快照对其实跟普通快照并没有什么本质上的区别,只是做个标记便于识别和管理而已。

命令基本用法

拍摄 pre
快照

snapper -c  create -t pre [选项]

拍摄 post
快照

snapper -c  create -t post --pre-number=
 [选项]
选项功能
-p打印快照的编号
-c empty-pre-post 指定清理算法(后面 6.2
6.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  [...]

用法举例

删除刚才创建的快照。

snapper -c snap_test delete 1

5.4 比较两个快照的差异

命令基本用法

snapper -c  status ..

执行完该命令之后,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.txt
snapper -c snap_test create # 拍摄快照
echo "Hello" > /mnt/btrfs/1.txt # 添加内容
touch /mnt/btrfs/2.txt  # 创建 2.txt
snapper -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 ..

注意

建议在回滚快照之前先为当前状态创建一个快照。

用法举例

回滚到上面创建的快照 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开启自动清理无变化快照对

七、参考文献

  1. 在BTRFS文件系统中使用snapper快照功能
  2. ArchWiki - Snapper
  3. snapper 官方文档

您可能感兴趣的

Stratis Is Red Hat’s Plan For Next-Gen Linux... Stratis Is Red Hat's Plan For Next-Gen Linux Storage Without Btrfs Written by Michael Larabel inRed Hat on 2 August 2017 at 03:06 PM EDT.27 Com...
第二周 N28 1、Linux上的文件管理类命令都有哪些,其常用的使用方法及其相关示例演示。 文件类型: f: 常规文件,即f; d: directory,目录文件; b: block device, 块设备文件; block为单位,随机访问; c: charac...
Linux 4.14 File-System Benchmarks: Btrfs, EXT4, F2... Our latest Linux file-system benchmarking is looking at the performance of the mainline Btrfs, EXT4, F2FS, and XFS file-systems on the Linux 4.14 kern...
More KVM Modules Configuration Last year I blogged about blacklisting a video driver so that KVM virtual machines didn’t go into graphics mode . Now I’ve been working on some o...
Red Hat Enterprise Linux 7.4 发布,将淘汰 Btrfs 文件系统... Red Hat 的企业发行版 Red Hat Enterprise Linux(RHEL)发布了最新的 7.4 版 ,其中一个引人注目的变化是 RHEL 将淘汰 Btrfs 文件系统 。Red Hat 在声明中称,自 RHEL 6 发布以来 Btrfs 就一直处...
简书责编内容来自:简书 (源链) | 更多关于

阅读提示:酷辣虫无法对本内容的真实性提供任何保证,请自行验证并承担相关的风险与后果!
本站遵循[CC BY-NC-SA 4.0]。如您有版权、意见投诉等问题,请通过eMail联系我们处理。
酷辣虫 » 用 snapper 轻松玩转 Btrfs 的快照功能



专业 x 专注 x 聚合 x 分享 CC BY-NC-SA 4.0

使用声明 | 英豪名录