如何使用fsarchiver克隆或者备份Linux分区

时间:2020-01-09 10:37:18  来源:igfitidea点击:

如何完整备份我的Linux分区。
我计划执行一些与升级有关的活动,并且我想备份或者克隆Linux硬盘驱动器,以便万一发生任何故障,我都可以还原内容。

在实时生产环境中,拥有备份解决方案非常重要。
在计划进行任何维护活动之前,始终建议我们对Linux分区进行完整备份。
如今,我们有许多第三方解决方案可以及时备份整个硬盘。
但是,如果我们只需要修改单个或者某些Linux分区的数据,则可以使用fsarchiver,这是进行Linux分区备份然后还原的出色工具。

在本教程指南中,我将分享一些示例,以备份Linux分区,使用fsarchiver创建分区,硬盘驱动器和逻辑卷的镜像以及使用备份存档内容进行还原。

fsarchiver概述

  • fsarchiver是一个系统工具,可让我们将文件系统的内容保存到压缩的存档文件中。

  • 可以在大小不同的设备上还原文件系统内容,也可以在不同的文件系统上还原文件系统内容。

  • 与tar或者cpio不同,fsarchiver保留扩展的文件属性,并且可以还原到没有当前文件系统的磁盘上,因此我们可以克隆Linux硬盘驱动器或者分区。

  • 为了保护数据,所有内容都会在归档中进行校验和。

  • 如果存档已损坏,则只会丢失当前文件,而不是整个存档。

  • fsarchiver应用程序识别并保留Windows文件属性以及Linux属性,使其适合于迁移Samba安装的分区。

说明:

我现在将使用Linux服务器上安装的Oracle VirtualBox,因为我有逻辑卷,所以我将共享使用逻辑卷进行备份和还原的所有步骤,但是相同的步骤将使用相同的命令语法来备份和还原普通分区。

对于逻辑卷,也可以使用LVM快照执行备份和还原。

下载并安装fsarchiver

fsarchiver可以从其官方页面以各种格式下载

我将使用rpm版本安装fsarchiver

在撰写本文时,8.5是最新的可用版本。

# rpm -Uvh fsarchiver-0.8.5-1.el7.x86_64.rpm

