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 镜像包含快照中的所有信息,因此拼合图像将占用比分层克隆更多的存储空间。