和云硬盘一样,RBD也是支持快照的功能,对某个时刻的RBD文件进行保留生成快照。
RBD是块存储基于文件系统上的,我们在生成快照时需要确保文件系统的正常,否则生成的快照也出现损坏。
云硬盘也属于块存储,和RBD一样支持快照。(同时,公有云还可以定期为云硬盘做快照)
一、创建快照
查看rbd中的设备:
# rbd -p kubernetes ls
ceph-trash.img
我们将对ceph-trash.img
进行快照演示:
# rbd device map kubernetes/ceph-trash.img # 将rbd文件挂载到本地
/dev/rbd0
格式化ceph-trash.img设备:
# mkfs.ext4 /dev/rbd0
mke2fs 1.45.6 (20-Mar-2020)
Discarding device blocks: done
Creating filesystem with 2621440 4k blocks and 655360 inodes
Filesystem UUID: 20cbc12b-1cd4-467d-983e-235fec527662
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632
Allocating group tables: done
Writing inode tables: done
Creating journal (16384 blocks): done
Writing superblocks and filesystem accounting information: done
将 /dev/rbd0
设备挂载到 /mnt
下:
# mount /dev/rbd0 /mnt/
写入测试文件:
# echo "test" >/mnt/kubernetes.txt
# cat /mnt/kubernetes.txt
test
df -h
已经可以看到挂载点了
# df -h
Filesystem Size Used Avail Use% Mounted on
...
/dev/rbd6 9.8G 28K 9.3G 1% /mnt
通过 device ls
可以看到镜像名称和对应的挂载点
# rbd device ls
id pool namespace image snap device
6 kubernetes ceph-trash.img - /dev/rbd0
...
取消 device
映射:
# rbd device unmap /dev/rbd0
# rbd device ls
id pool namespace image snap device
...
接下来我们创建快照,将现在的状态进行保存:
# rbd -p kubernetes ls
ceph-trash.img
执行快照备份:
# rbd snap create kubernetes/ceph-trash.img@snap_2023-12-29
- snap 为快照参数
- kubernetes 为pool名称
- ceph-trash.img 为rbd文件
- @snap_2023-12-29 为快照名称
使用ls命令可以查看快照列表,以及创建时间
# rbd snap ls kubernetes/ceph-trash.img
SNAPID NAME SIZE PROTECTED TIMESTAMP
5 snap_2023-12-29 10 GiB Fri Dec 29 06:57:17 2023
二、RBD快照数据恢复
当我们做好备份后,后续有需求需要回滚。可以通过下面的命令进行回滚操作,将rbd文件恢复到之前创建好快照的位置:
删除现在rbd挂载中的文件:
# rm /mnt/kubernetes.txt
rm: remove regular file ‘/mnt/kubernetes.txt’? y
# ls /mnt/
lost+found
使用rollback
命令,进行数据恢复
# rbd snap rollback kubernetes/ceph-trash.img@snap_2023-12-29
Rolling back to snapshot: 100% complete...done.
参数解释:
- snap 为快照参数
- rollback 为恢复快照
- kubernetes 为pool名称
- ceph-trash.img 为rbd文件名称
- @snap_2023-12-29 为快照名称(需要恢复的快照名称)
恢复完成后,文件系统不能马上识别出来,需要我们重新挂载块设备进行恢复
# umount /mnt/
# mount /dev/rbd0 /mnt/
# ls /mnt/
kubernetes.txt lost+found
# cat /mnt/kubernetes.txt
test
可以看到,数据已经恢复了。
最后,清理删除RBD快照
删除快照可以通过下面的命令
# 格式和创建的格式相同,命令替换为remove (相当于rm)
# rbd snap remove kubernetes/ceph-trash.img@snap_2023-12-29
Removing snap: 100% complete...done.
# 如果我们镜像没有在使用了,可以通过purge直接删除所有快照
# rbd snap purge kubernetes/ceph-trash.img
Removing all snapshots: 100% complete...done.