Ceph块设备-快照

前言

本博客是Ceph官方文档操作手册的实践记录,本章节操作手册

快照基础

以下分别为rbd 命令创建、罗列、和删除快照。

创建快照

用 rbd 命令创建快照,要指定 snap create 选项、存储池名和映像名。

# rbd snap create {pool-name}/{image-name}@{snap-name}
$ rbd snap create swimmingpool/bar@snap_bar

罗列快照

列出某个映像的快照,需要指定存储池名和映像名。

# rbd snap ls {pool-name}/{image-name}
$ rbd snap ls swimmingpool/bar
SNAPID NAME      SIZE TIMESTAMP
     4 snap_bar 1 GiB Tue Apr 14 19:25:19 2020

回滚快照

用 rbd 命令回滚到某一快照,指定 snap rollback 选项、存储池名、映像名和快照名。

rbd snap rollback {pool-name}/{image-name}@{snap-name}
$ rbd snap rollback swimmingpool/bar@snap_bar
Rolling back to snapshot: 100% complete...done.

删除快照

要用 rbd 删除一快照,指定 snap rm 选项、存储池名、映像名和快照名。

# rbd snap rm {pool-name}/{image-name}@{snap-name}

# 查看当前快照信息
$ rbd snap list swimmingpool/bar
SNAPID NAME      SIZE TIMESTAMP
     4 snap-bar 1 GiB Tue Apr 14 23:51:35 2020

# 删除snap-bar快照
$ rbd snap rm swimmingpool/bar@snap-bar
Removing snap: 100% complete...done.

清除快照

要用 rbd 删除某个映像的所有快照,指定 snap purge 选项、存储池名和映像名。

# rbd snap purge {pool-name}/{image-name}

# 查看当前快照信息
$ rbd snap list swimmingpool/bar
SNAPID NAME        SIZE TIMESTAMP
     6 snap01-bar 1 GiB Wed Apr 15 00:03:50 2020
     7 snap02-bar 1 GiB Wed Apr 15 00:03:54 2020
     8 snap03-bar 1 GiB Wed Apr 15 00:03:57 2020

# 清空所有快照信息
$ rbd snap purge swimmingpool/bar
Removing all snapshots: 100% complete...done.

# 查看当前映像bar中的快照信息
$ rbd snap list swimmingpool/bar

分层

保护快照

克隆映像要访问父快照。如果用户不小心删除了父快照,所有克隆映像都会损坏。为防止数据丢失,在克隆前必须先保护快照。

# 创建保护快照
# rbd snap protect {pool-name}/{image-name}@{snapshot-name}

# 在swimmingpool/bar@snap-bar的基础上创建保护快照
$ rbd snap protect swimmingpool/bar@snap-bar

# 保护快照不可以被删除
$ rbd snap remove swimmingpool/bar@snap-bar
Removing snap: 0% complete...failed.
rbd: snapshot 'snap-bar' is protected from removal.
2020-04-15 09:30:04.885 7f546b7a1840 -1 librbd::Operations: snapshot is protected

克隆快照

要克隆快照,你得指定父存储池、父映像名和快照,还有子存储池和子映像名。克隆前必须先保护快照。

# 在快照的基础上创建克隆
# rbd clone {pool-name}/{parent-image}@{snap-name} {pool-name}/{child-image-name}

# 在快照swimmingpool/bar@snap-bar的基础上,创建swimmingpool/clone-bar
$ rbd clone swimmingpool/bar@snap-bar swimmingpool/clone-bar

取消快照保护

删除快照前,必须先取消保护。另外,你不可以删除被克隆映像引用的快照,所以在你删除快照前,必须先拍平( flatten )此快照的各个克隆。

# rbd snap unprotect {pool-name}/{image-name}@{snapshot-name}
$ rbd snap unprotect swimmingpool/bar@snap-bar

罗列快照的子孙

# rbd children {pool-name}/{image-name}@{snapshot-name}
rbd -p swimmingpool children bar@snap-bar

拍平克隆映像

克隆出来的映像仍保留了对父快照的引用。要从子克隆删除这些到父快照的引用,你可以把快照的信息复制给子克隆,也就是“拍平”它。拍平克隆映像的时间随快照尺寸增大而增加。要删除快照,必须先拍平子映像。

# rbd flatten {pool-name}/{image-name}
$ rbd flatten children-swimmingpool/clone-bar
Image flatten: 100% complete...done.

