XFS文件系统备份与还原

admin 2022年08月20日 563次浏览

由于 CentOS 7 及以后版本已经使用 XFS 文件系统作为默认文件系统,对于 XFS 文件系统,使用的备份和还原工具分别是 xfsdump 与 xfsrestore

1、使用xfsdump备份文件系统

1.1、xfsdump简介

xfsdump 除了可以进行文件系统的完整备份之外,还可以进行增量备份。所谓的增量备份,就是假设 /home 是独立的一个文件系统,那么在第一次使用 xfsdump 进行完整备份后,等文件系统使用一段时间后,再进行第二次 xfsdump 时,就可以选择增量积备份了,此时新备份的数据只会记录与第一次完整备份有差异的文件,而不会备份所有文件

  • 使用xfsdump注意事项

    • xfsdump 不支持没有挂载的文件系统备份,只能备份已挂载的

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

    • xfsdump 只能备份 XFS 文件系统

    • xfsdump 备份下来的数据只能使用 xfsrestore 解析

    • xfsdump 是通过文件系统的 UUID 来分辨各个备份文件的,因此不能备份两个具有相同 UUID 的文件系统

    • xfsdump 默认仅支持文件系统的备份,并不支持特定目录的备份,因此不能用 xfsdump 去备份某一个目录

1.2、语法与参数

  • 语法

    [root@localhost ~]# xfsdump [-L S_label] [-M M_label] [-l n] [-f 备份名称] 待备份资料
    [root@localhost ~]# xfsdump -I
    
  • 常用选项

    -L :xfsdump 会记录每次备份的会话标签,这里可以填写针对此文件系统的简易说明
    -M :xfsdump 可以记录储存媒体的标签,这里可以填写此媒体的简易说明
    -l :是 L 的小写,备份等级,有0~9共10个等级(预设为 0,即完整备份)
    -f :类似tar,后面接产生的文件,也可以接例如 /dev/st0 设备文件名或其他一般文件名称
    -I :从 /var/lib/xfsdump/inventory 列出目前备份的信息状态
    

1.3、完整备份系统

  • 确认需要备份的系统是否时独立文件系统

    [root@localhost ~]# df -h /boot
    文件系统        容量  已用  可用 已用% 挂载点
    /dev/sda1      1014M  239M  776M   24% /boot
    
  • 完整备份文件系统

    [root@localhost ~]# xfsdump -l 0 -L boot_all -M boot_all -f /backup/boot.dump /boot
    xfsdump: using file dump (drive_simple) strategy
    xfsdump: version 3.1.7 (dump format 3.0) - type ^C for status and control
    # 开始备份本机/boot系统
    xfsdump: level 0 dump of localhost.localdomain:/boot
    # 备份的时间
    xfsdump: dump date: Fri Aug 19 17:15:32 2022
    # 本次备份的ID
    xfsdump: session id: 61ad94fe-d55c-4e85-90fe-3b0e8198ac2f
    # 会话名称
    xfsdump: session label: "boot_all"
    # 开始备份程序
    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: 215994496 bytes
    xfsdump: /var/lib/xfsdump/inventory created
    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 215668832 bytes
    xfsdump: dump size (non-dir files) : 215421528 bytes
    xfsdump: dump complete: 2 seconds elapsed
    xfsdump: Dump Summary:
    xfsdump:   stream 0 /backup/boot.dump OK (success)
    xfsdump: Dump Status: SUCCESS
    
  • 确认备份文件

    [root@localhost ~]# ls -lah /backup/
    总用量 206M
    -rw-r--r--.  1 root root 206M 8月  19 17:15 boot.dump
    
  • 查看备份清单

    [root@localhost ~]# ls -lah  /var/lib/xfsdump/inventory
    总用量 16K
    -rw-r--r--. 1 root root 5.0K 8月  19 17:15 806c1c55-69fd-47a9-80e4-98b44f603ec5.StObj
    -rw-r--r--. 1 root root  312 8月  19 17:15 d183d72b-00e7-4f30-a12e-e2d768fc225f.InvIndex
    -rw-r--r--. 1 root root  576 8月  19 17:15 fstab
    

1.4、增量备份系统

