适用于 SUSE Linux Enterprise Desktop 12

4 通过 Snapper 进行系统恢复和快照管理

能够生成文件系统快照以便在 Linux 上实现回滚,这是过去常常要求提供的功能。如今,快照程序与 Btrfs 文件系统或精简的 LVM 卷相结合,填补了这一空白。

Btrfs 是全新的 Linux 写入时复制文件系统。它支持为子卷(每个物理分区中的一或多个单独的可装入文件系统)生成文件系统快照(复制子卷在某个时间点的状态)。XFS、Ext4 或 Ext3 格式的精简 LVM 卷上也支持快照。您可以使用快照程序创建并管理这些快照。快照程序有一个命令行和一个 YaST 界面。从 SUSE Linux Enterprise Server 12 开始,该程序还可以从 Btrfs 快照进行引导(请参见第 4.3 节 “通过从快照引导来执行系统回滚”了解更多信息)。

您可以使用快照程序执行以下任务:

4.1 默认设置

SUSE Linux Enterprise Desktop 中设置 Snapper 的目的是提供系统更改的撤消和恢复工具。默认情况下,SUSE Linux Enterprise Desktop 的根分区 (/) 使用 Btrfs 格式。如果根分区 (/) 足够大(约为 8 GB 以上),则创建快照功能会自动启用。默认不允许创建除 / 以外的分区的快照。

创建快照时,快照与原始点都会指向文件系统中的同一个块。因此一开始时快照并不占用额外的磁盘空间。但如果修改了原始文件系统中的数据,则会复制已更改的数据块,同时将旧的数据块作为快照保留。因此,快照就将占用与已修改数据相同的空间。所以久而久之,分配给快照的空间便会不断增长。其结果是,即便从包含快照的 Btrfs 文件系统删除文件可能也不会释放磁盘空间!

注意
注意:快照存储位置

快照始终存放在创建快照的那个分区或子卷中,而无法将快照存储到其他分区或子卷。

因此,包含快照的分区需要比常规分区大才行。确切的空间大小主要取决于要保留的快照数量以及数据更改量。一般来说,您应考虑使用两倍于常规使用磁盘空间的空间大小。

尽管快照本身在技术方面并无区别,但我们根据生成它们的不同情形将它们分成三类。

快照类型
时间线快照

每小时创建一个快照,且旧的快照会自动删除。默认情况下,会保留最近十天、最近十个月以及最近十年的首张快照。时间线快照默认会启用,但根分区除外。

安装快照

每次使用 YaST 或 Zypper 安装一个或多个包时,会创建一对快照:一个是在安装开始前(),另一个是在安装完成后()。如果安装了内核等重要的系统组件,快照对会标记为重要 (important=yes)。旧的快照会自动删除。默认情况下,会保留最近十个重要快照和最近十个普通快照(包括管理快照)。安装快照默认为启用状态。

管理快照

每次使用 YaST 管理系统时都会创建一对快照:一个是在 YaST 模块启动之前(),另一个是在该模块关闭之后()。旧的快照会自动删除。默认情况下,会保留最近十个重要快照和最近十个普通快照(包括安装快照)。管理快照默认为启用状态。

出于多种不同的理由,有些目录需要排除在快照之外。以下列表显示了排除的所有目录:

快照中排除的目录
/boot/grub2/x86_64-efi、

不能回滚引导加载程序配置。

/home

如果独立的分区中没有 /home,便会将该目录排除以免在回滚时发生数据丢失。

/opt/var/opt

第三方产品和附加产品往往会安装到 /opt 下。排除此目录是为了防止在回滚时卸装这些应用程序。

/srv

包含 Web 和 FTP 服务器的数据。排除此目录是为了防止在回滚时发生数据丢失。

/tmp/var/tmp/var/crash

包含临时文件的所有目录都会从快照中排除。

/var/lib/bind

包含 DNS 服务器的区域数据。排除该目录是为了确保回滚后名称服务器仍能运作。

/var/lib/mailman/var/spool

包含邮件或邮件队列的目录会排除,以免在回滚后造成邮件丢失。

/var/lib/pgqsl

包含 PostgreSQL 数据。

/var/log

日志文件所在的位置。排除该目录是为了在对受损的系统进行回滚后能够对日志文件进行分析。

4.1.1 自定义设置

SUSE Linux Enterprise Desktop 自带的默认设置设计合理,适合大多数使用情况。不过,您可以根据自己的需要对创建自动快照以及保留快照的各个方面进行配置。

4.1.1.1 禁用/启用快照

这三种快照类型(时间线、安装、管理)都可以单独启用或禁用。

禁用/启用时间线快照

启用.  snapper -c root set-config "TIMELINE_CREATE=yes"

禁用.  snapper -c root set-config "TIMELINE_CREATE=no"

时间线快照默认会启用,但根分区除外。

禁用/启用安装快照

启用:  安装 snapper-zypp-plugin

禁用:  卸装 snapper-zypp-plugin

安装快照默认为启用状态。

禁用/启用管理快照

启用: /etc/sysconfig/yast2 中将 USE_SNAPPER 设置为 yes

