SUSE linux的快照和恢复

snapper用于创建和管理文件系统快照,并在需要时实现回滚,它还可以用于创建用户数据的磁盘备份。snapper使用btrfs文件系统或者精简配置的被格式化成XFS或EXT4的LVM卷。snapper可以通过命令行或YaST来进行管理。
btrfs是一种copy-on-write文件系统,它原生支持subvolumes文件系统快照。subvolumes是物理分区内可单独安装的文件系统。你也可以直接从btrfs快照启动系统。

1 默认设置

在openSUSE Leap中,snapper通常用于系统修改的撤销和恢复的工具。默认情况下,系统的根分区被格式化成了btrfs文件系统。如果根分区足够大(大于16G),快照功能是默认开启的。其他分区默认关闭了快照功能。

SUSE15:~ # df -Th
Filesystem     Type      Size  Used Avail Use% Mounted on
devtmpfs       devtmpfs  4.0M     0  4.0M   0% /dev
tmpfs          tmpfs     974M     0  974M   0% /dev/shm
tmpfs          tmpfs     390M   12M  379M   3% /run
tmpfs          tmpfs     4.0M     0  4.0M   0% /sys/fs/cgroup
/dev/nvme0n1p2 btrfs      28G  6.7G   22G  24% /
/dev/nvme0n1p2 btrfs      28G  6.7G   22G  24% /boot/grub2/i386-pc
/dev/nvme0n1p2 btrfs      28G  6.7G   22G  24% /.snapshots
/dev/nvme0n1p2 btrfs      28G  6.7G   22G  24% /home
/dev/nvme0n1p2 btrfs      28G  6.7G   22G  24% /opt
/dev/nvme0n1p2 btrfs      28G  6.7G   22G  24% /root
/dev/nvme0n1p2 btrfs      28G  6.7G   22G  24% /boot/grub2/x86_64-efi
/dev/nvme0n1p2 btrfs      28G  6.7G   22G  24% /srv
/dev/nvme0n1p2 btrfs      28G  6.7G   22G  24% /tmp
/dev/nvme0n1p2 btrfs      28G  6.7G   22G  24% /var
/dev/nvme0n1p2 btrfs      28G  6.7G   22G  24% /usr/local
tmpfs          tmpfs     195M   48K  195M   1% /run/user/1000
tmpfs          tmpfs     195M   36K  195M   1% /run/user/0

CentOS7的根分区默认采用了XFS,默认情况下没有开启快照功能。

如果在系统安装时关闭了快照功能,可以通过下面的命令开启:

SUSE15:~ # snapper -c root create-config /

创建快照时,快照和原始快照都指向文件系统中的相同块。因此,最初快照不会占用额外的磁盘空间。如果原始文件系统中的数据被修改,则更改的数据块被复制,而旧的数据块保留用于快照。因此,快照与修改的数据占用的空间量相同。因此,随着时间的推移,快照分配的空间量不断增长。因此,从包含快照的Btrfs文件系统中删除文件可能无法释放磁盘空间!

快照始终驻留在已拍摄快照的同一分区或子卷上。无法将快照存储在不同的分区或子卷上。因此根分区的磁盘大小决定了能够保存多少份快照,一旦空间不够,系统会自动删除一部分快照(从最旧的开始删除)。

1.1 默认设置

  • Disks larger than 16 GB
	Configuration file: /etc/snapper/configs/root

	USE_SNAPPER=yes

	TIMELINE_CREATE=no
  • Disks smaller than 16 GB
	Configuration file: not created

	USE_SNAPPER=no

	TIMELINE_CREATE=yes

1.2 快照类型

根据触发它们的事件,快照分为了三种类型:

  1. Timeline Snapshots

每小时创建一个快照,旧的快照将会自动被删除。默认情况下,过去10天,一个月和一年的第一份快照将会被保留。默认情况下该快照是关闭的。

  1. Installation Snapshots

安装软件后,会创建一对快照:安装前(pre)的和安装后的(post)。如果是安装比较重要的包比如内核,快照对还会被标记上important。旧的快照同样会被自动删除。默认情况下,过去的十个重要快照和十个常规快照将会被保留。默认情况下该快照是开启的。

  1. Aministration Snapshots

