牛批,Ceph RBD 備份與恢復(fù)完全指南

一、RBD 回收機制
ceph RBD 默認(rèn)提供回收站機制trash,也就是我們可以把塊數(shù)據(jù)放在回收站,在回收站中保持一定的存儲周期,當(dāng)我們后期還需要使用的時候可以在回收站在拿回來。
同樣,在公有云也有硬盤的回收站,作用和 RBD 回收站類似,當(dāng)我們后不確定是否后期還會使用,回收站會為我們保留一定時間的周期
到期 7 天后仍未續(xù)費的云硬盤,會在回收站中保留 7 天,這期間您可以續(xù)費進行恢復(fù)。7 天后,這些云硬盤會被徹底釋放,不可恢復(fù)。
回收站有兩個好處
可以有效的防止誤刪除操作 (正常情況下數(shù)據(jù)就會銷毀掉了,但是有了回收站,數(shù)據(jù)是存放在回收站中) 還有一種情況多發(fā)生的云存儲中,例如我們的服務(wù)器忘記續(xù)費,過期后默認(rèn)情況下是直接被釋放了,但是有了回收站,數(shù)據(jù)就會在回收站在為我們保留一段時間

接下來我們將 rbd 文件刪除,并演示如何從回收站中刪除和恢復(fù) rbd 文件
[root@ceph-01?~]#?ceph?osd?lspools??????????#首先我們查看一下我們的pool
1?abcdocker
2?.rgw.root
3?default.rgw.control
4?default.rgw.meta
5?default.rgw.log
6?default.rgw.buckets.index
7?default.rgw.buckets.data
8?cephfs_data
9?cephfs_metadata
[root@ceph-01?~]#?rbd?-p?abcdocker?ls???????????????#這里可以找到之前創(chuàng)建的rbd文件
abcdocker-rbd.img
#這里我們在創(chuàng)建一塊rbd文件,為我們rbd創(chuàng)建一個10G的rbd塊存儲
[root@ceph-01?~]#?rbd?create?abcdocker/ceph-trash.img?--size?10G????????#創(chuàng)建名稱為ceph-trash的rbd文件,大小為10G
[root@ceph-01?~]#?rbd?-p?abcdocker?ls
abcdocker-rbd.img
ceph-trash.img
#rbd文件大小
[root@ceph-01?~]#?rbd?info?abcdocker/ceph-trash.img
rbd?image?'ceph-trash.img':
????size?10?GiB?in?2560?objects
????order?22?(4?MiB?objects)
????snapshot_count:?0
????id:?32109b54fb476
????block_name_prefix:?rbd_data.32109b54fb476
????format:?2
????features:?layering
????op_features:
????flags:
????create_timestamp:?Wed?Mar??9?15:47:10?2022
????access_timestamp:?Wed?Mar??9?15:47:10?2022
????modify_timestamp:?Wed?Mar??9?15:47:10?2022
rbd 刪除操作
默認(rèn)情況下,刪除 rbd 鏡像文件是直接刪除,沒有保留到回收站。在回收站中也沒有進行保留
#第一種:?直接刪除,不存放到回收站
[root@ceph-01?~]#?rbd?rm?abcdocker/ceph-trash.img
Removing?image:?100%?complete...done.
[root@ceph-01?~]#?rbd?-p?abcdocker?ls
abcdocker-rbd.img
#第二種:?將RBD文件移動到回收站
[root@ceph-01?~]#?rbd?trash?move?abcdocker/ceph-trash.img?--expires-at?20220310
#trash?表示存放到回收站
#move?移動操作
#abcdocker/ceph-trash.img?pool為abcdocker,rbd文件為ceph-trash.img
#--expires-at?表示釋放時間,日期只可以精確到日
#移動到回收站后,在正常的資源池已經(jīng)看不到。但是在回收站中還可以看到
[root@ceph-01?~]#?rbd?-p?abcdocker?ls
abcdocker-rbd.img
[root@ceph-01?~]#?rbd?trash?-p?abcdocker?ls
32142766bcf53?ceph-trash.img
rbd 回收站找回操作
前面說我們通過trash move將 rbd 文件移動到回收站,例如后面我們想把 rbd 文件找回,可以通過下面的方式進行找回操作
[root@ceph-01?~]#?rbd?trash?-p?abcdocker?ls?????????#查看回收站中的rbd文件
32142766bcf53?ceph-trash.img
[root@ceph-01?~]#?rbd?trash?restore?-p?abcdocker?32142766bcf53???#恢復(fù)到abcdocker?pool中
[root@ceph-01?~]#?rbd?trash?-p?abcdocker?ls???#再次查看回收站中的rbd文件
[root@ceph-01?~]#?rbd?-p?abcdocker?ls??#查看pool中的rbd文件已經(jīng)恢復(fù)
abcdocker-rbd.img
ceph-trash.img
二、RBD 鏡像制作快照
和云硬盤一樣,RBD 也是支持快照的功能,對某個時刻的 RBD 文件進行保留生成快照。
RBD 是塊存儲基于文件系統(tǒng)上的,我們在生成快照時需要確保文件系統(tǒng)正常。否則生成的快照也出現(xiàn)損壞
云硬盤也屬于塊存儲,和 RBD 一樣支持快照。 (同時,公有云還可以定期為云硬盤做快照)