禁用: /etc/sysconfig/yast2 中将 USE_SNAPPER 设置为 no

管理快照默认为启用状态。

4.1.1.2 控制安装快照

使用 YaST 或 Zypper 安装包时所创建的快照会由 snapper-zypp-plugin 进行处理。何时创建快照由 XML 配置文件 /etc/snapper/zypp-plugin.conf 定义。默认情况下,该文件如下所示:

 1 <?xml version="1.0" encoding="utf-8"?>
 2 <snapper-zypp-plugin-conf>
 3  <solvables>
 4   <solvable match="w"1 important="true"2>kernel-*3</solvable>
 5   <solvable match="w" important="true">dracut</solvable>
 6   <solvable match="w" important="true">glibc</solvable>
 7   <solvable match="w" important="true">systemd*</solvable>
 8   <solvable match="w" important="true">udev</solvable>
 9   <solvable match="w">*</solvable>4
10  </solvables>
11 </snapper-zypp-plugin-conf>

1

match 属性定义模式是 Unix 外壳风格的通配符 (w) 还是 Python 正则表达式 (re)。

2

如果给出的模式相匹配而且对应的包标记为重要(例如内核包),则快照也会标记为重要。

3

用于匹配包名称的模式。根据 match 属性的设置,特殊字符可能会被解析为外壳通配符或是正则表达式。此模式匹配名称以 kernel- 开头的所有包。

4

此行无条件匹配所有包。

在这样的快照配置下,只要安装了包,就会创建快照对(第 9 行)。如果安装了标记为重要的内核、dracut、glibc、systemd 或 udev 包,快照对也会标记为重要(第 4 行到第 8 行)。所有规则都会进行评估。

要禁用某规则,可以删除该规则或通过 XML 注释的方式将其停用。举例来说,如果不希望系统在每次安装包时创建快照对,可以将第 9 行注释掉:

 1 <?xml version="1.0" encoding="utf-8"?>
 2 <snapper-zypp-plugin-conf>
 3  <solvables>
 4   <solvable match="w" important="true">kernel-*</solvable>
 5   <solvable match="w" important="true">dracut</solvable>
 6   <solvable match="w" important="true">glibc</solvable>
 7   <solvable match="w" important="true">systemd*</solvable>
 8   <solvable match="w" important="true">udev</solvable>
 9   <!-- <solvable match="w">*</solvable> -->
10  </solvables>
11 </snapper-zypp-plugin-conf>

4.1.1.3 控制快照存档

快照会占用磁盘空间。为了防止磁盘空间不足进而导致系统中断,旧的快照会自动删除。默认情况下会保留以下快照:

  • 最近十天、最近十个月以及最近十年的首个快照

  • 标记为重要的最近十个安装快照对

  • 最近十个安装/管理快照

有关如何更改这些值的指导,请参考第 4.4.1 节 “管理现有配置”

4.1.1.4 在精简的 LVM 卷上使用快照程序

除了在 Btrfs 文件系统上生成快照之外,快照程序还支持在 XFS、Ext4 或 Ext3 格式的精简 LVM 卷(支持在常规 LVM 卷上生成快照)上生成快照。有关 LVM 卷的详细信息和设置指导,请参考Section “LVM Configuration”, Chapter 12, Advanced Disk Setup, Deployment Guide

为了在精简 LVM 卷上使用快照程序,您需要为其创建快照程序配置。在 LVM 上要使用 --fstype=lvm(文件系统) 指定文件系统。文件系统的有效值为 ext3etx4xfs。示例:

snapper -c lvm create-config --fstype="lvm(xfs)" /thin_lvm

您可以按照第 4.4.1 节 “管理现有配置”中的说明根据需要调整此配置。

4.2 使用快照程序撤销更改

SUSE Linux Enterprise Desktop 上的 Snapper 经过预配置,可以用来撤消 zypper 和 YaST 所做的更改。要实现此功能,请对快照程序进行配置,让其在每次运行 zypper 和 YaST 前后创建一个快照对。您也可以使用快照程序来恢复被意外删除或修改的系统文件。要实现此目的,需要对根分区启用时间线快照 — 有关细节,请参见第 4.1.1.1 节 “禁用/启用快照”

默认情况下,上述的自动快照针对根分区及其子卷所配置。若想让 /home 等其他分区也可以生成快照,您可以创建自定义配置。

重要
重要:撤销更改和回滚

通过快照来恢复数据时,必须知道,快照程序可以处理两种完全不同的情形:

撤销更改

在如下文中所述撤销更改时,系统会对两个快照进行比较,并撤销两个快照之间的更改。借助这种方式可以明确地选择要恢复的文件。

回滚

在如第 4.3 节 “通过从快照引导来执行系统回滚”中所述进行回滚时,系统会重设置为创建快照时的状态。

撤销更改时,可以将快照与现有系统进行比较。如果比较后恢复所有发生变化的文件,那么结果会和回滚完全相同。但是,还是建议使用第 4.3 节 “通过从快照引导来执行系统回滚”中介绍的方法进行回滚,因为回滚操作的速度更快,而且您可以在进行回滚前查看系统。

警告
警告:数据一致性

