xfs提供了 xfsdump 和 xfsrestore工具,协助备份xfs文件系统中的数据。xfsdump按 inode顺序备份一个xfs文件系统

       CentOS7默认文件系统是xfs,CentOS6默认文件系统是ext4,但仍然支持ext4。xfs专为大数据产生,每个文件系统最大可以支持8eb,单个文件可以支持16tb,不仅数据量大,而且扩展性高。还可以通过 xfsdump和 xfsrestore来备份和恢复。原始备份数据方法:cp

       与传统的 UNIX文件系统不同,xfs不需要备份前卸载;对使用中的xfs文件系统做备份就可以保证镜像的一致性。xfs的备份和恢复的过程是可以被中断然后继续的,无需冻结文件系统。xfsdump甚至特功了高性能的多线程备份操作——它把一次dump拆分成多个数据流,每个数据流可以被发往不同的目的地。

 

首先了解一下xfsdump的备份级别有以下两种:0,代表完整备份;1~9,代表增量备份。默认为0(即完全备份)。

       完全备份:每次都把指定的备份目录完整的复制一遍,不管目录下的文件有没有变化;

       增量备份:每次将之前(第一次、第二次、直到前一次)做过备份之后有变化的文件进行备份;

文件大小

计算机最小存储计量单位是:bit(位)

计算机最基本存储计量单位是:Bytes(字节)

其他常用单位:

1KB(Kilobyte)、1Mb(Megabyte)、1GB(Gigabyte)、1TB(terabyte)

1PB(Petabyte 拍字节;万进级计数法中是“千兆”字节)=1024TB

1EB(Exabyte 艾字节;万进级计数法中是“百京”字节)=1024PB

文件大小的单位换算

1Byte = 8 bit   #一个字节等于8位 可以简写成1B = 8b
1KB = 1028B
1MB = 1024KB
1GB = 1024MB
1TB = 1024GB
1PB = 1024TB
1EB = 1024PB

一、环境准备

实验环境:VMware12 ,CentOS7.6系统

1、系统CentOS7.6 添加一块虚拟硬盘(大小:20G 准备一个测试分区),分区,格式化,挂载

1)在虚拟机中添加一块新硬盘

      关闭状态下编辑添加,其他默认

    

centos 备份移除其他repo centos备份还原_centos

    

centos 备份移除其他repo centos备份还原_centos 备份移除其他repo_02

   

centos 备份移除其他repo centos备份还原_centos 备份移除其他repo_03

 

   2)新硬盘分区-格式化-挂载到一个系统目录

       

centos 备份移除其他repo centos备份还原_centos_04

    SCSI 和SATA硬盘在Linux通常也是表示为/dev/sd* ,比如sda 、sdb、adc ... ;sda是第一块硬盘,sdb是第二块,以此类推。

这里创建一个1G的sdb1分区,xfs格式化,并挂载到新建的文件夹/sdb1。输入一下命令:

1、分区

[root@centos7 ~]# fdisk /dev/sdb   #分区硬盘
1)命令(输入  m  获取帮助):n	 //创建一个新的分区
2)Select   (default   p):   p	 //创建一个主分区
3)分区号 (1-4,默认 1):1    //分区号
4)起始 扇区 (2048-41943039,默认为 2048):2048    //起始位置,一般默认即可
5)Last 扇区, +扇区 or +size{K,M,G} (2048-41943039,默认为 41943039):+1G   //指定分区大小,不是默认一定要有加号'+'
6)命令(输入 m 获取帮助):p	//打印分区表,看一下分好没,可选项,也可直接输入w
7)命令(输入 m 获取帮助):w    //保存退出

2、查看分区,格式化分区

      格式化分区mkfs.xfs格式化,如果格式化成ext4,那就mkfs.ext4

[root@centos7 ~]# ls /dev/sd*
[root@centos7 ~]# mkfs.xfs /dev/sdb1

3、创建挂载的文件夹

[root@centos7 ~]# mkdir /sdb1

4、临时挂载

[root@centos7 ~]# mount /dev/sdb1 /sdb1

运行如下: 

[root@centos7 ~]# fdisk /dev/sdb
欢迎使用 fdisk (util-linux 2.23.2)。

更改将停留在内存中,直到您决定将更改写入磁盘。
使用写入命令前请三思。

Device does not contain a recognized partition table
使用磁盘标识符 0x7e979216 创建新的 DOS 磁盘标签。

命令(输入 m 获取帮助):n
Partition type:
   p   primary (0 primary, 0 extended, 4 free)
   e   extended
