Linux xfsdump命令用法详解(附带实例)
数据备份就是把数据复制一份保存在其他位置,当然,如果能够压缩一下就更好了。那么,使用 tar 或 cp 命令可以实现数据的备份吗?当然可以,不过它们只能实现完全备份,如果想要实现增量备份和差异备份,就必须编写 shell 脚本才行。
在旧版系统中,备份和恢复命令是 dump 与 restore 命令,而从 Linux 7.x 开始,备份与恢复命令已经升级为 xfsdump 与 xfsrestore 命令,用于对 XFS 文件系统进行备份与恢复。我们的 Rocky Linux 9.x 采用的也是 xfsdump 和 xfsrestore 命令。
xfsdump 和 xfsrestore 命令,它们不但可以轻松地实现数据备份和数据恢复,而且可以直接实现增量备份和差异备份。
在正式介绍 xfsdump 命令之前,我们需要知道 xfsdump 命令可以支持 0~9 共 10 个备份级别。其中,0 级别指的就是完全备份,1~9 级别都是增量备份级别:
需要注意的是,只有在备份整个分区或整块硬盘时,才能支持 1~9 的增量备份级别;如果只是备份某个文件或不是分区的目录,那么只能使用 0 级别进行完全备份,命令格式如下:
这里的“-L”、“-M”两个选项都用于说明备份文档的作用和用途,是 xfsdump 命令的必备选择,在备份时必须写入。如果在 xfsdump 命令中不进行指定,那么在命令执行时会使用交互输入的方式要求用户输入两个选项。
如果 /boot 分区的内容发生了变化,就可以使用 1 级别进行增量备份。当然,如果数据会继续发生变化,就可以继续使用 2~9 级别增量备份,命令如下:
但是,如何实现差异备份呢?其实也很简单,先使用 0 级别完全备份一次,以后每次备份都使用 1 级别进行备份。
不过,如果使用增量备份会怎么样呢?命令如下:
在旧版系统中,备份和恢复命令是 dump 与 restore 命令,而从 Linux 7.x 开始,备份与恢复命令已经升级为 xfsdump 与 xfsrestore 命令,用于对 XFS 文件系统进行备份与恢复。我们的 Rocky Linux 9.x 采用的也是 xfsdump 和 xfsrestore 命令。
xfsdump 和 xfsrestore 命令,它们不但可以轻松地实现数据备份和数据恢复,而且可以直接实现增量备份和差异备份。
在正式介绍 xfsdump 命令之前,我们需要知道 xfsdump 命令可以支持 0~9 共 10 个备份级别。其中,0 级别指的就是完全备份,1~9 级别都是增量备份级别:
- 当我们备份一份数据时,第一次备份应该使用 0 级别,会把所有数据完全备份一次;
- 第二次备份就可以使用 1 级别了,它会和 0 级别备份的数据进行比较,把 0 级别备份之后变化的数据进行备份;
- 第三次备份使用 2 级别,2 级别会和 1 级别备份的数据进行比较,把 1 级别备份之后变化的数据进行备份;以此类推。
需要注意的是,只有在备份整个分区或整块硬盘时,才能支持 1~9 的增量备份级别;如果只是备份某个文件或不是分区的目录,那么只能使用 0 级别进行完全备份,命令格式如下:
[root@localhost ~]# xfsdump [选项] 备份之后的文件名 原文件或分区选项:
- -l n:指定备份级别,1 是小写字母,n 是 0~9 中的数字;
- -f 文件名:指定备份之后的文件名;
- -L:指定会话标签,可以任意写,用于说明备份文档;
- -M:指定标签,也是用于说明文档的,可以任意写;
- -s 目录名:只备份指定分区中的某一个目录。
这里的“-L”、“-M”两个选项都用于说明备份文档的作用和用途,是 xfsdump 命令的必备选择,在备份时必须写入。如果在 xfsdump 命令中不进行指定,那么在命令执行时会使用交互输入的方式要求用户输入两个选项。
Linux xfsdump备份分区
我们先来看看如何使用 0 级别备份分区,具体如下:[root@localhost ~]# df -h 文件系统 容量 已用 可用 已用% 挂载点 devtmpfs 4.0M 0 4.0M 0% /dev tmpfs 465M 0 465M 0% /dev/shm tmpfs 186M 4.2M 182M 3% /run /dev/sda3 20G 2.2G 18G 12% / /dev//dev/sda1 295M 186M 110M 63% /boot tmpfs 93M 0 93M 0% /run/user/0 #在系统中只划分了/分区和/boot分区。根分区太大,备份速度太慢,我们还是备份/boot分区吧 [root@localhost ~]# xfsdump -l 0 -L "full" -M "full" -f /root/boot.dump0 /boot #备份/boot分区,使用 0 级别完整备份,将其备份到/root/boot.dump0 文件中 #“-l 0”前一个字符是小写字母l,后一个是数字 0,不要混淆 #“-L”和“-M”说明写“full”代表完整备份 #注意:/boot 分区,不能写成/boot/,否则会报错 [root@localhost ~]# ll -h /root/boot.dump0 -rwxr--x-rw-r-- 1 root root 168M 3 月 19 16:10 /root/boot.dump0 #备份文件已经生成注意,笔者认为 xfsdump 命令开发得不够完整,有一些 bug 存在。在备份 /boot 分区的时候,命令中不能写成“/boot/”,否则 xfsdump 命令会报错,提示“does not identify a file system(文件系统不识别)”。
如果 /boot 分区的内容发生了变化,就可以使用 1 级别进行增量备份。当然,如果数据会继续发生变化,就可以继续使用 2~9 级别增量备份,命令如下:
[root@localhost ~]# ll -h /etc/services -rw-r--r--. 1 root root root 677K 6 月 23 2020 /etc/services #/etc/services 文件是常用端口的说明,这个文件有 677KB [root@localhost ~]# cp /etc/services /boot/ #复制文件到/boot 分区 [root@localhost ~]# xfsdump -l 1 -L "dump1" -M "dump1" -f /root/boot.dump1 /boot #进行 1 级别增量备份 #“-l 1”前一个是小写字母 l,后一个是数字 1 [root@localhost ~]# ll -h /root/boot.dump* -rw-r--r--. 1 root root 97M 8 月 9 15:34 /root/boot.dump0 #boot.dump0 是完整备份,大小有 97MB -rw-r--r--.1 root root 702K 3 月 19 16:26 /root/boot.dump1 #boot.dump1 是增量备份,大小只有 702KBxfsdump 命令可以非常方便地实现增量备份,如果是第二次增量备份,就只需要把备份级别写为 2,以后依次增加即可。
但是,如何实现差异备份呢?其实也很简单,先使用 0 级别完全备份一次,以后每次备份都使用 1 级别进行备份。
Linux xfsdump备份文件或目录
xfsdump 命令也可以文件或目录,不过,只要不是备份分区,就只能使用 0 级别进行完全备份,而不再支持增量备份。我们说的 /etc/ 目录是重要的配置文件目录,那么我们就备份这个目录来看看吧,命令如下:[root@localhost ~]# xfsdump -l 0 -L "etc0" -M "etc0" -f /root/etc.dump0 -s etc / #在使用 “-s“指定目录时,只能写相对路径,否则会报错 #最后的 “/” 指的是根分区,备份指定目录,需要采用这种格式 [root@localhost ~]# ll -h /root/etc.dump0 -rw-r--r--. 1 root root root 222M 3月 19 16:39 /root/etc.dump0 #查看备份文件总体来说,xfsdump 命令的格式很别扭,备份文件或目录,格式必须和例子类似,否则会报错。
不过,如果使用增量备份会怎么样呢?命令如下:
[root@localhost ~]# xfsdump -l 1 -L "etc.dump0" -M "etc.dump0" -f /root/etc.dump0 -s etc / xfsdump: using file dump (drive_simple) strategy xfsdump: version 3.1.10 (dump format 3.0) - type ^C for status and control xfsdump: ERROR: cannot find earlier dump to base level 1 increment upon xfsdump: Dump Status: ERROR #备份失败了,目录备份只能使用 0 级别