在创建快照时并没有能确保数据一致性的机制。如果在创建快照的同时写入某个文件(例如数据库),将导致文件损坏或写入不完整。恢复此类文件会产生问题。而且,有些系统文件(例如 /etc/mtab)甚至永远都无法恢复。因此强烈建议您要始终仔细查看已更改文件及其差异的列表。只恢复您要还原的操作真正包含的文件。

4.2.1 撤销 YaST 和 Zypper 更改

如果在安装时使用 Btrfs 设置根分区,则将自动安装快照程序(经过预配置,可以回滚 YaST 或 Zypper 所做的更改)。每次启动 YaST 模块或 Zypper 事务时,会创建两个快照:即截获模块启动之前文件系统状态的前快照以及截获模块完成之后状态的后快照

您可以使用 YaST 快照程序模块或 snapper 命令行工具,通过从前快照恢复文件来撤销 YaST 或 Zypper 所做的更改。您也可以使用该工具比较这两张快照,以查看更改了哪些文件。您还可以显示文件的两个版本之间的差异 (diff)。

过程 4.1 使用 YaST 快照程序模块撤销更改
  1. 从 YaST 中的其他部分或通过输入 yast2 snapper 来启动快照程序模块。

  2. 务必将当前配置设置为。除非手动添加自己的快照程序配置,否则请始终做此设置。

  3. 从列表中选择前后快照对。YaST 和 Zypper 快照对都属于前后类型。在说明栏中,YaST 快照以 zypp(y2base) 标记;Zypper 快照以 zypp(zypper)标记。

  4. 单击显示更改,会打开一个文件列表显示两张快照之间的差异。

  5. 查看文件列表。要显示文件的前后版本之间的差异,请从列表中选中该文件。

  6. 要恢复一个或多个文件,请通过勾选相应的复选框选择相关的文件或目录。单击恢复选定,然后单击以确认该操作。

    要恢复单一文件,请单击其名称以激活该文件的差异视图。单击从第一个快照恢复,然后单击予以确认。

过程 4.2 使用 snapper 命令撤销更改
  1. 运行 snapper list -t pre-post 以获取 YaST 与 Zypper 快照的列表。在说明栏中,YaST 快照以 yast 模块名称标记;Zypper 快照以 zypp(zypper) 标记。

    
    
    
    root # snapper list -t pre-post
    Pre # | Post # | Pre Date                      | Post Date                     | Description  
    ------+--------+-------------------------------+-------------------------------+--------------
    311   | 312    | Tue 06 May 2014 14:05:46 CEST | Tue 06 May 2014 14:05:52 CEST | zypp(y2base) 
    340   | 341    | Wed 07 May 2014 16:15:10 CEST | Wed 07 May 2014 16:15:16 CEST | zypp(zypper) 
    342   | 343    | Wed 07 May 2014 16:20:38 CEST | Wed 07 May 2014 16:20:42 CEST | zypp(y2base) 
    344   | 345    | Wed 07 May 2014 16:21:23 CEST | Wed 07 May 2014 16:21:24 CEST | zypp(zypper) 
    346   | 347    | Wed 07 May 2014 16:41:06 CEST | Wed 07 May 2014 16:41:10 CEST | zypp(y2base) 
    348   | 349    | Wed 07 May 2014 16:44:50 CEST | Wed 07 May 2014 16:44:53 CEST | zypp(y2base) 
    350   | 351    | Wed 07 May 2014 16:46:27 CEST | Wed 07 May 2014 16:46:38 CEST | zypp(y2base) 
  2. 使用 snapper status .. 命令以获取快照对的已更改文件列表。文件内容发生了更改会以 c 标记、添加了文件会以 + 标记、删除了文件会以 - 标记。

    root # snapper status 350..351
    +..... /usr/share/doc/packages/mikachan-fonts
    +..... /usr/share/doc/packages/mikachan-fonts/COPYING
    +..... /usr/share/doc/packages/mikachan-fonts/dl.html
    c..... /usr/share/fonts/truetype/fonts.dir
    c..... /usr/share/fonts/truetype/fonts.scale
    +..... /usr/share/fonts/truetype/みかちゃん-p.ttf
    +..... /usr/share/fonts/truetype/みかちゃん-pb.ttf
    +..... /usr/share/fonts/truetype/みかちゃん-ps.ttf
    +..... /usr/share/fonts/truetype/みかちゃん.ttf
    c..... /var/cache/fontconfig/7ef2298fde41cc6eeb7af42e48b7d293-x86_64.cache-4
    c..... /var/lib/rpm/Basenames
    c..... /var/lib/rpm/Dirnames
    c..... /var/lib/rpm/Group
    c..... /var/lib/rpm/Installtid
    c..... /var/lib/rpm/Name
    c..... /var/lib/rpm/Packages
    c..... /var/lib/rpm/Providename
    c..... /var/lib/rpm/Requirename
    c..... /var/lib/rpm/Sha1header
    c..... /var/lib/rpm/Sigmd5
  3. 要显示某份文件的差异,请运行 snapper diff .. 文件名。如果没有指定文件名,则会显示所有文件的差异。

    root # snapper diff 350..351 /usr/share/fonts/truetype/fonts.scale
    --- /.snapshots/350/snapshot/usr/share/fonts/truetype/fonts.scale	2014-04-23 15:58:57.000000000 +0200
    +++ /.snapshots/351/snapshot/usr/share/fonts/truetype/fonts.scale	2014-05-07 16:46:31.000000000 +0200
    @@ -1,4 +1,4 @@
    -1174
    +1486
     ds=y:ai=0.2:luximr.ttf -b&h-luxi mono-bold-i-normal--0-0-0-0-c-0-iso10646-1
     ds=y:ai=0.2:luximr.ttf -b&h-luxi mono-bold-i-normal--0-0-0-0-c-0-iso8859-1
    [...]
  4. 要恢复一或多份文件,请运行 snapper -v undochange .. 文件名。如果没有指定文件名,则会恢复所有已更改的文件。

    root # snapper -v undochange 350..351
         create:0 modify:13 delete:7
         undoing change...
         deleting /usr/share/doc/packages/mikachan-fonts
         deleting /usr/share/doc/packages/mikachan-fonts/COPYING
         deleting /usr/share/doc/packages/mikachan-fonts/dl.html
         deleting /usr/share/fonts/truetype/みかちゃん-p.ttf
         deleting /usr/share/fonts/truetype/みかちゃん-pb.ttf
         deleting /usr/share/fonts/truetype/みかちゃん-ps.ttf
         deleting /usr/share/fonts/truetype/みかちゃん.ttf
         modifying /usr/share/fonts/truetype/fonts.dir
         modifying /usr/share/fonts/truetype/fonts.scale
         modifying /var/cache/fontconfig/7ef2298fde41cc6eeb7af42e48b7d293-x86_64.cache-4
         modifying /var/lib/rpm/Basenames
         modifying /var/lib/rpm/Dirnames
         modifying /var/lib/rpm/Group
         modifying /var/lib/rpm/Installtid
         modifying /var/lib/rpm/Name
         modifying /var/lib/rpm/Packages
         modifying /var/lib/rpm/Providename
         modifying /var/lib/rpm/Requirename
         modifying /var/lib/rpm/Sha1header
         modifying /var/lib/rpm/Sigmd5
         undoing change done