做增量备份的前提是已经完成了完整备份

  • 查看之前备份情况

    [root@localhost ~]# xfsdump -I
    file system 0:
            fs id:          d183d72b-00e7-4f30-a12e-e2d768fc225f
            session 0:
                    mount point:    localhost.localdomain:/boot
                    device:         localhost.localdomain:/dev/sda1
                    time:           Fri Aug 19 17:15:32 2022
                    session label:  "boot_all"
                    session id:     61ad94fe-d55c-4e85-90fe-3b0e8198ac2f
                    # 上次备份的级别
                    level:          0
                    resumed:        NO
                    subtree:        NO
                    streams:        1
                    stream 0:
                    		# 上次备份的文件名及路径
                            pathname:       /backup/boot.dump
                            start:          ino 69 offset 0
                            end:            ino 1577746 offset 0
                            interrupted:    NO
                            media files:    1
                            media file 0:
                                    mfile index:    0
                                    mfile type:     data
                                    mfile size:     215668832
                                    mfile start:    ino 69 offset 0
                                    mfile end:      ino 1577746 offset 0
                                    media label:    "boot_all"
                                    media id:       e00efbfb-aa9f-49bf-8fe7-d4fc4c6bd264
    xfsdump: Dump Status: SUCCESS
    
  • 增量备份

    # 创建一个10M左右的文件
    [root@localhost ~]# clear
    [root@localhost ~]# dd if=/dev/zero of=/boot/test_file bs=1M count=10
    记录了10+0 的读入
    记录了10+0 的写出
    10485760字节(10 MB)已复制,0.0302299 秒,347 MB/秒
    
    # 创建增量备份
    [root@localhost ~]# xfsdump -l 1 -L boot_2 -M boot_2 -f /backup/boot.dump_1 /boot
    
    # 查看备份文件
    [root@localhost ~]# ls -lah /backup/
    总用量 216M
    drwxr-xr-x.  2 root root   42 8月  19 17:35 .
    dr-xr-xr-x. 18 root root  238 8月  19 17:15 ..
    -rw-r--r--.  1 root root 206M 8月  19 17:15 boot.dump
    # 刚好差不多10M
    -rw-r--r--.  1 root root  11M 8月  19 17:35 boot.dump_1
    
  • 查看备份清单

    [root@localhost ~]# xfsdump -I
    file system 0:
            fs id:          d183d72b-00e7-4f30-a12e-e2d768fc225f
            session 0:
                    mount point:    localhost.localdomain:/boot
                    device:         localhost.localdomain:/dev/sda1
                    time:           Fri Aug 19 17:15:32 2022
                   ... (此处省略) ...
             session 1:
                    mount point:    localhost.localdomain:/boot
                    device:         localhost.localdomain:/dev/sda1
                    time:           Fri Aug 19 17:35:30 2022
                    session label:  "boot_2"
                    session id:     db820ddb-92f9-440e-b0ff-7916401f044f
                    level:          1
                    resumed:        NO
                    subtree:        NO
                    streams:        1
                    stream 0:
                            pathname:       /backup/boot.dump_1
                            start:          ino 121 offset 0
                            end:            ino 122 offset 0
                            interrupted:    NO
                            media files:    1
                            media file 0:
                                    mfile index:    0
                                    mfile type:     data
                                    mfile size:     10510952
                                    mfile start:    ino 121 offset 0
                                    mfile end:      ino 122 offset 0
                                    media label:    "boot_2"
                                    media id:       9ef5ca2d-1583-4556-9c57-9484ff0b4247
    xfsdump: Dump Status: SUCCESS
    

2、使用xfsrestore恢复文件系统

2.1、语法和常用参数

  • 语法

    # 查看文件备份资料
    [root@localhost ~]# xfsrestore -I
    # 单一文件全系统恢复
    [root@localhost ~]# xfsrestore [-f 备份文件] [-L S_label] [-s] 待恢复目录
    # 通过增量备份恢复
    [root@localhost ~]# xfsrestore [-f 备份文件] -r 待恢复目录
    # 使用交互模式恢复
    [root@study ~]# xfsrestore [-f 备份文件] -i 待恢复目录
    
  • 2、常用参数

    -I :与xfsdump相同
    -f :需要恢复的文件名
    -L :就是会话标签,可以使用 -I 查询
    -s :需要恢复的目录
    -i :进入交互模式
    

2.2、恢复文件系统

  • 使用xfsrestore查看备份数据内容

    # 这里我只留了部分信息
    [root@localhost ~]# xfsrestore -I
    file system 0:
            fs id:          d183d72b-00e7-4f30-a12e-e2d768fc225f
            session 0:
                    mount point:    localhost.localdomain:/boot
                    device:         localhost.localdomain:/dev/sda1
                    time:           Fri Aug 19 17:15:32 2022
                    session label:  "boot_all"
                    session id:     61ad94fe-d55c-4e85-90fe-3b0e8198ac2f
                    level:          0
                    stream 0:
                            pathname:       /backup/boot.dump
                            media file 0:
                                    media label:    "boot_all"
                                    media id:       e00efbfb-aa9f-49bf-8fe7-d4fc4c6bd264
    
  • 恢复level0备份

    # 恢复备份
    [root@localhost ~]# xfsrestore -f /backup/boot.dump -L boot_all /boot
    xfsrestore: using file dump (drive_simple) strategy
    xfsrestore: version 3.1.7 (dump format 3.0) - type ^C for status and control
    xfsrestore: using online session inventory
    xfsrestore: searching media for directory dump
    xfsrestore: examining media file 0
    xfsrestore: reading directories
    xfsrestore: 11 directories and 345 entries processed
    xfsrestore: directory post-processing
    xfsrestore: restoring non-directory files
    xfsrestore: restore complete: 4 seconds elapsed
    xfsrestore: Restore Summary:
    xfsrestore:   stream 0 /backup/boot.dump OK (success)
    xfsrestore: Restore Status: SUCCESS
    

    完整备份的数据恢复完成了,但是我们发现好像没有后面我们创建的 10M 文件,因为这是我们在完整备份后新加的文件,所以还得继续恢复 “增量备份”

  • 恢复增量备份

    其实增量恢复和完整恢复流程一样,只是使用的备份文件不同而已,如果我们备份的顺序是

    level 0 —> level 1 —> level 2 ,那么我们恢复也要按相同顺序恢复

    [root@localhost ~]# xfsrestore -f /backup/boot.dump_1 -L boot_1 /boot/
    ...(内容和上面相同,此处省略)...