RBD镜像快照

半兽人 发表于: 2023-12-29   最后更新时间: 2023-12-29 17:10:37  
{{totalSubscript}} 订阅, 1,071 游览

和云硬盘一样,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.
更新于 2023-12-29
在线,5小时前登录

查看ceph更多相关的文章或提一个关于ceph的问题,也可以与我们一起分享文章