警告
警告:还原用户添加

建议不要使用快照程序通过撤销更改的方式来还原用户添加。因为快照中排除了一些目录,文件系统中将保留属于用户的文件。如果使用已删除用户的 ID 创建新用户,该用户将继承原用户的文件。因此,强烈建议您使用 YaST 的用户和组管理工具来删除用户。

4.2.2 使用快照程序恢复文件

除了安装和管理快照之外,快照程序还会创建时间线快照。您可以使用这些备份快照还原意外删除的文件或文件的前一个版本。您也可以使用快照程序的差异功能来找到在某个时间点所做的修改。

还原文件功能对于默认情况下不会生成快照的那些子卷或分区上的数据特别有用。例如,要从主目录还原文件,可以为自动生成时间线快照的 /home 创建单独的快照程序配置。有关指导,请参见第 4.4 节 “创建并修改快照程序配置”

警告
警告:恢复文件和回滚

从根文件系统(由快照程序的根配置定义)生成的快照可用于执行系统回滚。进行此类回滚时,建议先从快照引导,然后再执行回滚。有关详细信息,请参见第 4.3 节 “通过从快照引导来执行系统回滚”

从根文件系统快照还原所有文件(如下文中所述)也可以达到回滚的目的,但不建议这样做。您可以还原个别文件,例如还原 /etc 目录中的某个配置文件,但不能从快照中还原一系列文件。

此限制仅针对根文件系统的快照!

过程 4.3 使用 YaST 快照程序模块恢复文件
  1. 从 YaST 中的其他部分或通过输入 yast2 snapper 来启动快照程序模块。

  2. 选择要从中选择快照的当前配置

  3. 选择要用于恢复文件的时间线快照,并选择显示更改。时间线快照的类型为单一,描述为时间线

  4. 单击文件名从文本框中选择文件。系统会显示快照版本和当前系统之间的差异。勾选复选框来选中要恢复的文件。请对要恢复的所有文件执行此操作。

  5. 单击恢复选定,然后单击以确认该操作。

过程 4.4 使用 snapper 命令恢复文件
  1. 运行以下命令来显示特定配置的一系列时间线快照:

    snapper -c CONFIG list -t single | grep timeline

    CONFIG 需要替换为现有的快照程序配置。使用 snapper list-configs 显示列表。

  2. 运行以下命令来显示指定快照中发生更改的一系列文件:

    snapper -c CONFIG status SNAPSHOT_ID>..0

    SNAPSHOT_ID 替换为您要用于恢复文件的快照的 ID。

  3. (可选)运行以下命令列出当前文件版本与快照中文件版本的差异:

    snapper -c CONFIG diff SNAPSHOT_ID..0 FILE NAME

    如果不指定 <FILE NAME>,则会显示所有文件的差异。

  4. 要恢复一个或多个文件,请运行

    snapper -c CONFIG -v undochange
          SNAPSHOT_ID..0 FILENAME1 FILENAME2

    如果没有指定文件名,则会恢复所有已更改的文件。