我們使用之前創(chuàng)建的 rbd 文件,將 rbd 掛載到本地的文件系統(tǒng)中,寫入文件并做快照
[root@ceph-01?~]#?rbd?-p?abcdocker?ls???????????????????????#首先查看rbd文件中的設(shè)備
abcdocker-rbd.img
ceph-trash.img
[root@ceph-01?~]#?rbd?device?map?abcdocker/ceph-trash.img???#將rbd文件掛載到本地
/dev/rbd0
[root@ceph-01?~]#?mkfs.ext4?/dev/rbd0???????????????????#格式化ceph-trash.img設(shè)備
mke2fs?1.42.9?(28-Dec-2013)
Discarding?device?blocks:?done
Filesystem?label=
OS?type:?Linux
Block?size=4096?(log=2)
Fragment?size=4096?(log=2)
Stride=1024?blocks,?Stripe?width=1024?blocks
655360?inodes,?2621440?blocks
131072?blocks?(5.00%)?reserved?for?the?super?user
First?data?block=0
Maximum?filesystem?blocks=2151677952
80?block?groups
32768?blocks?per?group,?32768?fragments?per?group
8192?inodes?per?group
Superblock?backups?stored?on?blocks:
????32768,?98304,?163840,?229376,?294912,?819200,?884736,?1605632
Allocating?group?tables:?done
Writing?inode?tables:?done
Creating?journal?(32768?blocks):?done
Writing?superblocks?and?filesystem?accounting?information:
done
[root@ceph-01?~]#?mount?/dev/rbd0?/mnt/?????????????????#將/dev/rbd0設(shè)備掛載到/mnt下
[root@ceph-01?~]#?echo?"i4t.com"?>/mnt/abcdocker.txt???????#寫入測試文件查看
[root@ceph-01?~]#?cat?/mnt/abcdocker.txt
i4t.com
[root@ceph-01?~]#?df?-h?????????????????#df?-h已經(jīng)可以看到掛載點了
Filesystem????????????Size??Used?Avail?Use%?Mounted?on
/dev/sda3??????????????50G??2.3G???48G???5%?/
devtmpfs??????????????1.9G?????0??1.9G???0%?/dev
tmpfs?????????????????1.9G?????0??1.9G???0%?/dev/shm
tmpfs?????????????????1.9G???33M??1.9G???2%?/run
tmpfs?????????????????1.9G?????0??1.9G???0%?/sys/fs/cgroup
tmpfs?????????????????1.9G???24K??1.9G???1%?/var/lib/ceph/osd/ceph-0
tmpfs?????????????????1.9G???24K??1.9G???1%?/var/lib/ceph/osd/ceph-3
192.168.31.20:6789:/??180G???35G??146G??20%?/abcdocker
tmpfs?????????????????380M?????0??380M???0%?/run/user/1000
/dev/rbd0?????????????9.8G???37M??9.2G???1%?/mnt
通過device ls可以看到鏡像名稱和對應(yīng)的掛載點
[root@ceph-01?mnt]#?rbd?device?ls
id?pool??????namespace?image?????????????snap?device
0??abcdocker???????????ceph-trash.img????-????/dev/rbd0
1??abcdocker???????????ceph-test-01.img??-????/dev/rbd1
2??abcdocker???????????ceph-temp.img?????-????/dev/rbd2
3??abcdocker???????????abcdocker-rbd.img?-????/dev/rbd3
4??abcdocker???????????ceph-trash.img????-????/dev/rbd4
取消 device 映射
[root@ceph-01?new]#?rbd?device?ls
id?pool??????namespace?image????????????snap?device
0??abcdocker???????????ceph-temp.img????-????/dev/rbd0
1??abcdocker???????????ceph-bak.img?????-????/dev/rbd1
2??abcdocker???????????ceph-bak-new.img?-????/dev/rbd2
[root@ceph-01?new]#?rbd?device?unmap?/dev/rbd0???#后面參數(shù)為device目錄
[root@ceph-01?new]#?rbd?device?ls
id?pool??????namespace?image????????????snap?device
1??abcdocker???????????ceph-bak.img?????-????/dev/rbd1
2??abcdocker???????????ceph-bak-new.img?-????/dev/rbd2
接下來我們創(chuàng)建快照,將現(xiàn)在的狀態(tài)進行保存
[root@ceph-01?~]#?rbd?-p?abcdocker?ls???????????????#查看pool下的rbd文件
abcdocker-rbd.img
ceph-trash.img
[root@ceph-01?~]#?rbd?snap?create?abcdocker/ceph-trash.img@snap_test_2022-03-09?????????????#執(zhí)行快照備份
#snap為快照參數(shù)
#abcdocker為pool名稱
#ceph-trash.img?為rbd文件
#@snap_test_2022-03-09為快照名稱
[root@ceph-01?~]#?rbd?snap?ls?abcdocker/ceph-trash.img??????????#使用ls命令可以查看快照列表,以及創(chuàng)建時間
SNAPID?NAME?????????????????SIZE???PROTECTED?TIMESTAMP
?????4?snap_test_2022-03-09?10?GiB???????????Wed?Mar??9?16:36:23?2022
刪除快照可以通過下面的命令
[root@ceph-01?~]#?rbd?snap?remove?abcdocker/ceph-trash.img@snap_test_2022-03-09???#格式和創(chuàng)建的格式相同,命令替換為remove?(相當(dāng)于rm)
Removing?snap:?100%?complete...done.
[root@ceph-01?~]#?rbd?snap?ls?abcdocker/ceph-trash.img
##如果我們鏡像沒有在使用了,可以通過purge直接刪除所有快照
[root@ceph-01?~]#?rbd?snap?purge?abcdocker/ceph-trash.img
Removing?all?snapshots:?100%?complete...done.
[root@ceph-01?~]#?rbd?snap?ls?abcdocker/ceph-trash.img
三、RBD 快照數(shù)據(jù)恢復(fù)
當(dāng)我們做好備份后,后續(xù)有需求需要回滾。 可以通過下面的命令進行回滾操作。將 rbd 文件恢復(fù)到之前創(chuàng)建好快照的位置
#首先我們刪除現(xiàn)在rbd掛載中的文件
[root@ceph-01?~]#?rm?/mnt/abcdocker.txt
rm:?remove?regular?file?‘/mnt/abcdocker.txt’??y
[root@ceph-01?~]#?ls?/mnt/
lost+found
使用快照進行恢復(fù)
#首先我們執(zhí)行rollback命令,進行數(shù)據(jù)恢復(fù)
[root@ceph-01?~]#?rbd?snap?rollback?abcdocker/ceph-trash.img@snap_test_2022-03-09
Rolling?back?to?snapshot:?100%?complete...done.
#參數(shù)解釋
#snap?為快照參數(shù)
#rollback?為恢復(fù)快照
#abcdocker?為pool名稱
#ceph-trash.img?為rbd文件名稱
#@snap_test_2022-03-09?為快照名稱(需要恢復(fù)的快照名稱)
恢復(fù)完成后,文件系統(tǒng)不能馬上識別出來,需要我們重新掛載塊設(shè)備進行恢復(fù)
[root@ceph-01?~]#?umount?/mnt/
[root@ceph-01?~]#?mount?/dev/rbd0?/mnt/
[root@ceph-01?~]#?ls?/mnt/
abcdocker.txt??lost+found
[root@ceph-01?~]#?cat?/mnt/abcdocker.txt
i4t.com
四、RBD 鏡像克隆
Ceph 支持為塊設(shè)備快照創(chuàng)建許多寫時復(fù)制COW克隆??煺辗謱邮?Ceph 塊設(shè)備客戶端能夠非常快速的創(chuàng)建映射。例如,我們創(chuàng)建一個塊設(shè)備鏡像,其中寫入一個 Linux;然后對鏡像進行快照、保護快照并創(chuàng)建寫時克隆??煺帐侵蛔x的,寫入將寫入到新的位置--進行快速克隆
完整克隆 快速克隆 (快速克隆使用的就是寫時復(fù)制)
每個克隆鏡像子級存儲對父級鏡像為引用作用,子級會讀取父級別的數(shù)據(jù)