Select (default p): p
分区号 (1-4,默认 1):1
起始 扇区 (2048-41943039,默认为 2048):^C
[root@centos7 ~]# ls /dev/sd*   
/dev/sda  /dev/sda1  /dev/sda2  /dev/sda3  /dev/sdb
[root@centos7 ~]# fdisk /dev/sdb
欢迎使用 fdisk (util-linux 2.23.2)。

更改将停留在内存中,直到您决定将更改写入磁盘。
使用写入命令前请三思。

Device does not contain a recognized partition table
使用磁盘标识符 0xa366e322 创建新的 DOS 磁盘标签。

命令(输入 m 获取帮助):n
Partition type:
   p   primary (0 primary, 0 extended, 4 free)
   e   extended
Select (default p): p
分区号 (1-4,默认 1):1
起始 扇区 (2048-41943039,默认为 2048):2048
Last 扇区, +扇区 or +size{K,M,G} (2048-41943039,默认为 41943039):+1G
分区 1 已设置为 Linux 类型,大小设为 1 GiB

命令(输入 m 获取帮助):w
The partition table has been altered!

Calling ioctl() to re-read partition table.
正在同步磁盘。
[root@centos7 ~]# ls /dev/sd*
/dev/sda  /dev/sda1  /dev/sda2  /dev/sda3  /dev/sdb  /dev/sdb1
[root@centos7 ~]# mkfs.xfs /dev/sdb1
meta-data=/dev/sdb1              isize=512    agcount=4, agsize=65536 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=0, sparse=0
data     =                       bsize=4096   blocks=262144, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
log      =internal log           bsize=4096   blocks=2560, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
[root@centos7 ~]# mkdir /sdb1
[root@centos7 ~]# mount /dev/sdb1 /sdb1

3)查看挂载情况

    

centos 备份移除其他repo centos备份还原_centos_05

2、在新硬盘的分区(sdb1)中新建一下文件,用来测试备份用

[root@centos7 ~]# cp -rp /root/abc/ /sdb1
[root@centos7 ~]# mv /sdb1/abc/test22/ /sdb1/
[root@centos7 ~]# tree /sdb1                 
/sdb1
├── abc
│   ├── aa_dir
│   │   ├── aa1_dir
│   │   │   └── a1.txt
│   │   ├── aa.txt
│   │   └── file3.cfg
│   ├── aa_dir.tar
│   ├── aa_dir.tar.bz2
│   ├── aa_dir.tar.gz
│   ├── aa_dir.zip
│   ├── bb_dir
│   └── file2.cfg
└── test22
    ├── anaconda-ks.cfg
    └── test_d

3、xfsdump 命令

   要是找不到  xfsdump 命令,安装一下

[root@centos7 ~]# yum list | grep "xfsdump"
xfsdump.x86_64                              3.1.7-1.el7                CentOS7  
[root@centos7 ~]# rpm -qa xfsdump
[root@centos7 ~]# yum -y install xfsdump

注意:使用 xfsdump 时,请注意几个限制:

1)xfsdump 不支持没有挂载的文件系统备份!所以只能备份已挂载的!

2)xfsdump 必须使用 root 的权限才能操作

3)xfsdump 只能备份 XFS 文件系统

4)xfsdump 备份下来的数据只能让 xfsrestore 解析

 

二、完整备份

1、备份整个分区

1)备份整个分区(分三步)

      输入命令:xfsdump -f  备份文件要存放的位置/起个备份名  备份文件所在的路径

      第一次输入:自定义,指定备份会话标签

      第二次输入:自定义,指定备份标签

注意:备份文件所在的路径是:分区挂载路径或者设备文件(我这里是:/sdb或者/dev/sdb1),最后不能以“/”结尾

[root@centos7 ~]# xfsdump -f /opt/dump_sdb1_bak_1 /dev/sdb1
xfsdump: using file dump (drive_simple) strategy
xfsdump: version 3.1.7 (dump format 3.0) - type ^C for status and control

 ============================= dump label dialog ==============================

please enter label for this dump session (timeout in 300 sec)
 -> dump_sdb1_bak_1
session label entered: "dump_sdb1_bak_1"

 --------------------------------- end dialog ---------------------------------

xfsdump: level 0 dump of centos7.6:/sdb1
xfsdump: dump date: Thu Jan 16 10:25:02 2020
xfsdump: session id: f148d6d1-e45a-456e-b3b7-14caa5c91305
xfsdump: session label: "dump_sdb1_bak_1"
xfsdump: ino map phase 1: constructing initial dump list
xfsdump: ino map phase 2: skipping (no pruning necessary)
xfsdump: ino map phase 3: skipping (only one dump stream)
xfsdump: ino map construction complete
xfsdump: estimated dump size: 66560 bytes

 ============================= media label dialog =============================

please enter label for media in drive 0 (timeout in 300 sec)
 -> sdb1_bak_1