当你使用YaST管理系统时,会创建一对快照:管理前(pre)的和管理后的(post)。旧的快照同样会被自动删除。默认情况下,过去的十个重要快照和十个常规快照将会被保留。默认情况下该快照是开启的。

1.3 被排除的目录

/boot/grub2/i386-pc, /boot/grub2/x86_64-efi, /boot/grub2/powerpc-ieee1275, /boot/grub2/s390x-emu

boot loader配置是无法回滚的,这里列出的目录是针对不同硬件架构的boot loader目录

/home

如果/home不驻留在单独的分区上,排除掉它是为了避免回滚时数据丢失。

/opt

第三方应用通常安装在该目录下。排除掉它是为了避免回滚时应用被删除。

/srv

该目录包含了web和FTP服务器的数据。排除掉它是为了避免回滚时数据丢失。

/tmp

临时文件夹,没必要做快照。

/usr/local

手工安装软件的目录,排除掉它是为了避免回滚时应用被删除。

/var

该目录包含了很多变量文件,比如日志,缓存,/var/opt中的第三方软件,而且还是虚拟机映像和数据库的默认位置。因此,创建此子卷是为了从快照中排除所有这些可变数据,并禁用了写时复制。

1.4 自定义设置

openSUSE默认提供了通用场景下的快照设置,你也可以根据需要进行修改。

1.4.1 开启和关闭快照
timeline snapshots
SUSE15:~ # snapper -c root set-config "TIMELINE_CREATE=yes"
SUSE15:~ # snapper -c root set-config "TIMELINE_CREATE=no"
installation snapshots

开启该快照功能需要安装软件,安装后自动开启,删除软件后关闭该快照功能

SUSE15:~ # zypper install snapper-zypp-plugin
SUSE15:~ # zypper remove snapper-zypp-plugin
administration snapshots
SUSE15:~ # vim /etc/sysconfig/yast2

## Type: list(yes,no)
## Default: "no"
# Enable use of snapper for YaST.
USE_SNAPPER="yes"		#设置为yes就是开启,改为no即可关闭,默认是开启状态
1.4.2 控制installation snapshots

安装软件的快照对创建依赖于插件snapper-zypp-plugin。配置文件是/etc/snapper/zypp-plugin.conf。配置文件如下:

SUSE15:~ # cat /etc/snapper/zypp-plugin.conf
<?xml version="1.0" encoding="utf-8"?>
<snapper-zypp-plugin-conf>
  <solvables>
#match属性代表使用UNIX shell风格的通配符(w)还是使用python正则表达式(re)
#important属性代表是否被标记为重要快照,这取决于软件包的标记
#括号中间的字符如下一行的kernel-*,用于匹配软件包名,根据match属性的设置,特殊字符会被解释为shell通配符或正则表达式。
    <solvable match="w" important="true">kernel-*</solvable>
    <solvable match="w" important="true">dracut</solvable>
    <solvable match="w" important="true">glibc</solvable>
    <solvable match="w" important="true">systemd*</solvable>
    <solvable match="w" important="true">udev</solvable>
    <solvable match="w">*</solvable>			#无条件的匹配所有软件包,注释掉这一行代表非重要的软件安装将不会做快照
  </solvables>
</snapper-zypp-plugin-conf>
4.3 创建和挂载新的子卷

系统支持在根下创建一个新的子卷并永久挂载,但是这样的子卷将会被快照排除掉。你需要确保不在现有快照中创建它,因为回滚后将无法再删除快照。
openSUSELeap配置了/@/子卷,它作为/opt、/srv、/home等永久子卷的独立根。您创建和永久安装的任何新子卷都需要在此初始根文件系统中创建。
下面的列子是从/dev/sda2中新创建一个/usr/important子卷:

SUSE15:~ # mount /dev/sda2 -o subvol=@ /mnt
SUSE15:~ # btrfs subvolume create /mnt/usr/important
SUSE15:~ # umount /mnt

永久挂载配置

SUSE15:~ # vim /etc/fstab