parent 代表鏡像父級 Child 代表克隆的子級
COW 克隆和 Ceph 塊設(shè)備完全相同,可以進行讀取、寫入和調(diào)整鏡像大小??寺$R像沒用特殊限制。但是,寫時復(fù)制克隆是指快照,因此必須在克隆快照之前對其保護
Ceph 目前只支持 format 2 鏡像的克隆,內(nèi)核 rbd create --image-format 2 還不支持。rbd 因此必須使用 QEMU/KVM 或者 librbd 直接訪問版本中的克隆
4.1 RBD 分層概念
Ceph 塊設(shè)備分層是一個簡單的過程,首先我們必須創(chuàng)建鏡像的快照,并且需要保護快照,保護完成就可以開始克隆快照
克隆的鏡像有對父快照的引用,包括池 ID、鏡像 ID 和快照 ID。
1.鏡像模板: 塊設(shè)備分層的一個常見用例是創(chuàng)建一個主鏡像和一個用做克隆模板的快照。2.擴展模板: 提供比基礎(chǔ)鏡像更多的信息,例如用戶可以克隆鏡像并按照其他軟件,然后對擴展鏡像進行快照,該擴展鏡像本身可以更新就像基本鏡像一樣3.模板池: 使用塊設(shè)備分層的一個方法是創(chuàng)建一個 pool,其中包含充當(dāng)模板的主鏡像以及這些模板的快照。然后可以將只讀權(quán)限擴展到用戶,以便可以直接克隆快照,但是無法在池中寫入和執(zhí)行4.鏡像遷移/恢復(fù): 使用塊設(shè)備分層的一個方法是將數(shù)據(jù)從一個 pool 遷移或者恢復(fù)到另一個 pool 中