media label entered: "sdb1_bak_1"

 --------------------------------- end dialog ---------------------------------

xfsdump: creating dump session media file 0 (media 0, file 0)
xfsdump: dumping ino map
xfsdump: dumping directories
xfsdump: dumping non-directory files
xfsdump: ending media file
xfsdump: media file size 46000 bytes
xfsdump: dump size (non-dir files) : 20224 bytes
xfsdump: dump complete: 31 seconds elapsed
xfsdump: Dump Summary:
xfsdump:   stream 0 /opt/dump_sdb1_bak_1 OK (success)
xfsdump: Dump Status: SUCCESS

2)指定备份时免交互操作,上面三步合成一步,方便后期定时备份。

[root@centos7 ~]# xfsdump -f /opt/dump_sdb1_bak_2 /sdb1 -L dump_sdb1_bak_2 -M sdb1_bak_2

参数: -L  :xfsdump  记录每次备份的 session 标头,这里可以填写针对此文件系统的简易说明

            -M  :xfsdump 可以记录存储媒体的标头,这里可以填写此媒体的简易说明

    

centos 备份移除其他repo centos备份还原_增量备份_06

2、指定只备份分区中某个目录/文件

基本格式:xfsdump  -f  备份文件要存放的位置/起个备份名  -s 要备份某个文件或目录的相对位置  备份文件所在的分区 -L  -M  

参数:-s 文件路径 ,项目路径不能以 “/” 开始,-s后面的路径写的是相对路径(相对于备份文件所在的分区)

           -L   -M  和之前一样

1)备份单个文件

[root@centos7 ~]# xfsdump -f /opt/dump_sdb1_file2.cfg -s abc/file2.cfg /sdb1 -L dump_sdb1_file2.cfg -M sdb1_file2.cfg

2)备份单个目录

[root@centos7 ~]# xfsdump -f /opt/dump_sdb1_test22 -s test22 /sdb1 -L dump_sdb1_test22 -M sdb1_test22

    

centos 备份移除其他repo centos备份还原_centos 备份移除其他repo_07

3、查看备份信息内容

    备份成功后,可以在/var/lib/xfsdump/inventory目录下看到生成的档案信息

# xfsdump  -I(字母大写i)

4、文件系统恢复

    基本格式:xfsrestore -f  指定备份文件存放的位置   指定把存备份文件恢复到的目标路径

    这里恢复到设备文件(分区挂载路径/sdb1)中: 测试之前,先删除之前的内容

[root@centos7 ~]# rm -rf /sdb1/*

1)恢复整个备份

[root@centos7 ~]# xfsrestore -f /opt/dump_sdb1_bak_2 /sdb1 

[root@centos7 ~]# tree /sdb1
/sdb1
├── abc
│   ├── aa_dir
│   │   ├── aa1_dir
│   │   │   └── a1.txt
│   │   ├── aa.txt
│   │   └── file3.cfg
│   ├── aa_dir.tar
│   ├── aa_dir.tar.bz2
│   ├── aa_dir.tar.gz
│   ├── aa_dir.zip
│   ├── bb_dir
│   └── file2.cfg
└── test22
    ├── anaconda-ks.cfg
    └── test_d

6 directories, 9 files
[root@centos7 ~]# rm -rf /sdb1/*

2)恢复单个某个目录/文件

[root@centos7 ~]# xfsrestore -f /opt/dump_sdb1_test22 /sdb1

[root@centos7 ~]# tree /sdb1
/sdb1
└── test22
    ├── anaconda-ks.cfg
    └── test_d

2 directories, 1 file

 恢复备份,命令语法一致。

三、增量备份

概念

增加或者被修改的文件。

       这就意味着,第一次增量备份的对象是进行全备后所产生的增加和修改的文件;第二次增量备份的对象是进行第一次增量备份后所产生的增加和修改的文件,以此类推。

优点:没有重复的备份数据,因此备份的数据量不大,备份所需的时间很短。

缺点:数据恢复相对比较麻烦,它需要上一次全备份和所有增量备份的内容才能够完全恢复成功,并且它们必须沿着从全备份到依次增量备份的时间顺序逐个反推恢复,因此可能会延长的恢复时间。

 

测试之前,先删除一些的内容,然后增加删除内容,进行增量备份

[root@centos7 ~]# rm -rf /sdb1/abc/test22/
[root@centos7 ~]# tree /sdb1              
/sdb1
└── abc
    ├── aa_dir
    │   ├── aa1_dir
    │   │   └── a1.txt
    │   ├── aa.txt
    │   └── file3.cfg
    ├── aa_dir.tar
    ├── aa_dir.tar.bz2
    ├── aa_dir.tar.gz
    ├── aa_dir.zip
    ├── bb_dir
    └── file2.cfg