4.3 通过从快照引导来执行系统回滚

SUSE Linux Enterprise Desktop 上包含的 GRUB 2 版本可以从 Btrfs 快照引导。与快照程序的回滚功能相结合,就能恢复配置错误的系统。快照程序创建的所有快照都可用于引导,而且可以从引导菜单中选择。

重要
重要:可引导的快照

只有根文件系统(由快照程序的根配置定义)的快照可用于引导。

引导快照时,快照中包含的文件系统部分会装载为只读状态;从快照中排除的所有其他文件系统和部分会加载为读写状态,并且可以修改。

重要
重要:撤销更改和回滚

通过快照来恢复数据时,必须知道,快照程序可以处理两种完全不同的情形:

撤销更改

在如第 4.2 节 “使用快照程序撤销更改”中所述撤销更改时,系统会对两个快照进行比较,并还原两个快照之间的更改。通过这种方式可以明确指定不还原所选的文件。

回滚

在如下文所述进行回滚时,系统会重设置为生成快照时的状态。

要从可引导快照进行回滚,必须满足以下要求。执行默认安装时,系统会进行相应的设置。

从可引导快照进行回滚的要求
  • 根文件系统必须是 Btrfs。不支持从 LVM 卷快照引导。

  • 根文件系统必须在单个设备、单个分区和单个子卷上。/srv 等快照中排除的目录(参见快照中排除的目录了解完整列表)可以位于单独的分区。

  • 系统应能够借助安装的引导加载程序进行引导。

要从可引导快照进行回滚,请执行以下操作:

  1. 引导系统。在引导菜单中选择可引导快照,然后选择要引导的快照。快照会按日期顺序从近到远一一列出。

  2. 登录系统。仔细检查是否一切运行正常。请注意,您无法对快照包含的任何目录进行写入。写入其他目录的数据无论您下一步选择什么操作都不会丢失。

  3. 根据您是否要执行回滚,选择下一步操作:

    1. 如果您不想回滚到该状态的系统,则重引导,然后进入当前的系统状态、选择不同的快照或是启动救援系统。

    2. 如果您想要执行回滚,则运行

      sudo snapper rollback

      然后重引导。在引导屏幕上,选择默认的引导项以重引导至恢复后的系统。

4.3.1 限制

不可能实现完整的系统回滚,即将整个系统恢复到生成快照时完全相同的状态。

4.3.1.1 快照中排除的目录

根文件系统快照并不包含所有目录。请参见快照中排除的目录了解详情和背后的原因。正因为此,这些目录中的数据并不会恢复,也就造成了以下限制。

回滚后,附加产品和第三方软件可能会无法使用

在快照中排除的子卷(如 /opt)上安装了数据的应用程序和附加产品,如果在快照中包含的子卷上也安装了部分应用程序数据,则回滚后,这些应用程序和附加产品将无法工作。要解决此问题,需要重新安装该应用程序或附加产品。

文件访问问题

如果某个应用程序在快照和当前系统之间更改了文件权限和/或所有权,回滚后,该应用程序可能无法访问这些文件。请在回滚后重设置受影响的文件的权限和/或所有权。

数据格式不兼容

如果服务或应用程序在快照和当前系统之间建立了新的数据格式,回滚后,该应用程序可能无法读取受影响的数据文件。

混合了代码和数据的子卷

诸如 /srv 之类的子卷可能同时包含代码和数据。回滚可能会导致代码失效。例如,降级 PHP 的版本可能会导致 Web 服务器的 PHP 脚本被破坏。

用户数据

如果回滚操作从系统中删除了用户,这些用户在快照中未包含的目录上所拥有的数据并不会删除。如果使用相同的用户 ID 创建新用户,该用户便会继承原用户的文件。请使用 find 之类的工具找到并删除孤立的文件。

4.3.1.2 不回滚引导装载程序数据

无法回滚引导装载程序,因为引导装载程序的所有阶段必须相互匹配。这在回滚时并不能保证。

4.4 创建并修改快照程序配置

每一个分区或 Btrfs 子卷都有一个专用的配置文件用于定义快照程序的行为方式。这些配置文件位于 /etc/snapper/configs/ 下。使用快照程序为 / 目录安装的默认配置以 root 命名。它负责创建并管理 YaST 和 Zypper 快照,还包括 / 的每小时备份快照。

您可以为使用 Btrfs 格式化的其他分区或 Btrfs 分区上的现有子卷创建自己的配置。在以下示例中,我们将设置快照程序配置,以便对驻留在单独的、以 Btrfs 格式化且安装点为 /srv/www 的分区的 Web 服务器数据进行备份。

创建配置后,您可以直接使用 snapper,也可以使用 YaST 快照程序模块,从这些快照恢复文件。在 YaST 中,您需要选择您的当前配置,同时还需要使用全局开关 -c 指定 snapper 的配置(例如 snapper -c myconfig list)。

要创建新的快照程序配置,请运行 snapper create-config

snapper -c www-data1 create-config /srv/www2

1

配置文件的名称。

2

