XFS提供了 xfsdump 和 xfsrestore 工具協助備份XFS文件系統中的數據。xfsdump 按inode順序備份一個XFS文件系統。
centos7選擇xfs格式作為默認文件系統,而且不再使用以前的ext,仍然支持ext4,xfs專為大數據產生,每個單個文件系統最大可以支持8eb,單個文件可以支持16tb,不僅數據量大,而且擴展性高。還可以通過xfsdump,xfsrestore來備份和恢復。
與傳統的UNIX文件系統不同,XFS不需要在備份前被卸載;對使用中的XFS文件系統做備份就可以保證鏡像的一致性。XFS的備份和恢復的過程是可以被中斷然后繼續的,無須凍結文件系統。xfsdump 甚至提供了高性能的多線程備份操作——它把一次dump拆分成多個數據流,每個數據流可以被發往不同的目的地
首先了解一下xfsdump的備份級別有以下兩種,默認為0(即完全備份)
0 級別代表: 完全備份
1 到9級別代表: 增量備份
擴展:
完全備份:每次都把指定的備份目錄完整的復制一遍,不管目錄下的文件有沒有變化;
增量備份:每次將之前(第一次、第二次、直到前一次)做過備份之后有變化的文件進行備份;
差異備份:每次都將第一次完整備份以來有變化的文件進行備份。
4.4.1 環境准備
實驗環境:
系統CENTOS7.2 添加一塊虛擬硬盤(准備一個測試分區)
正常使用一塊磁盤過程如下:
添加磁盤大小:20G à分區à格式化à掛載進行使用
對新添加的硬盤進行格式化:
[root@xuegod63 ~]# fdisk /dev/sdb #指定需要分區的設備
歡迎使用 fdisk (util-linux 2.23.2)。
更改將停留在內存中,直到您決定將更改寫入磁盤。
使用寫入命令前請三思。
Device does not contain a recognized partition table
使用磁盤標識符 0x06d5a427 創建新的 DOS 磁盤標簽。
命令(輸入 m 獲取幫助):n #創建一個新的分區
Partition type:
p primary (0 primary, 0 extended, 4 free) #主分區
e extended #擴展分區
Select (default p): p #創建一個主分區
分區號 (1-4,默認 1):
起始 扇區 (2048-41943039,默認為 2048):
將使用默認值 2048
Last 扇區, +扇區 or +size{K,M,G} (2048-41943039,默認為 41943039):+1G #指定分區大小
分區 1 已設置為 Linux 類型,大小設為 1 GiB
命令(輸入 m 獲取幫助):p #打印分區表
磁盤 /dev/sdb:21.5 GB, 21474836480 字節,41943040 個扇區
Units = 扇區 of 1 * 512 = 512 bytes
扇區大小(邏輯/物理):512 字節 / 512 字節
I/O 大小(最小/最佳):512 字節 / 512 字節
磁盤標簽類型:dos
磁盤標識符:0x06d5a427
設備 Boot Start End Blocks Id System
/dev/sdb1 2048 2099199 1048576 83 Linux
命令(輸入 m 獲取幫助):w #保存
The partition table has been altered!
Calling ioctl() to re-read partition table.
正在同步磁盤。
[root@xuegod63 ~]# ls /dev/sdb* #查看第二塊磁盤
/dev/sdb /dev/sdb1
使用新的分區,格式化分區,並進行掛載
[root@xuegod63 ~]# mkfs.xfs /dev/sdb1 #格式化分區
[root@xuegod63 ~]# mkdir /sdb1 #創建掛載點
[root@xuegod63 ~]# mount /dev/sdb1 /sdb1 #掛載
准備備份測試文件
[root@xuegod63 ~]# cd /sdb1/ #進入到/目錄下的sdb1
[root@xuegod63 sdb1]# cp /etc/passwd ./ #復制/etc/passwd文件到當前目錄下
[root@xuegod63 sdb1]# mkdir test #創建一個新的文件夾
[root@xuegod63 sdb1]# touch test/a #在test目錄下創建一個文件
[root@xuegod63 sdb1]# tree /sdb1/ #查看sdb1目錄下的內容
[root@xuegod63 sdb1]# tree /sdb1/
/sdb1/
├── passwd
└── test
└── a
4.4.2 備份
1、備份整個分區。 (這個功能就像是虛擬機的快照,服務器被黑后,進行快速恢復)
xfsdump -f 備份存放位置 要備份路徑或設備文件
注意:備份的路徑這里不能寫成/sdb1/ 可以是/dev/sdb1 或/sdb1(剛掛載的目錄)
[root@xuegod63 sdb1]# xfsdump -f /opt/dump_sdb1 /dev/sdb1
xfs拷貝備份 -f /opt/dump_adb1(直接創建的文件)
[root@xuegod63 sdb1]# xfsdump -f /opt/dump_sdb1 /dev/sdb1 #把/dev/下的sdb1或者是之前把/dev/sdb1掛載到根目錄下的/sdb1 備份到/opt/目錄下的新建的文件dump_sdb1都可以
xfsdump: using file dump (drive_simple) strategy
xfsdump: version 3.1.4 (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 #指定備份會話標簽
session label entered: "dump_sdb1"
--------------------------------- end dialog ---------------------------------
xfsdump: level 0 dump of xuegod63.cn:/sdb1
xfsdump: dump date: Fri Nov 17 12:24:53 2017
xfsdump: session id: b5a25fcd-d43d-4308-bf29-142066f89d9a
xfsdump: session label: "dump_sdb1"
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: 25856 bytes
============== media label dialog =============================
please enter label for media in drive 0 (timeout in 300 sec)
-> sdb1 #指定設備標簽,就是對要備份的設備做一個描述
media label entered: "sdb1"
--------------------------------- 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 24544 bytes
xfsdump: dump size (non-dir files) : 2592 bytes
xfsdump: dump complete: 46 seconds elapsed
xfsdump: Dump Summary:
xfsdump: stream 0 /opt/dump_sdb1 OK (success)
xfsdump: Dump Status: SUCCESS # 顯示success表示成功
2、 指定備份時免交互操作,方便后期做定時備份
[root@xuegod63 sdb1]# xfsdump -f /opt/dump_passwd /sdb1 -L dump_passwd -M media1
-L :xfsdump 紀錄每次備份的 session 標頭,這里可以填寫針對此文件系統的簡易說明
-M :xfsdump 可以紀錄儲存媒體的標頭,這里可以填寫此媒體的簡易說明
[root@xuegod63 opt]# xfsdump -f /opt/dump_passwd /sdb1或(/dev/sdb1) -L dump_passwd -M sdb1
xfsdump: using file dump (drive_simple) strategy
xfsdump: version 3.1.7 (dump format 3.0) - type ^C for status and control
xfsdump: WARNING: most recent level 0 dump was interrupted, but not resuming that dump since resume (-R) option not specified
xfsdump: level 0 dump of xuegod63.cn:/sdb1
xfsdump: dump date: Sat Jun 15 13:55:04 2019
xfsdump: session id: f5ee3040-8655-4a69-9f26-bead841eb49e
xfsdump: session label: "dump_passwd"
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: 25856 bytes
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 24544 bytes
xfsdump: dump size (non-dir files) : 2592 bytes
xfsdump: dump complete: 20 seconds elapsed
xfsdump: Dump Summary:
xfsdump: stream 0 /opt/dump_passwd OK (success)
xfsdump: Dump Status: SUCCESS # 顯示success表示成功
[root@xuegod63 opt]# ls /opt/dump_passwd #查看已經備份成功
/opt/dump_passwd
3、指定只備份分區中某個目錄
參數:-s 文件路徑 只對指定的文件進行備份,-s指定時,路徑寫的是相對路徑(-s可以是文件或目錄)
[root@xuegod63 sdb1]# ls /boot/grub2/grub.cfg
/boot/grub2/grub.cfg
[root@xuegod63 sdb1]# xfsdump -f /opt/dump_grub2 -s grub2/grub.cfg /boot -L
dump_grub2 -M boot-grub2
:文件位置在grub2 grub2本來就在根目錄下所以不用再加/boot,
:要備份的文件目錄位置是在/boot #絕對路徑
:#指定備份會話標簽
:#指定設備標簽,就是對要備份的設備做一個描述
[root@xuegod63 boot]# ls /opt
dump_grub2 dump_passwd dump_sdb1 rh
[root@xuegod63 boot]#ll -hl /0pt
總用量 76K
-rw-r--r-- 1 root root 28K 6月 15 14:40 dump_grub2
-rw-r--r-- 1 root root 24K 6月 15 13:55 dump_passwd
-rw-r--r-- 1 root root 24K 6月 15 12:53 dump_sdb1
drwxr-xr-x. 2 root root 6 9月 7 2017 rh
4、查看備份信息與內容
備份成功后,我們就可以在/var/lib/xfsdump/inventory目錄下看到生成的檔案日志信息
[root@xuegod63 boot]# ls /var/lib/xfsdump/inventory/
0a7b7b70-a7c0-45d8-b116-f219b15ba91a.InvIndex 69bf6c3d-2d25-48d3-b73c-1a987bbec173.StObj b60e1056-d4f6-4683-b486-72cf8fe6aee4.InvIndex
0e52cdd2-37ff-4213-9432-38f0dfba46b6.StObj
[root@xuegod63 opt]# xfsdump -I(字母大寫i)這個可以查看備份的更詳細
測試恢復:先刪除之前創建的內容
[root@xuegod63 sdb1]# ls
passwd test
[root@xuegod63 sdb1]# pwd
/sdb1
[root@xuegod63 sdb1]# rm -rf ./*
4.4.3 文件系統恢復
語法:xfsrestore -f 指定恢復文件的位置 指定存放恢復后的文件的路徑
[root@xuegod63 opt]# xfsrestore -f /opt/dump_sdb1 /sdb1
查看恢復情況
[root@xuegod63 ~]# ls /sdb1/
恢復單個文件如下:
[root@xuegod63 ~]# mkdir /var/test/
[root@xuegod63 ~]# xfsrestore -f /opt/dump_grub2 -s grub2/grub.cfg /var/test/#恢復文件
之前備份再/opt/的文件 只恢復一個文件 恢復到/var/test/文件夾下
[root@xuegod63 ~]# xfsrestore -f /opt/dump_grub2 -s grub2 /var/test/ #恢復目錄
之前備份再/opt/的文件 恢復一個目錄 恢復到/var/test/文件夾下
注:
使用 xfsdump 時,請注意下面下面的幾個限制:
1、xfsdump 不支持沒有掛載的文件系統備份!所以只能備份已掛載的!
2、xfsdump 必須使用 root 的權限才能操作 (涉及文件系統的關系)
3、xfsdump 只能備份 XFS 文件系統
4、xfsdump 備份下來的數據 (檔案或儲存媒體) 只能讓 xfsrestore 解析
5、xfsdump 是透過文件系統的 UUID 來分辨各個備份檔的,因此不能備份兩個具有相同 UUID 的文件系統
4.4.4 增量備份
概念
增量備份是指在一次全備份或上一次增量備份后,以后每次的備份只需備份與前一次相比增加或者被修改的文件。這就意味着,第一次增量備份的對象是進行全備后所產生的增加和修改的文件;第二次增量備份的對象是進行第一次增量備份后所產生的增加和修改的文件,以此類推。
優缺點
優點:沒有重復的備份數據,因此備份的數據量不大,備份所需的時間很短。
缺點:數據恢復相對比較麻煩,它需要上一次全備份和所有增量備份的內容才能夠完全恢復成功,並且它們必須沿着從全備份到依次增量備份的時間順序逐個反推恢復,因此可能會延長的恢復時間
實戰: 增量備份文件系統
准備一個備份目錄進行備份
[root@xuegod63 sdb1]# tree /sdb1
/sdb1/
├── passwd
└── test
└── a
對上面的內容進行第一次全備
[root@xuegod63 sdb1]# xfsdump -f /opt/test-full /sdb1 -L test-full -M media0
增加一些內容,然后進行第1次增量備份
[root@xuegod63 ~]# touch /sdb1/1.txt /sdb1/2.txt
[root@xuegod63 ~]# tree /sdb1/
/sdb1/
├── 1.txt
├── 2.txt
├── passwd
└── test
└── a
[root@xuegod63 sdb1]# xfsdump -l 1 -f /opt/test-back1 /sdb1 -L test-bak1 -M media0
-l <level> 做一個等級為1的備份
再次增加內容,然后進行level 2級別的增量備
[root@xuegod63 sdb1]# touch /sdb1/test/a.txt /sdb1/test/b.txt
[root@xuegod63 ~]# tree /sdb1/
/sdb1/
├── 1.txt
├── 2.txt
├── passwd
└── test
├── a
├── a.txt
└── b.txt
[root@xuegod63 sdb1]# xfsdump -l 2 -f /opt/test-back2 /sdb1 -L test-bak2 -M media0
[root@xuegod63 ~]# rm -rf /sdb1/* #刪除所有數據
現在進行恢復,要想恢復全部全部數據,包括新添加的文件,如何恢復?
步驟:
1、先恢復完全備份
2、情況1: 恢復最后一次增量備份(如果兩次增量備份都是1級的,所以只需要恢復最后一個增量就可以了。
3、情況2:如果你做的是第一次是1級備,第二次是2級備,那么你在恢復的時候就需要先恢復完全備份,然后是1級備,最后是2級備)
[root@xuegod63 ~]# xfsrestore -f /opt/test-full /sdb1/
[root@xuegod63 ~]# xfsrestore -f /opt/test-back2 /sdb1/ #故意先恢復back2,查看
[root@xuegod63 ~]# tree /sdb1/ #查看,發現沒有1.txt ,2.txt
/sdb1/
├── passwd
└── test
├── a
├── a.txt
└── b.txt
[root@xuegod63 ~]# xfsrestore -f /opt/test-back1 /sdb1/
[root@xuegod63 ~]# tree /sdb1/
到此,數據恢復成功了。