/dev/sda2 /usr/important btrfs subvol=@/usr/important 0 0

子卷可能包含不断变化的文件,例如虚拟化磁盘映像、数据库文件或日志文件。如果是这样,请考虑禁用此卷的写时复制功能,以避免磁盘块重复。使用/etc/fstab中的nodatacow挂载选项来执行此操作:

/dev/sda2 /usr/important btrfs nodatacow,subvol=@/usr/important 0 0

命令行下的操作:

SUSE15:~ # chatter +C /usr/important
1.4.4 控制快照归档

快照会占据大量的磁盘空间,因此为了避免快照占据整个磁盘空间,多余的快照将会自动被删除。默认情况下,系统会保存10个重要的安装和管理快照,以及10个常规的安装和管理快照,如果快照占据了超过50%的分区空间,那么数量会相应的减少,但**至少会保存10个重要快照加2个常规快照**。

1.4.5 在精简置备LVM卷中使用快照

快照还支持的文件系统包括XFS、EXT3和EXT4,需要专门为这些文件系统创建一个快照配置。在创建时需要在--fstype="lvm(xfs)"中指明文件系统名,例如:

SUSE15:~ #  snapper -c lvm create-config --fstype="lvm(xfs)" /thin_lvm

2 快照用于撤销修改

snapper还有一个作用是撤销zypper和YaST做的修改,因此在zypper和YaST做修改时,snapper会产生一对快照(修改前和修改后)。也可以用于恢复意外丢失的系统文件。要达到这个目的,需要开启Timeline snapshots


撤销修改和回滚的区别

  • 撤销修改:当使用撤销修改功能是,系统会比较两个快照的区别,然后取消掉修改的部分。撤销修改还可以只针对某个文件。
  • 回滚:整个系统将会恢复到原来快照的状态。

撤销修改也可以和当前系统状态进行对比,如果所有文件都做了快照,那么实际上撤销修改和回滚就没啥区别了。当然首选的还是回滚,因为回滚允许在操作之前查看系统,并且速度更快。


注意:创建快照时没有机制保证数据的一致性。如果在创建快照的同时写入文件(例如,数据库),就会导致文件损坏或部分写入。恢复这样的文件会导致问题。此外,不得恢复某些系统文件,例如/etc/mtab。因此,强烈建议始终仔细查看已更改文件的列表及其差异。仅还原真正需要还原的操作的文件。

2.1 撤销YaST和zypper的修改

一旦在安装时将根分区配置为btrfs文件系统,针对YaST和zypper的快照就会被自动配置,因此每次操作YaST和zypper时,就会创建一对快照。可以通过YaST中的snapper模块和snapper命令来操作修改的撤销。文件的对比也可以通过命令diff来进行查看。

2.1.1 YaST操作
1.通过root账户进入YaST,打开Miscellaneous(杂项)中的snapper(文件系统快照)模块
2.选择类型为Pre & Post的快照,描述中会显示通过什么工具来造成的修改。

在这里插入图片描述

在清单里面,还可以看到最后一个快照只有Pre,因为登陆了YaST做操作,而操作还没有完成,因此没有post快照。

3.选择一对快照,然后点击查看修改

在这里插入图片描述

这里可以看到所有的修改内容

4.选择所有,或者某一个文件夹进行恢复

在这里插入图片描述

2.1.2 CLI操作
1.首先列出所有的快照
SUSE15:~ # snapper list -t pre-post
Pre # | Post # | Pre Date                 | Post Date                | Description  | Userdata    
------+--------+--------------------------+--------------------------+--------------+-------------
   3  |     4  | Tue Aug 17 16:35:58 2021 | Tue Aug 17 16:36:06 2021 | zypp(zypper) | important=no
   5  |     6  | Tue Aug 17 16:51:45 2021 | Tue Aug 17 16:51:55 2021 | zypp(zypper) | important=no
   7  |     8  | Tue Aug 17 16:53:16 2021 | Tue Aug 17 16:53:53 2021 | zypp(zypper) | important=no
   9  |    10  | Tue Aug 17 17:38:10 2021 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

-风中叮铃-

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值