4.2 RBD 快照保護
如果用戶不小心刪除了父快照,所有的克隆都會終端。為了防止克隆的鏡像丟失,必須保護快照才可以進行克隆
[root@ceph-01?~]#?rbd?create?abcdocker/ceph-temp.img?--size?10G???#為了掩飾數(shù)據(jù),我們創(chuàng)建一個新的鏡像,大小為10G
[root@ceph-01?~]#?rbd?-p?abcdocker?ls
abcdocker-rbd.img
ceph-temp.img
ceph-trash.img
下面為鏡像制作一個快照
[root@ceph-01?~]#?rbd?snap?create?abcdocker/ceph-temp.img@temp???#創(chuàng)建名稱為temp的快照
[root@ceph-01?~]#?rbd?snap?ls?abcdocker/ceph-temp.img????#查看一下快照
SNAPID?NAME?SIZE???PROTECTED?TIMESTAMP
?????8?temp?10?GiB???????????Thu?Mar?10?15:03:39?2022
制作完快照后,我們將快照保護起來
[root@ceph-01?~]#?rbd?snap?protect?abcdocker/ceph-temp.img@temp???#通過protect保護
[root@ceph-01?~]#?rbd?snap?rm?abcdocker/ceph-temp.img@temp??????#這里我們就可以看到,已經(jīng)無法刪除了
Removing?snap:?0%?complete...failed.
rbd:?snapshot?'temp'?is?protected?from?removal.
2022-03-10?15:06:10.564?7f39f6a09c80?-1?librbd::Operations:?snapshot?is?protected
取消保護,如果我們想取消保護,可以通過 unproject 參數(shù)
[root@ceph-01?~]#?rbd?snap?unprotect?abcdocker/ceph-temp.img@temp
4.3 RBD 克隆快照
這會我們的父鏡像已經(jīng)制作好了,開始克隆子鏡像
克隆可以選擇 pool,可以和父鏡像不在一個 pool 中
[root@ceph-01?~]#?rbd?clone?abcdocker/ceph-temp.img@temp?abcdocker/ceph-test-01.img???#使用clone克隆參數(shù)
[root@ceph-01?~]#?rbd?clone?abcdocker/ceph-temp.img@temp?abcdocker/ceph-test-02.img
[root@ceph-01?~]#?rbd?clone?abcdocker/ceph-temp.img@temp?abcdocker/ceph-test-03.img
[root@ceph-01?~]#?rbd?-p?abcdocker?ls???#查看克隆后的鏡像
abcdocker-rbd.img
ceph-temp.img
ceph-test-01.img????????????#這里就是我們剛剛克隆完畢的
ceph-test-02.img
ceph-test-03.img
ceph-trash.img
[root@ceph-01?~]#
掛載測試,因為里面沒有數(shù)據(jù)實際上掛載的都一樣
[root@ceph-01?~]#?rbd?-p?abcdocker?ls????#查看當(dāng)前rbd文件
abcdocker-rbd.img
ceph-temp.img
ceph-test-01.img
ceph-test-02.img
ceph-test-03.img
ceph-trash.img
[root@ceph-01?~]#?rbd?device?map?abcdocker/ceph-test-01.img??#將rbd文件映射到本地
/dev/rbd1
[root@ceph-01?~]#?mkdir?/mnnt???#創(chuàng)建掛載目錄
[root@ceph-01?~]#?mkfs.ext4?/dev/rbd1???#因為我們是新建的鏡像,需要做格式化操作,我們可以將格式化后的狀態(tài)在做一個快照,在重新保護起來使用
[root@ceph-01?~]#?mount?/dev/rbd1?/mnnt
[root@ceph-01?~]#?ls?/mnnt/
lost+found
4.4 RBD 取消父級
使用 flatten 取消依賴關(guān)系,此時我們在刪除 temp 模板鏡像,下面的 ceph-test-03 就不受影響
[root@ceph-01?~]#?rbd?children?abcdocker/ceph-temp.img@temp???#使用children查看當(dāng)前快照下面創(chuàng)建的鏡像
abcdocker/ceph-test-01.img
abcdocker/ceph-test-02.img
abcdocker/ceph-test-03.img
[root@ceph-01?~]#?rbd?flatten?abcdocker/ceph-test-03.img????#執(zhí)行flatten取消父級依賴,默認(rèn)就會修改為完整克隆
Image?flatten:?100%?complete...done.
五、RBD 備份與恢復(fù)
5.1 RBD 全備
RBD 備份分為兩種,一種是全備,另外一個是增量備份
全備操作 export
這里我創(chuàng)建一個快照,并且將快照導(dǎo)出成一個單獨的鏡像。然后我們在掛載上去使用
[root@ceph-01?mnt]#?rbd?-p?abcdocker?ls???#查看我們所有的鏡像
abcdocker-rbd.img
ceph-temp.img
ceph-test-01.img
ceph-test-02.img
ceph-test-03.img
ceph-trash.img
[root@ceph-01?mnt]#?rbd?snap?ls?abcdocker/ceph-temp.img????#查看當(dāng)前快照列表
SNAPID?NAME?SIZE???PROTECTED?TIMESTAMP
?????8?temp?10?GiB?yes???????Thu?Mar?10?15:03:39?2022
[root@ceph-01?mnt]#?rbd?snap?create?abcdocker/ceph-temp.img@bak_2022-03-10??????#創(chuàng)建快照
[root@ceph-01?mnt]#?rbd?export?abcdocker/ceph-temp.img@bak_2022-03-10?/root/ceph-bak.img????#執(zhí)行export導(dǎo)出
Exporting?image:?100%?complete...done.
此時我們數(shù)據(jù)已經(jīng)備份完畢
5.2 RBD 全量數(shù)據(jù)恢復(fù)
首先我們需要將原來的掛載點進行卸載
[root@ceph-01?mnt]#?umount?/mnnt???#卸載點
恢復(fù) RBD 備份 import
[root@ceph-01?mnt]#?rbd?import?/root/ceph-bak.img?abcdocker/ceph-bak.img
Importing?image:?100%?complete...done.
[root@ceph-01?mnt]#?rbd?-p?abcdocker?ls
abcdocker-rbd.img
ceph-bak.img
剛剛已經(jīng)在 rbd 中可以看到對應(yīng)的 ceph-bak.img 文件,我們在進行掛載即可
[root@ceph-01?mnt]#?rbd?device?map?abcdocker/ceph-bak.img
/dev/rbd5
[root@ceph-01?mnt]#?mount?/dev/rbd5?/mnnt
針對掛載提示 rbd: map failed: (6) No such device or address 解決方案可以參考下面文章 https://www.cnblogs.com/zphj1987/p/13575352.html 或者臨時解決 rbd feature disable abcdocker/ceph-bak.img object-map fast-diff deep-flatten
5.3 RBD 增量備份
對于增量備份,常用于 ceph 異地備份,或者 kvm、OpenStack 相關(guān)備份??梢詼p少空間占用大小 可以寫成定時腳本,定時基于全備添加增量的備份
增量備份
增量備份使用的參數(shù)為export-diff
#首先我們先創(chuàng)建增量的快照
[root@ceph-01?~]#?rbd?device?map?abcdocker/ceph-bak.img??#添加鏡像映射
/dev/rbd1
[root@ceph-01?~]#?mount?/dev/rbd1?/mnnt???#掛載
[root@ceph-01?~]#?cd?/mnnt/
[root@ceph-01?mnnt]#?ls
1????110??122??134??146??158??17???181??193??24??36??48??6???71??83??95
10???111??123??135??147??159??170??182??194??25??37??49??60??72??84??96
100??112??124??136??148??16???171??183??195??26??38??5???61??73??85??97
101??113??125??137??149??160??172??184??196??27??39??50??62??74??86??98
102??114??126??138??15???161??173??185??197??28??4???51??63??75??87??99
103??115??127??139??150??162??174??186??198??29??40??52??64??76??88??lost+found
104??116??128??14???151??163??175??187??199??3???41??53??65??77??89??seq
105??117??129??140??152??164??176??188??2????30??42??54??66??78??9
106??118??13???141??153??165??177??189??20???31??43??55??67??79??90
107??119??130??142??154??166??178??19???200??32??44??56??68??8???91
108??12???131??143??155??167??179??190??21???33??45??57??69??80??92
109??120??132??144??156??168??18???191??22???34??46??58??7???81??93
11???121??133??145??157??169??180??192??23???35??47??59??70??82??94
接下來為 rbd 文件添加全量備份
[root@ceph-01?mnnt]#?rbd?snap?create?abcdocker/ceph-bak.img@all_bak_2022-03-10???#創(chuàng)建名稱為all_bak_2022-03-10的快照
[root@ceph-01?mnnt]#?rbd?snap?ls?abcdocker/ceph-bak.img???#查看快照
SNAPID?NAME???????????????SIZE???PROTECTED?TIMESTAMP
????10?all_bak_2022-03-10?10?GiB???????????Mon?Mar?14?14:04:33?2022
[root@ceph-01?mnnt]#?rbd?export?abcdocker/ceph-bak.img@all_bak_2022-03-10?/root/ceph-bak_all_bak_2022-03-10.img???#導(dǎo)出快照
Exporting?image:?100%?complete...done.
[root@ceph-01?mnnt]#?ll?/root/ceph-bak_all_bak_2022-03-10.img?-h??#查看快照大小,目前快照大寫10個G
-rw-r--r--?1?root?root?10G?Mar?14?14:05?/root/ceph-bak_all_bak_2022-03-10.img
全量備份添加完畢后,我們在創(chuàng)建新數(shù)據(jù),充當(dāng)增量備份
#上面是我們之前的數(shù)據(jù),現(xiàn)在我們在創(chuàng)建200個文件
[root@ceph-01?mnnt]#?for?i?in?`seq?200`;do?touch?$i.log;done
接下來做增量的備份 (增量備份恢復(fù)的時候也是要基于全量做備份)
#增量備份也是要添加快照,我們在創(chuàng)建一個快照
[root@ceph-01?mnnt]#?rbd?snap?ls?abcdocker/ceph-bak.img
SNAPID?NAME???????????????SIZE???PROTECTED?TIMESTAMP
????10?all_bak_2022-03-10?10?GiB???????????Mon?Mar?14?14:04:33?2022
[root@ceph-01?mnnt]#?rbd?snap?create?abcdocker/ceph-bak.img@new_v1???#新new_v1快照
[root@ceph-01?mnnt]#?rbd?snap?ls?abcdocker/ceph-bak.img???#查看所有快照
SNAPID?NAME???????????????SIZE???PROTECTED?TIMESTAMP
????10?all_bak_2022-03-10?10?GiB???????????Mon?Mar?14?14:04:33?2022
????11?new_v1?????????????10?GiB???????????Mon?Mar?14?14:09:20?2022
目前all_bak_2022-03-10為全量的快照,new_v1為增量備份的快照
接下來導(dǎo)出快照
[root@ceph-01?mnnt]#?rbd?export-diff?abcdocker/ceph-bak.img@new_v1?/root/ceph_new_v1.img???#導(dǎo)出增量備份文件
Exporting?image:?100%?complete...done.
[root@ceph-01?mnnt]#?ls?-lh?/root/ceph_new_v1.img???#查看增量備份文件
-rw-r--r--?1?root?root?44M?Mar?14?14:10?/root/ceph_new_v1.img
目前可以看到增量備份文件只有大概 44M,全量備份文件為 10G
對于增量備份,常用于 ceph 異地備份,或者 kvm、OpenStack 相關(guān)備份??梢詼p少空間占用大小
5.4 RBD 增量數(shù)據(jù)恢復(fù)
前面已經(jīng)說了 RBD 的增量備份,增量備份完成我們就需要考慮如何進行增量恢復(fù)數(shù)據(jù)
首先 RBD 增量數(shù)據(jù)恢復(fù)需要安裝順序進行恢復(fù),即 v1,v2,v3,v4 按照順序進行恢復(fù)即如果全量數(shù)據(jù)有影響,首先恢復(fù)全量數(shù)據(jù) 在恢復(fù)增量 v1、增量 v2、增量 v3 以此類推
數(shù)據(jù)恢復(fù)可以恢復(fù)新的鏡像中,也可以在原有的鏡像恢復(fù)
下面我們將**6.3 RBD增量備份** 生成的.log 文件刪除,然后使用import-diff命令實現(xiàn)增量恢復(fù)
我這里演示的是在全量數(shù)據(jù)沒有受影響的情況下,只刪除增量備份前的數(shù)據(jù)進行恢復(fù)
#前往掛載點,刪除*.log文件
[root@ceph-01?mnnt]#?rm?-rf?*.log
執(zhí)行增量恢復(fù)
[root@ceph-01?~]#?rbd?-p?abcdocker?ls???#確認(rèn)需要恢復(fù)鏡像
abcdocker-rbd.img
ceph-bak.img
ceph-temp.img
ceph-test-01.img
ceph-test-02.img
ceph-test-03.img
ceph-trash.img
[root@ceph-01?~]#?rbd?snap?ls?abcdocker/ceph-bak.img???#查看鏡像快照
SNAPID?NAME???????????????SIZE???PROTECTED?TIMESTAMP
????10?all_bak_2022-03-10?10?GiB???????????Mon?Mar?14?14:04:33?2022
????11?new_v1?????????????10?GiB???????????Mon?Mar?14?14:09:20?2022
#我剛剛已經(jīng)把new_v1備份前的數(shù)據(jù)刪除,也就是目前是缺少new_v1的快照數(shù)據(jù)
使用import-diff恢復(fù)到 abcdocker/ceph-bak.img 鏡像中
目前的文件夾
恢復(fù)的時候我們需要把快照名稱刪除
[root@ceph-01?mnnt]#?rbd?snap?rm?abcdocker/ceph-bak.img@new_v1
Removing?snap:?100%?complete...done.
[root@ceph-01?mnnt]#?rbd?snap?ls?abcdocker/ceph-bak.img
SNAPID?NAME???????????????SIZE???PROTECTED?TIMESTAMP
????10?all_bak_2022-03-10?10?GiB???????????Mon?Mar?14?14:04:33?2022
#如果不刪除快照名稱,會提示我們恢復(fù)的快照已經(jīng)存在
[root@ceph-01?mnnt]#?rbd?import-diff?/root/ceph_new_v1.img?abcdocker/ceph-bak.img???#執(zhí)行恢復(fù)
Importing?image?diff:?100%?complete...done.
[root@ceph-01?mnnt]#?rbd?snap?ls?abcdocker/ceph-bak.img
SNAPID?NAME???????????????SIZE???PROTECTED?TIMESTAMP
????10?all_bak_2022-03-10?10?GiB???????????Mon?Mar?14?14:04:33?2022
????13?new_v1?????????????10?GiB???????????Mon?Mar?14?14:36:36?2022
#接下來我們重新mount
[root@ceph-01?~]#?umount?-lf?/mnnt/
[root@ceph-01?~]#?mount?/dev/rbd1?/mnnt
[root@ceph-01?~]#?cd?/mnnt/
數(shù)據(jù)如下圖
下面說一下如何恢復(fù)到新的鏡像名稱中
目前我們將 ceph-bak.img 鏡像做了全備和增量備份,我們現(xiàn)在需要將這塊鏡像恢復(fù)到一個名為 ceph-bak-new.img 中
[root@ceph-01?mnnt]#?rbd?snap?ls?abcdocker/ceph-bak.img
SNAPID?NAME???????????????SIZE???PROTECTED?TIMESTAMP
????10?all_bak_2022-03-10?10?GiB???????????Mon?Mar?14?14:04:33?2022
????13?new_v1?????????????10?GiB???????????Mon?Mar?14?14:36:36?2022
#導(dǎo)出文件我們依舊采用之前的
[root@ceph-01?mnnt]#?ll?-h?/root/ceph-bak_all_bak_2022-03-10.img
-rw-r--r--?1?root?root?10G?Mar?14?14:05?/root/ceph-bak_all_bak_2022-03-10.img
[root@ceph-01?mnnt]#?ll?-h?/root/ceph_new_v1.img
-rw-r--r--?1?root?root?44M?Mar?14?14:10?/root/ceph_new_v1.img
開始恢復(fù)數(shù)據(jù),需要先恢復(fù)全量數(shù)據(jù)
[root@ceph-01?mnnt]#?rbd?import?/root/ceph-bak_all_bak_2022-03-10.img?abcdocker/ceph-bak-new.img???#恢復(fù)全備文件
Importing?image:?100%?complete...done.
#接下來開始恢復(fù)增量備份
[root@ceph-01?mnnt]#?rbd?import-diff?/root/ceph_new_v1.img?abcdocker/ceph-bak-new.img
Importing?image?diff:?100%?complete...done.
此時我們可以看一下新鏡像的快照
[root@ceph-01?mnnt]#?rbd?snap?ls?abcdocker/ceph-bak-new.img
SNAPID?NAME???SIZE???PROTECTED?TIMESTAMP
????14?new_v1?10?GiB???????????Mon?Mar?14?14:43:31?2022
#這里只包含一個增量的備份,因為這個系統(tǒng)是基于全量備份,所以看不到全量的鏡像
接下來我們進行映射掛載
[root@ceph-01?mnnt]#?rbd?device?map?abcdocker/ceph-bak-new.img
/dev/rbd2
[root@ceph-01?mnnt]#
[root@ceph-01?mnnt]#?mkdir?/new
[root@ceph-01?mnnt]#?mount?/dev/rbd2?/new
數(shù)據(jù)如下