在我的RHEL/CentOS 7节点上,需要一个额外的依赖项rpm,我使用yum单独安装了它(仅当fsarchiver和依赖项libzstdso.1库安装失败时才需要。

# yum -y install libzstd.x86_64

为了本文的目的,我使用外部USB来存储备份。
我的U盘是NTFS格式,安装在/usb上。

备份Linux分区

创建Linux分区的克隆

其中:我的Linux节点上大约有4个逻辑卷。
如前所述,我们将备份LVM而不是分区,但是克隆分区的步骤应相同。

[root@server1 ~]# lvs
  LV   VG     Attr       LSize   Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  data centos -wi-ao----   5.00g
  home centos -wi-ao----   2.00g
  root centos -wi-ao---- <18.00g
  swap centos -wi-ao----   1.00g

让我们来创建分区/dev/mapper/centos-data的镜像。

我在/data文件夹下创建了一些虚拟文件和目录

[root@server1 data]# ls -l
total 44
drwxr-xr-x.  2 root root 20480 Jan 10 11:12 binaries
drwxr-xr-x. 75 root root  4096 Jan 10 11:12 config
-rw-r--r--.  1 root root    10 Jan 10 11:12 file1
drwx------.  2 root root 16384 Jan 10 11:03 lost+found

在尝试备份分区之前,必须先"卸载数据分区",这一点很重要。

[root@server1 ~]# umount /dev/mapper/centos-data

以下是使用fsarchiver复制Linux分区的命令。
其中:我们的备份档案名称是backup_data

[root@server1 ~]# fsarchiver savefs /usb/backup_data /dev/mapper/centos-data
Statistics for filesystem 0
* files successfully processed:....regfiles=2432, directories=602, symlinks=93, hardlinks=0, specials=0
* files with errors:...............regfiles=0, directories=0, symlinks=0, hardlinks=0, specials=0

因此,备份分区成功,错误为零。

暗示:

要启用详细信息,我们可以另外使用-v
增加计数-v将增加详细程度。

验证克隆的备份存档内容

接下来,验证克隆的备份内容,让我们从数据分区中删除一些文件和文件夹

[root@server1 ~]# mount /dev/mapper/centos-data /data/
[root@server1 ~]# cd /data/

我们将删除file1config目录

[root@server1 data]# rm -rf config file1
[root@server1 data]# ls -l
total 44
drwxr-xr-x.  2 root root 20480 Jan 10 11:12 binaries
drwxr-xr-x. 75 root root  4096 Jan 10 11:12 config
drwx------.  2 root root 16384 Jan 10 11:03 lost+found

使用克隆的备份存档还原分区

现在让我们还原数据分区的内容。
在开始还原之前,首先要"卸载"数据分区

[root@server1 ~]# umount  /data/

执行fsarchiver以启动恢复。
这里的" id = 0"表示第一个分区=数字0,后跟目标文件系统。
我们将在下一章中对此进行解释。

[root@server1 ~]# fsarchiver restfs /usb/backup_data.fsa id=0,dest=/dev/mapper/centos-data
Statistics for filesystem 0
* files successfully processed:....regfiles=2432, directories=602, symlinks=93, hardlinks=0, specials=0
* files with errors:...............regfiles=0, directories=0, symlinks=0, hardlinks=0, specials=0

还原分区步骤成功,因为未报告任何错误。
接下来验证数据

[root@server1 ~]# mount /dev/mapper/centos-data /data/

因此,正如我们所看到的,我们已删除的数据已成功恢复。

[root@server1 ~]# ls -l /data/
total 44
drwxr-xr-x.  2 root root 20480 Jan 10 11:12 binaries
drwxr-xr-x. 75 root root  4096 Jan 10 11:12 config
-rw-r--r--.  1 root root    10 Jan 10 11:12 file1
drwx------.  2 root root 16384 Jan 10 11:03 lost+found

如何备份或者克隆Linux根分区。

正如我们在上面看到的,在将分区克隆到备份存档之前先卸载分区很重要现在我们不能在多用户环境中卸载根分区,因此可以进入单用户模式或者可以使用- fsarchiver参数将允许分区克隆在读写模式下继续进行。

这有其自身的风险,这意味着将无法正确备份将要使用的任何文件

# fsarchiver savefs /usb/backup_sda.fsa /dev/mapper/centos-root -A
Statistics for filesystem 0
* files successfully processed:....regfiles=29684, directories=5417, symlinks=1191, hardlinks=4253, specials=23
* files with errors:...............regfiles=0, directories=0, symlinks=0, hardlinks=0, specials=0

如何备份或者克隆多个Linux分区

我们还可以使用单个命令来备份或者克隆多个分区。
其中:我们将从我的Linux节点备份两个分区。
我已经卸载了两个分区。

重要的提示:

重要的是要知道创建备份的顺序,即在此示例中," centos-data"是备份存档中的第一个分区,而" centos-home"是第二个分区。

以后将使用它来还原数据。

# fsarchiver savefs /usb/backup_data /dev/mapper/centos-data /dev/mapper/centos-home
Statistics for filesystem 0
* files successfully processed:....regfiles=2432, directories=602, symlinks=93, hardlinks=0, specials=0
* files with errors:...............regfiles=0, directories=0, symlinks=0, hardlinks=0, specials=0
Statistics for filesystem 1
* files successfully processed:....regfiles=1296, directories=4, symlinks=121, hardlinks=11, specials=0
* files with errors:...............regfiles=0, directories=0, symlinks=0, hardlinks=0, specials=0

因此,我们对两个分区的备份均已成功完成。

接下来,要恢复分区,我们必须按照执行备份的相同顺序使用id指令。
由于我们首先备份了" centos-data",因此其" id"将为" 0",而对于第二个分区" centos-home",其" id"将为" 1",如下所示

# fsarchiver restfs /usb/backup_data.fsa id=0,dest=/dev/mapper/centos-data id=1,dest=/dev/mapper/centos-home
Statistics for filesystem 0
* files successfully processed:....regfiles=2432, directories=602, symlinks=93, hardlinks=0, specials=0
* files with errors:...............regfiles=0, directories=0, symlinks=0, hardlinks=0, specials=0
Statistics for filesystem 1
* files successfully processed:....regfiles=1296, directories=4, symlinks=121, hardlinks=11, specials=0
* files with errors:...............regfiles=0, directories=0, symlinks=0, hardlinks=0, specials=0

因此,两个逻辑卷的还原均成功。
我们可以同时安装分区和验证内容。

加密克隆的备份存档

我们还可以使用-c来提高安全性并使用密码对克隆的备份存档进行加密。
我们可以在使用-c mypassword进行备份时提供密码,也可以使用-c提示输入密码。
其中:我们将提示" fsarchiver"输入备份存档的密码。

[root@server1 ~]# umount /data
[root@server1 ~]# fsarchiver savefs -c - /usb/backup_data /dev/mapper/centos-data
Enter password:
Confirm password:
Statistics for filesystem 0
* files successfully processed:....regfiles=2432, directories=602, symlinks=93, hardlinks=0, specials=0
* files with errors:...............regfiles=0, directories=0, symlinks=0, hardlinks=0, specials=0

接下来,要恢复备份归档文件,我们必须使用-c提供归档文件的密码。
我们可以再次使用-c mypassword提供纯文本格式的密码,也可以使用-c以便fsarchiver在开始恢复活动之前提示我们输入密码。

[root@server1 ~]# fsarchiver restfs /usb/backup_data.fsa id=0,dest=/dev/mapper/centos-data -c 
Enter password:
Statistics for filesystem 0
* files successfully processed:....regfiles=2432, directories=602, symlinks=93, hardlinks=0, specials=0
* files with errors:...............regfiles=0, directories=0, symlinks=0, hardlinks=0, specials=0

克隆时排除文件和目录

我们还可以在使用--exclude备份分区时基于正则表达式排除某些文件和目录。
例如,我希望从数据分区的备份中排除" file1"

[root@server1 data]# ls -l
total 44
drwxr-xr-x.  2 root root 20480 Jan 10 11:12 binaries
drwxr-xr-x. 75 root root  4096 Jan 10 11:12 config
-rw-r--r--.  1 root root    10 Jan 10 11:12 file1
drwx------.  2 root root 16384 Jan 10 11:03 lost+found

卸载数据分区

[root@server1 ~]# umount /data/

用--exclude = file1执行fsarchiver备份命令以创建分区镜像。

暗示:

我们可以多次使用--exclude来排除多个文件和目录

[root@server1 ~]# fsarchiver savefs /usb/backup_data /dev/mapper/centos-data --exclude=file1
Statistics for filesystem 0
* files successfully processed:....regfiles=2431, directories=602, symlinks=93, hardlinks=0, specials=0
* files with errors:...............regfiles=0, directories=0, symlinks=0, hardlinks=0, specials=0

接下来,我将从数据分区中删除" file1",以检查是否已恢复

[root@server1 ~]# mount /dev/mapper/centos-data /data/
[root@server1 ~]# rm -f /data/file1
[root@server1 ~]# ls -l /data/
total 40
drwxr-xr-x.  2 root root 20480 Jan 10 11:12 binaries
drwxr-xr-x. 75 root root  4096 Jan 10 11:12 config
drwx------.  2 root root 16384 Jan 10 11:03 lost+found

现在让我们卸载/dev/mapper/centos-data并从备份档案恢复分区。

[root@server1 ~]# umount /data/
[root@server1 ~]# fsarchiver restfs /usb/backup_data.fsa id=0,dest=/dev/mapper/centos-data
Statistics for filesystem 0
* files successfully processed:....regfiles=2431, directories=602, symlinks=93, hardlinks=0, specials=0
* files with errors:...............regfiles=0, directories=0, symlinks=0, hardlinks=0, specials=0

由于恢复分区成功,因此挂载数据分区并检查" file1"是否已恢复

[root@server1 ~]# mount /dev/mapper/centos-data /data/

不出所料,file1没有被备份,因此没有被恢复,因为我们有意从备份中排除了该文件。

[root@server1 ~]# ls -l /data/
total 40
drwxr-xr-x.  2 root root 20480 Jan 10 11:12 binaries
drwxr-xr-x. 75 root root  4096 Jan 10 11:12 config
drwx------.  2 root root 16384 Jan 10 11:03 lost+found