4 directories, 8 files

1、增量备份

第一次完全备份

第二次以后采用增量备份

xfsdump -l n -f 后面同上

参数:-l [n],(L的小写)n为备份级别,设置备份级别

1)完整备份

[root@centos7 ~]# xfsdump -f /opt/zengliang_sdb1_full /sdb1 -L zengliang_sdb1_full -M sdb1_full

2)增加删除点内容,进行第一次增量备份

[root@centos7 ~]# rm -rf /sdb1/abc/bb_dir /sdb1/abc/aa_dir.zip
[root@centos7 ~]# cp -rp /root/abc/test22/ /sdb1/abc/
[root@centos7 ~]# tree /sdb1
/sdb1
└── abc
    ├── aa_dir
    │   ├── aa1_dir
    │   │   └── a1.txt
    │   ├── aa.txt
    │   └── file3.cfg
    ├── aa_dir.tar
    ├── aa_dir.tar.bz2
    ├── aa_dir.tar.gz
    ├── file2.cfg
    └── test22
        ├── anaconda-ks.cfg
        └── test_d

5 directories, 8 files
[root@centos7 ~]# xfsdump -l 1 -f /opt/zengliang_sdb1_back1 /sdb1 -L zengliang_sdb1_back1 -M sdb1_back1

3)增加删除点内容,进行第二次增量备份

[root@centos7 ~]# rm -rf /sdb1/abc/aa_dir.tar
[root@centos7 ~]# mkdir /sdb1/abc/test33
[root@centos7 ~]# tree /sdb1
/sdb1
└── abc
    ├── aa_dir
    │   ├── aa1_dir
    │   │   └── a1.txt
    │   ├── aa.txt
    │   └── file3.cfg
    ├── aa_dir.tar.bz2
    ├── aa_dir.tar.gz
    ├── file2.cfg
    ├── test22
    │   ├── anaconda-ks.cfg
    │   └── test_d
    └── test33

6 directories, 7 files
[root@centos7 ~]# xfsdump -l 2 -f /opt/zengliang_sdb1_back2 /sdb1 -L zengliang_sdb1_back2 -M sdb1_back2

  更多级别增量备份同理,暂时做两次增量备份测试 

  

centos 备份移除其他repo centos备份还原_bc_08

2、文件系统恢复

步骤:

1)先恢复完整备份

2)如果两次备份都是1级的,那么只需要恢复最后一次增量备份;但如果第一次是1级备份,第二次是2级备份,那么需要先恢复完整备份,然后恢复1级备份,最后2级备份

     这里恢复到设备文件(分区挂载路径/sdb1)中: 测试之前,先删除之前的内容

[root@centos7 ~]# rm -rf /sdb1/*

1)恢复完整备份

[root@centos7 ~]# xfsrestore -f /opt/zengliang_sdb1_full /sdb1/

[root@centos7 ~]# tree /sdb1
/sdb1
└── abc
    ├── aa_dir
    │   ├── aa1_dir
    │   │   └── a1.txt
    │   ├── aa.txt
    │   └── file3.cfg
    ├── aa_dir.tar
    ├── aa_dir.tar.bz2
    ├── aa_dir.tar.gz
    ├── aa_dir.zip
    ├── bb_dir
    └── file2.cfg

4 directories, 8 files

2)恢复第一次增量备份

[root@centos7 ~]# xfsrestore -f /opt/zengliang_sdb1_back1 /sdb1/

[root@centos7 ~]# tree /sdb1
/sdb1
└── abc
    ├── aa_dir
    │   ├── aa1_dir
    │   │   └── a1.txt
    │   ├── aa.txt
    │   └── file3.cfg
    ├── aa_dir.tar
    ├── aa_dir.tar.bz2
    ├── aa_dir.tar.gz
    ├── aa_dir.zip
    ├── bb_dir
    ├── file2.cfg
    └── test22
        ├── anaconda-ks.cfg
        └── test_d

6 directories, 9 files

3)恢复第二次增量备份

[root@centos7 ~]# xfsrestore -f /opt/zengliang_sdb1_back2 /sdb1/

[root@centos7 ~]# tree /sdb1
/sdb1
└── abc
    ├── aa_dir
    │   ├── aa1_dir
    │   │   └── a1.txt
    │   ├── aa.txt
    │   └── file3.cfg
    ├── aa_dir.tar
    ├── aa_dir.tar.bz2
    ├── aa_dir.tar.gz
    ├── aa_dir.zip
    ├── bb_dir
    ├── file2.cfg
    ├── test22
    │   ├── anaconda-ks.cfg
    │   └── test_d
    └── test33

7 directories, 9 files

    这里看到完整备份之后,删除的文件,在恢复到第二次增量备份时也恢复了,这里不难理解