要生成快照的分区或 Btrfs 子卷的装入点。

此命令将使用合理的默认值(取自 /etc/snapper/config-templates/default)创建新的配置文件 /etc/snapper/configs/www-data。有关如何调整这些值的指导,请参考第 4.4.1 节 “管理现有配置”

提示
提示:配置的默认值

新配置的默认值取自 /etc/snapper/config-templates/default。要使用自己的一组默认值,请在相同的目录中创建此文件的副本然后按照需要进行调整。要使用此功能,请在 create-config 命令中指定 -t 选项:

snapper -c www-data create-config -t my_defaults /srv/www

4.4.1 管理现有配置

snapper 有多个子命令可用于管理现有的配置。您可以列出、显示这些配置,也可以对它们进行删除和修改:

列出配置

使用 snapper list-configs 命令可以显示所有现有的配置:

root # snapper list-configs
Config | Subvolume
-------+----------
root   | /        
usr    | /usr     
local  | /local
删除配置

使用 snapper -c CONFIG delete-config 子命令可以删除配置。CONFIG 应替换为执行 snapper list-configs 命令后所显示的某个配置名称。

显示配置

使用 snapper -c CONFIG get-config 子命令可以显示指定的配置。CONFIG 应替换为执行 snapper list-configs 命令后所显示的某个配置名称。请参见第 4.4.1.1 节 “配置数据”以了解有关配置选项的更多信息。

使用 snapper -c CONFIG set-config OPTION=VALUE 子命令可以修改指定配置中的选项。CONFIG 应替换为执行 snapper list-configs 命令后所显示的某个配置名称。OPTIONVALUE 的可能值可参见第 4.4.1.1 节 “配置数据”

4.4.1.1 配置数据

每个配置都包含一系列选项,这些选项可以通过命令行进行修改。以下列表提供了每个选项的详细信息:

ALLOW_GROUPSALLOW_USERS

授予普通用户使用快照的权限。有关详细信息,请参见第 4.4.1.2 节 “以普通用户身份使用快照程序”

默认值是 ""

BACKGROUND_COMPARISON

定义在创建前后快照后是否要在后台对他们进行比较。

默认值为 "yes"

EMPTY_PRE_POST_CLEANUP

如果设置为 yes,系统会删除前后快照相同的快照对。

默认值为 "no"

EMPTY_PRE_POST_MIN_AGE

定义前后快照相同的快照对在自动删除之前必须保留的最短时限(以秒为单位)。

默认值为 "1800"

FSTYPE

分区的文件系统类型。不更改。

默认值为 "btrfs"

NUMBER_CLEANUP

定义当快照总数超出 NUMBER_LIMIT 中指定的数值,同时快照超出 NUMBER_MIN_AGE 中指定的时限时,是否自动删除旧的安装和管理快照。有效值:yesno

默认值为 "no"

注意
注意:限制和时限

NUMBER_LIMITNUMBER_LIMIT_IMPORTANTNUMBER_MIN_AGE 始终都会评估。只有同时符合全部条件才会删除快照。如果想不考虑时限而始终保留一定数量的快照,则可将 NUMBER_MIN_AGE 设置为 0。另外,如果快照超过一定时限之后不想再保留,可以将 NUMBER_LIMITNUMBER_LIMIT_IMPORTANT 设置为 0

NUMBER_LIMIT

NUMBER_CLEANUP 设置为 yes 时,定义要保留的没有标记为重要的安装快照对和管理快照对的数量。所保留的会是最新的那些快照。

默认值为 "50"

NUMBER_LIMIT_IMPORTANT

NUMBER_CLEANUP 设置为 yes 时,定义要保留的标记为重要的快照对数。所保留的会是最新的那些快照。

默认值为 "10"

NUMBER_MIN_AGE

定义快照对在自动删除前必须保留的最小时限(以秒为单位)。

默认值为 "1800"

SUBVOLUME

分区或子卷生成快照的安装点。不更改。

SYNC_ACL

如果普通用户要使用快照程序(请参见第 4.4.1.2 节 “以普通用户身份使用快照程序”),这些用户必须能够访问 .snapshot 目录并且能够读取其中的文件。如果 SYNC_ACL 设置为 yes,快照程序会通过 ACL 自动允许 ALLOW_USERS 和 ALLOW_GROUPS 项指定的用户和组访问这些目录及其中的文件。

默认值为 "no"

TIMELINE_CLEANUP

定义当快照数量超出 TIMELINE_LIMIT_* 选项指定的数值同时快照超出 TIMELINE_MIN_AGE 中指定的时限时是否自动删除旧快照。有效值:yesno

默认值为 "no"

TIMELINE_CREATE

如果设置为 yes,便会每小时创建一个快照。这是目前唯一一种可以自动创建快照的方式,因此强烈建议将其设置为 yes。有效值:yesno

默认值为 "no"

TIMELINE_LIMIT_DAILYTIMELINE_LIMIT_HOURLYTIMELINE_LIMIT_MONTHLYTIMELINE_LIMIT_YEARLY

按小时、天、月、年保留的快照数量。

每一项的默认值均为 "10"