Note 因为拍平的映像包含了快照的所有信息,所以拍平的映像占用的存储空间会比分层克隆要大。

实验模拟

回滚实验

# 具体的挂载方式,可看上一个博客[链接地址](https://blog.csdn.net/u012720518/article/details/105517304)

# 1. 在挂载点目录下创建一个test文件
$ cat /mnt/zzm/test.txt
hello world

# 2. 创建一个快照
$  rbd snap create swimmingpool/bar@snap-bar

# 3. 删除挂载点下的test文件
$ rm -rf /mnt/zzm/test.txt

# 4. 卸载挂载点,放置有IO操作
$ umount /mnt/zzm

# 5. 回滚快照
$ rbd snap rollback swimmingpool/bar@snap-bar

# 6. 重新挂载挂载目录
$ mount /dev/rbd1 /mnt/zzm

# 7. 查看/mnt/zzm目录下文件是否恢复
$  ls /mnt/zzm/
test.txt

文件成功恢复! 

克隆实验

# 0. swimmingpool/bar 映射的内核块/dev/rbd0下的文件
$ ls /mnt/zzm/
file1  file10  file2  file3  file4  file5  file6  file7  file8  file9  test.txt

# 1. 创建一个存储池children-swimmingpool
$ rbd osd pool create children-swimmingpool 128 128

# 2. 创建映像swimmingpool/bar的快照
$ rbd snap create swimmingpool/bar@snap-bar

# 3. 将快照swimmingpool/bar@snap-bar设置为保护快照
$ rbd snap protect swimmingpool/bar@snap-bar

# 4. 根据swimmingpool/bar@snap-bar创建children-swimmingpool的克隆映像
$ rbd snap clone swimmingpool/bar@snap-bar children-swimmingpool/clone-bar

# 如果不设置protect, 就创建克隆会出现如下错误提示
$ rbd clone swimmingpool/bar@snap01-bar swimmingpool/unprotect-bar
2020-04-15 09:49:31.357 7f8b25a45840 -1 librbd::image::CloneRequest: parent snapshot must be protected
rbd: clone error: (22) Invalid argument

# 5. 将映像children-swimmingpool/clone-bar映射到内核中
$ rbd map children-swimmingpool/clone-bar

# 6. 挂载目录/mnt/clone-zzm到/dev/rbd1上
$ umount /mnt/zzm   # /mnt/clone-zzm是/mnt/zzm的克隆,此时二者的UUID相同,需要卸载/mnt/zzm
$ mount /dev/rbd1 /mnt/clone-zzm

# 7. 查看/mnt/clone-zzm的信息
$ ls /mnt/clone-zzm/
file1  file10  file2  file3  file4  file5  file6  file7  file8  file9  test.txt

信息完全一致,成功!

删除存在克隆的快照

克隆出来的映像仍保留了对父快照的引用。要从子克隆删除这些到父快照的引用,可以把快照的信息复制给子克隆,也就是“拍平”它。拍平克隆映像的时间随快照尺寸增大而增加。要删除快照,必须先拍平子映像。

# 1. children-swimmingpool/clone-bar是swimmingpool/bar的克隆,swimmingpool的快照是swimmingpool/bar@snap-bar
$ rados lspools
swimmingpool
children-swimmingpool
$ rbd snap list swimmingpool/bar
SNAPID NAME      SIZE TIMESTAMP
    14 snap-bar 1 GiB Wed Apr 15 09:25:48 2020

# 2. 查看快照的孩子信息
# rbd -p {pool-name} children {image-name}/{snap-name}
$ rbd -p swimmingpool children bar@snap-bar

# 3. children-swimmingpool/clone-bar存在父快照swimmingpool/bar@snap-bar的引用,所以先拍平克隆和快照
# rbd flatten {pool-name}/{image-name}
$ rbd flatten children-swimmingpool/clone-bar
Image flatten: 100% complete...done.

# 4. 解除快照swimmingpool/bar@snap-bar的protected的状态
$ rbd snap unprotect swimmingpool/bar@snap-bar

# 5. 移出快照
$ rbd snap remove swimmingpool/bar@snap-bar
Removing snap: 100% complete...done.

# 6. 查看此前的克隆块存储信息
$ ls /mnt/clone-zzm/
file1  file10  file2  file3  file4  file5  file6  file7  file8  file9  test.txt

信息没有受影响,成功!
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值