rbd 回收站机制
# 查看rbd
[root@node1 my-cluster]# rbd -p pool_demo ls
demo.img
[root@node1 my-cluster]# rbd info pool_demo/demo.img
rbd image 'demo.img':
size 5 GiB in 1280 objects
order 22 (4 MiB objects)
snapshot_count: 0
id: 86a0336b0860
block_name_prefix: rbd_data.86a0336b0860
format: 2
features: layering, exclusive-lock, object-map, fast-diff, deep-flatten
op_features:
flags:
create_timestamp: Wed Dec 23 15:36:46 2020
access_timestamp: Wed Dec 23 15:36:46 2020
modify_timestamp: Wed Dec 23 15:36:46 2020
# demo.img转移到回收站
[root@node1 my-cluster]# rbd trash move pool_demo/demo.img
[root@node1 my-cluster]# rbd -p pool_demo ls
[root@node1 my-cluster]# rbd trash -p pool_demo ls
86a0336b0860 demo.img
# 从回收站恢复
[root@node1 my-cluster]# rbd trash restore -p pool_demo 86a0336b0860
[root@node1 my-cluster]# rbd -p pool_demo ls
demo.img
rbd 快照 SNAPSHOTS
# 创建一快盘用于测试快照
[root@node1 ~]# rbd create pool_demo/rbd-demo.img --image-feature layering --size 10G
[root@node1 ~]# rbd info pool_demo/rbd-demo.img
rbd image 'rbd-demo.img':
size 10 GiB in 2560 objects
order 22 (4 MiB objects)
snapshot_count: 0
id: 874e9386caab
block_name_prefix: rbd_data.874e9386caab
format: 2
features: layering
op_features:
flags:
create_timestamp: Wed Dec 23 18:48:05 2020
access_timestamp: Wed Dec 23 18:48:05 2020
modify_timestamp: Wed Dec 23 18:48:05 2020
[root@node1 ~]# rbd device map pool_demo/rbd-demo.img
/dev/rbd1
[root@node1 ~]# mkfs.ext4 /dev/rbd1
[root@node1 ~]# mkdir -pv /mnt/snapshot
[root@node1 ~]# mount /dev/rbd1 /mnt/snapshot
[root@node1 ~]# echo 123 > /mnt/snapshot/test.txt
[root@node1 ~]# cat /mnt/snapshot/test.txt
123
创建快照
若要使用 创建快照,请指定选项、池名称和映像名称。rbd``snap create
rbd snap create {pool-name}/{image-name}@{snap-name}
例如:
[root@node1 ~]# rbd snap create pool_demo/rbd-demo.img@snap_20201223
列出快照
若要列出图像的快照,请指定池名称和映像名称。
rbd snap ls {pool-name}/{image-name}
例如:
[root@node1 ~]# rbd snap ls pool_demo/rbd-demo.img
SNAPID NAME SIZE PROTECTED TIMESTAMP
4 snap_20201223 10 GiB Wed Dec 23 18:56:39 2020
回滚快照
若要使用 回滚到快照,请指定选项、池名称、图像名称和快照名称。rbd``snap rollback
rbd snap rollback {pool-name}/{image-name}@{snap-name}
例如:
# 删掉 test.txt 测试
[root@node1 ~]# ls /mnt/snapshot/
lost+found/ test.txt
[root@node1 ~]# rm -f /mnt/snapshot/test.txt
[root@node1 ~]# ls /mnt/snapshot/
lost+found
[root@node1 ~]# rbd snap rollback pool_demo/rbd-demo.img@snap_20201223
Rolling back to snapshot: 100% complete...done.
# 重新挂载才会生效
[root@node1 ~]# umount /mnt/snapshot/
[root@node1 ~]# mount /dev/rbd1 /mnt/snapshot/
[root@node1 ~]# ls /mnt/snapshot/
lost+found test.txt
注意
将图像回滚到快照意味着用快照中的数据覆盖图像的当前版本。执行回滚所用的时间随图像的大小而增加。从快照克隆比将图像回滚到快照要快,而且它是返回到预先存在状态的首选方法。
删除快照
若要使用 删除快照,请指定选项、池名称、图像名称和快照名称。rbd``snap rm
rbd snap rm {pool-name}/{image-name}@{snap-name}
例如:
rbd snap purge pool_demo/rbd-demo.img@snap_20201223
注意
Ceph OSD 异步删除数据,因此删除快照不会立即释放磁盘空间。
清除快照
若要使用 删除图像的所有快照,请指定选项和图像名称。rbd``snap purge
rbd snap purge {pool-name}/{image-name}
例如:
[root@node1 ~]# rbd snap purge pool_demo/rbd-demo.img
Removing all snapshots: 100% complete...done.
镜像克隆 copy-on-write 特性
保护快照
克隆访问父快照。如果用户无意中删除了父快照,则所有克隆都会中断。为了防止数据丢失,您必须先保护快照,然后才能克隆它。
rbd snap protect {pool-name}/{image-name}@{snapshot-name}
例如:
[root@node1 ~]# rbd snap protect pool_demo/rbd-demo.img@snap_20201223
[root@node1 ~]# rbd snap ls pool_demo/rbd-demo.img
SNAPID NAME SIZE PROTECTED TIMESTAMP
6 snap_20201223 10 GiB yes Wed Dec 23 19:23:43 2020
注意不能删除受保护的快照。
克隆快照
若要克隆快照,请指定父池、映像和快照;要克隆快照,请指定父池、映像和快照。和,子池和图像名称。您必须先保护快照,然后才能克隆它。
rbd clone {pool-name}/{parent-image}@{snap-name} {pool-name}/{child-image-name}
例如:
[root@node1 ~]# rbd clone pool_demo/rbd-demo.img@snap_20201223 pool_demo/vm1-clone.img
[root@node1 ~]# rbd -p pool_demo ls
demo.img
rbd-demo.img
vm1-clone.img
注意
您可以将快照从一个池克隆到另一个池中的映像。
例如,您可以在一个池中将只读图像和快照维护为模板,在另一个池中维护可写入克隆。
取消保护快照
在删除快照之前,必须先取消保护它。此外,您不得删除具有克隆引用的快照。您必须拼合快照的每个克隆,然后才能删除快照。
rbd snap unprotect {pool-name}/{image-name}@{snapshot-name}
例如:
[root@node1 ~]# rbd snap unprotect pool_demo/rbd-demo.img@snap_20201223
列出快照的子项
要列出快照的子数据库,请执行以下操作:
rbd children {pool-name}/{image-name}@{snapshot-name}
例如:
[root@node1 ~]# rbd children pool_demo/rbd-demo.img
pool_demo/vm1-clone.img
取消克隆镜像
克隆的镜像保留对父快照的引用。将引用从子克隆中删除到父快照时,通过将信息从快照复制到克隆来有效地 "flatten" 映像。flatten 克隆的时间随着快照的大小而增加。若要删除快照,必须先抽离子镜像。
rbd flatten {pool-name}/{image-name}
例如:
[root@node1 ~]# rbd flatten pool_demo/vm1-clone.img
[root@node1 ~]# rbd info pool_demo/vm1-clone.img
rbd image 'vm1-clone.img':
size 10 GiB in 2560 objects
order 22 (4 MiB objects)
snapshot_count: 0
id: 87b1686221e5
block_name_prefix: rbd_data.87b1686221e5
format: 2
features: layering
op_features:
flags:
create_timestamp: Wed Dec 23 19:30:09 2020
access_timestamp: Wed Dec 23 19:30:09 2020
modify_timestamp: Wed Dec 23 19:30:09 2020
注意:由于 flatten 镜像包含快照中的所有信息,因此拼合图像将占用比分层克隆更多的存储空间。