例 4.1 时间线配置示例
TIMELINE_CLEANUP="yes"
TIMELINE_CREATE="yes"
TIMELINE_LIMIT_DAILY="10"
TIMELINE_LIMIT_HOURLY="10"
TIMELINE_LIMIT_MONTHLY="10"
TIMELINE_LIMIT_YEARLY="10"
TIMELINE_MIN_AGE="1800"

此示例配置能够实现按小时生成将自动清理的快照。TIMELINE_MIN_AGETIMELINE_LIMIT_* 始终会同时进行评估。在本示例中,快照删除前的最小保留时限设置为 30 分钟(1800 秒)。因为我们会每小时创建一次快照,所以确保了只会保留最近的快照。如果 TIMELINE_LIMIT_DAILY 设置为非零值,则表示还会保留当天的首张快照。

快照保留
  • 每小时:最近创建的十张快照。

  • 每天:保留最近十天内每天创建的首张快照。

  • 每月:保留最近十个月内每月的最后一天创建的首张快照。

  • 每年:保留最后十年内每年的最后一天创建的首张快照。

TIMELINE_MIN_AGE

定义快照在自动删除前必须保留的最小时限(以秒为单位)。

默认值为 "1800"

4.4.1.2 以普通用户身份使用快照程序

默认情况下,快照程序只能由 root 用户使用。但在特定情况下,某些组或用户也需要创建快照或通过还原至快照来撤销更改:

  • 想要为 /srv/www 生成快照的网站管理员

  • 想要为自己的主目录生成快照的用户

此类情况下,可以创建为用户和(或)组授予权限的快照程序配置。指定的用户必须能连接并访问相应的 .snapshots 目录。要实现这一点,最简单的方法是将 SYNC_ACL 选项设置为 yes

过程 4.5 让普通用户可以使用快照程序

请注意,此过程中的所有步骤都需要由 root 用户运行。

  1. 如果不存在,则请为用户可以使用快照程序的分区或子卷创建快照程序配置。有关指导,请参见第 4.4 节 “创建并修改快照程序配置”。示例:

    snapper --config web_data create /srv/www
  2. /etc/snapper/configs/CONFIG 下创建配置文件,其中“CONFIG”是您在上一步中使用 -c/--config 指定的值(例如 /etc/snapper/configs/web_data)。按照需要进行调整;有关详细信息,请参见第 4.4.1 节 “管理现有配置”

  3. ALLOW_USERS 和(或)ALLOW_GROUPS 设置值,以分别为用户和(或)组授予权限。多个条目需要使用 Space 分隔。例如,要为用户 www_admin 授予权限,可运行:

    snapper -c web_data set-config "ALLOW_USERS=www_admin" SYNC_ACL="yes"
  4. 此时,指定的用户和(或)组便可以使用指定的快照程序配置。您可以使用 list 命令对其进行测试,例如:

    www_admin:~ > snapper -c web_data list

4.5 手动创建和管理快照

通过配置,快照程序将不只限于自动创建和管理快照;您也可以使用命令行工具或 YaST 模块手动创建快照对(前后)或单个快照。

所有快照程序操作皆针对现有配置执行(有关详细信息,请参见第 4.4 节 “创建并修改快照程序配置”)。您可以只为存在配置的分区或卷生成快照。默认情况下使用系统配置 (root)。如果想要为自己的配置创建或管理快照,则需要进行明确选择。使用 YaST 中的当前配置下拉框,或在命令行上指定 -c(即 snapper -c 我的配置 命令)。

4.5.1 快照元数据

每一张快照均由快照本身以及一些元数据组成。创建快照时,您还需要指定元数据。修改快照就意味着更改其元数据——您无法修改其内容。每一张快照可以使用以下元数据:

  • 类型:快照类型,有关详细信息,请参见第 4.5.1.1 节 “快照类型”。不能更改此数据。

  • 编号:快照的唯一编号。不能更改此数据。

  • 前编号:指定相应前快照的编号。仅适用于后类型。不能更改此数据。

  • 说明:快照的说明。

  • 用户数据:扩展的说明。您可使用逗号分隔的“键=值”列表格式指定自定义数据:reason=testing, project=foo。此字段也可用于将快照标记为重要 (important=yes) 以及列出创建快照的用户 (user=tux)。

  • 清理算法:快照的清理算法。有关详细信息,请参见第 4.5.1.2 节 “清理算法”

4.5.1.1 快照类型

快照程序能够分清三种不同类型的快照:前快照、后快照以及单一快照。从物理上讲,这三种快照没有什么不同,但快照程序会针对不同类型采用不同的处理方式。

修改的文件系统快照。每一张快照都有一个对应的快照。目的之一就是为了自动创建 YaST/Zypper 快照。

修改的文件系统快照。每一张快照都有一个对应的快照。目的之一就是为了自动创建 YaST/Zypper 快照。

单一

独立的快照。目的之一就是为了自动创建每小时快照。此为创建快照时的默认类型。

4.5.1.2 清理算法

快照程序提供有三种清理旧快照的算法。这些算法以每天计划作业方式执行。快照的清理频率在分区或子卷的快照程序配置中定义(有关详细信息,请参见第 4.4.1 节 “管理现有配置”)。