我們可以看一下掛載點,數(shù)據(jù)是一模一樣的
[root@ceph-01?new]#?df?-h
Filesystem??????Size??Used?Avail?Use%?Mounted?on
/dev/sda3????????50G??2.6G???48G???6%?/
devtmpfs????????1.9G?????0??1.9G???0%?/dev
tmpfs???????????1.9G?????0??1.9G???0%?/dev/shm
tmpfs???????????1.9G??8.6M??1.9G???1%?/run
tmpfs???????????1.9G?????0??1.9G???0%?/sys/fs/cgroup
tmpfs???????????1.9G???24K??1.9G???1%?/var/lib/ceph/osd/ceph-0
tmpfs???????????1.9G???24K??1.9G???1%?/var/lib/ceph/osd/ceph-3
tmpfs???????????380M?????0??380M???0%?/run/user/1000
/dev/rbd1???????9.8G???37M??9.2G???1%?/mnnt????#舊鏡像
/dev/rbd2???????9.8G???37M??9.2G???1%?/new????#新鏡像
[root@ceph-01?new]#?rbd?device?ls
id?pool??????namespace?image????????????snap?device
1??abcdocker???????????ceph-bak.img?????-????/dev/rbd1?????#舊
2??abcdocker???????????ceph-bak-new.img?-????/dev/rbd2???#新原文鏈接:https://i4t.com/5309.html


你可能還喜歡
點擊下方圖片即可閱讀

云原生是一種信仰???
關(guān)注公眾號
后臺回復(fù)?k8s?獲取史上最方便快捷的 Kubernetes 高可用部署工具,只需一條命令,連 ssh 都不需要!


點擊?"閱讀原文"?獲取更好的閱讀體驗!
發(fā)現(xiàn)朋友圈變“安靜”了嗎?