数量

当达到某一快照计数时将删除旧快照。

时间线

将删除超过一定时限的旧快照,但保留一定量的每小时、每天、每月和每年快照。

无差异前后快照对

将删除无差异的前后快照对。

4.5.2 创建快照

通过运行 snapper create 或单击 YaST 的快照程序模块中的创建来创建快照。以下示例解释了如何从命令行创建快照。使用 YaST 界面会比较简单。

提示
提示:快照说明

为了便于日后确定快照的用途,您应始终指定有意义的说明。甚至可以通过用户数据选项指定更多信息。

snapper create --description "2014 年第二周快照"

创建默认 (root) 配置的独立快照(单一类型)并附加说明。因为没有指定清理算法,将不会自动删除快照。

snapper --config home create --description "~tux 中清理"

为名为 home 的自定义配置创建独立快照(单一类型)并附加说明。因为没有指定清理算法,将不会自动删除快照。

snapper --config home create --description "每日数据备份" --cleanup-algorithm timeline

为名为 home 的自定义配置创建独立快照(单一类型)并附加说明。一旦符合为配置中的时间线清理算法指定的条件,便会自动删除文件。

snapper create --type pre--print-number--description "Apache 配置清理之前"--userdata "important=yes"

创建类型的快照并打印快照编号。创建用于保存之前之后状态的快照对所需的首个命令。该快照标记为重要。

snapper create --type post--pre-number 30--description "Apache 配置清理之后"--userdata "important=yes"

创建类型的快照且其对应的快照编号为 30。创建用于保存之前之后状态的快照对所需的第二个命令。该快照标记为重要。

snapper create --command COMMAND--description "命令前后"

运行命令前后自动创建快照对。此选项仅在于命令行上使用 snapper 时可用。

4.5.3 修改快照元数据

您可以使用快照程序修改说明、清理算法以及快照的用户数据。其他元数据均无法更改。以下示例解释了如何从命令行修改快照。使用 YaST 界面会比较简单。

要在命令行上修改快照,您需要知道其编号。使用 snapper list 可显示所有快照及其编号。

YaST 的快照程序模块已列出所有快照。从列表中选择一个快照,然后单击修改

snapper modify --cleanup-algorithm "timeline" 10

修改默认 (root) 配置的第 10 张快照的元数据。清理算法设置为 timeline

snapper --config home modify --description "每日备份" -cleanup-algorithm "timeline"120

修改名为 home 的自定义配置的第 120 张快照的元数据。将设置新的说明并取消设置清理算法。

4.5.4 删除快照

要使用 YaST 的快照程序模块删除快照,请从列表中选择快照,然后单击删除

要使用命令行工具删除快照,需要知道其编号。运行 snapper list 命令获取快照编号。要删除快照,请运行 snapper delete 编号

提示
提示:删除快照对

删除快照时,您应始终删除与其对应的快照(反之亦然)。

snapper delete 65

删除默认 (root) 配置的第 65 张快照。

snapper -c home delete 89 90

删除名为 home 的自定义配置的第 89 张和第 90 张快照。

提示
提示:删除未参照的快照

有时,系统中会存在一些 btrfs 快照,但不是 snapper 生成的含有元数据的 XML 文件。因此,对于 snapper 而言,这些快照不存在。您需要先删除 btrfs 子卷,然后才能删除 SNAPSHOT_NUMBER 目录:

btrfs subvolume delete /.snapshots/SNAPSHOTNUMBER/snapshot
    rm -rf /.snapshots/SNAPSHOTNUMBER
    
提示
提示:旧快照占用的磁盘空间更多

如果您要删除快照以释放硬盘上的空间,请务必先删除旧快照。快照生成的时间越长,其占用的空间就越大。

也可以通过每日计划作业自动删除快照。有关详细信息,请参见第 4.5.1.2 节 “清理算法”

4.6 常见问题

为什么快照程序从不显示 /var/log/tmp 以及其他目录中的更改?

因为我们将部分目录排除在了快照之外。详细的列表和具体原因请参见快照中排除的目录。为了将路径从快照中排除,我们为该路径创建了子卷。

快照要占用多少磁盘空间?如何释放磁盘空间?

因为 df 不会显示 Btrfs 文件系统上的正确磁盘用量,所以您需要使用命令 btrfs filesystem df 安装点。目前,Btrfs 工具还不支持显示分配给快照的磁盘空间大小。

为了释放包含快照的 Btrfs 分区的磁盘空间,您需要删除不再需要的快照,而不是文件。旧快照比新快照占用的磁盘空间更多。有关详细信息,请参见第 4.1.1.3 节 “控制快照存档”

升级服务包时,由于会更改大量数据(包更新),将导致快照占用大量系统子卷的磁盘空间。因此对于不再需要的快照,建议手动删除。有关详细信息,请参见第 4.5.4 节 “删除快照”

我可以从引导加载程序引导快照吗?

可以。有关细节,请参考第 4.3 节 “通过从快照引导来执行系统回滚”

何处能获得有关快照程序的详细信息?

请访问快照程序的主页,网址为:http://snapper.io/

打印此页