这里写自定义目录标题
- 一、openstack虚机重启无法启动或者云盘无法挂载问题(rbd的header元数据丢失问题)
- 1、openstack计算节点报错现象
- 2、存储侧的rbd报错
- 3、解决思路
- 4、解决办法
- 4.1 先看下正常的rbd的元数据信息
- 4.2 查找丢失的header
- 4.3 生成反编码属性
- 4.3.1 features
- 4.3.2 object_prefix
- 4.3.3 order
- 4.3.4 size
- 4.3.5 snap_seq
- 4.3.6 parent(系统盘)
- 4.4 操作汇总
- 5、如果是vms_pool出现问题
- 5.1 替换vms_config
- 6、定位header
一、openstack虚机重启无法启动或者云盘无法挂载问题(rbd的header元数据丢失问题)
1、openstack计算节点报错现象
场景:用户在基于openstack的平台上申请了云主机及挂载了对应的云盘,使用过程发现数据盘异常,重启后发现数据盘无法挂载:

2024-07-03 21:01:29.178 6 ERROR nova.virt.block_device [instance: 78137d40-c031-45cf-a6df-922b3c69fb22] six.reraise(c, e, tb)
2024-07-03 21:01:29.178 6 ERROR nova.virt.block_device [instance: 78137d40-c031-45cf-a6df-922b3c69fb22] File "/var/lib/kolla/venv/lib/python2.7/site-packages/eventlet/tpool.py", line 83, in tworker
2024-07-03 21:01:29.178 6 ERROR nova.virt.block_device [instance: 78137d40-c031-45cf-a6df-922b3c69fb22] rv = meth(*args, **kwargs)
2024-07-03 21:01:29.178 6 ERROR nova.virt.block_device [instance: 78137d40-c031-45cf-a6df-922b3c69fb22] File "/usr/lib64/python2.7/site-packages/libvirt.py", line 605, in attachDeviceFlags
2024-07-03 21:01:29.178 6 ERROR nova.virt.block_device [instance: 78137d40-c031-45cf-a6df-922b3c69fb22] if ret == -1: raise libvirtError ('virDomainAttachDeviceFlags() failed', dom=self)
2024-07-03 21:01:29.178 6 ERROR nova.virt.block_device [instance: 78137d40-c031-45cf-a6df-922b3c69fb22] libvirtError: internal error: unable to execute QEMU command '__com.redhat_drive_add': Device 'drive-virtio-disk1' could not be initialized
2024-07-03 21:01:29.178 6 ERROR nova.virt.block_device [instance: 78137d40-c031-45cf-a6df-922b3c69fb22]
2024-07-03 21:01:29.427 6 ERROR nova.compute.manager [req-014e3f73-4eda-4725-8fd3-5bdaf93528a3 aaee0e146d5b46dca639ee70ce6a2e4e 8f187a7003bb4aa0aa8e731066f857e1 - - -] [instance: 78137d40-c031-45cf-a6df-922b3c69fb22] Failed to attach 3cba4ee1-b2cd-4761-afcd-ea600fc5e78c at /dev/vdb
2024-07-03 21:01:29.427 6 ERROR nova.compute.manager [instance: 78137d40-c031-45cf-a6df-922b3c69fb22] Traceback (most recent call last):
2024-07-03 21:01:29.427 6 ERROR nova.compute.manager [instance: 78137d40-c031-45cf-a6df-922b3c69fb22] File "/var/lib/kolla/venv/lib/python2.7/site-packages/nova/compute/manager.py", line 4926, in _attach_volume
2024-07-03 21:01:29.427 6 ERROR nova.compute.manager [instance: 78137d40-c031-45cf-a6df-922b3c69fb22] do_check_attach=False, do_driver_attach=True)
2024-07-03 21:01:29.427 6 ERROR nova.compute.manager [instance: 78137d40-c031-45cf-a6df-922b3c69fb22] File "/var/lib/kolla/venv/lib/python2.7/site-packages/nova/virt/block_device.py", line 48, in wrapped
2024-07-03 21:01:29.427 6 ERROR nova.compute.manager [instance: 78137d40-c031-45cf-a6df-922b3c69fb22] ret_val = method(obj, context, *args, **kwargs)
2024-07-03 21:01:29.427 6 ERROR nova.compute.manager [instance: 78137d40-c031-45cf-a6df-922b3c69fb22] File "/var/lib/kolla/venv/lib/python2.7/site-packages/nova/virt/block_device.py", line 291, in attach
2024-07-03 21:01:29.427 6 ERROR nova.compute.manager [instance: 78137d40-c031-45cf-a6df-922b3c69fb22] connector)
2024-07-03 21:01:29.427 6 ERROR nova.compute.manager [instance: 78137d40-c031-45cf-a6df-922b3c69fb22] File "/usr/lib/python2.7/site-packages/oslo_utils/excutils.py", line 220, in __exit__
2024-07-03 21:01:29.427 6 ERROR nova.compute.manager [instance: 78137d40-c031-45cf-a6df-922b3c69fb22] self.force_reraise()
2024-07-03 21:01:29.427 6 ERROR nova.compute.manager [instance: 78137d40-c031-45cf-a6df-922b3c69fb22] File "/usr/lib/python2.7/site-packages/oslo_utils/excutils.py", line 196, in force_reraise
2024-07-03 21:01:29.427 6 ERROR nova.compute.manager [instance: 78137d40-c031-45cf-a6df-922b3c69fb22] six.reraise(self.type_, self.value, self.tb)
2024-07-03 21:01:29.427 6 ERROR nova.compute.manager [instance: 78137d40-c031-45cf-a6df-922b3c69fb22] File "/var/lib/kolla/venv/lib/python2.7/site-packages/nova/virt/block_device.py", line 282, in attach
2024-07-03 21:01:29.427 6 ERROR nova.compute.manager [instance: 78137d40-c031-45cf-a6df-922b3c69fb22] device_type=self['device_type'], encryption=encryption)
2024-07-03 21:01:29.427 6 ERROR nova.compute.manager [instance: 78137d40-c031-45cf-a6df-922b3c69fb22] File "/var/lib/kolla/venv/lib/python2.7/site-packages/nova/virt/libvirt/driver.py", line 1362, in attach_volume
2024-07-03 21:01:29.427 6 ERROR nova.compute.manager [instance: 78137d40-c031-45cf-a6df-922b3c69fb22] self._disconnect_volume(connection_info, disk_dev)
2024-07-03 21:01:29.427 6 ERROR nova.compute.manager [instance: 78137d40-c031-45cf-a6df-922b3c69fb22] File "/usr/lib/python2.7/site-packages/oslo_utils/excutils.py", line 220, in __exit__
2024-07-03 21:01:29.427 6 ERROR nova.compute.manager [instance: 78137d40-c031-45cf-a6df-922b3c69fb22] self.force_reraise()
2024-07-03 21:01:29.427 6 ERROR nova.compute.manager [instance: 78137d40-c031-45cf-a6df-922b3c69fb22] File "/usr/lib/python2.7/site-packages/oslo_utils/excutils.py", line 196, in force_reraise
2024-07-03 21:01:29.427 6 ERROR nova.compute.manager [instance: 78137d40-c031-45cf-a6df-922b3c69fb22] six.reraise(self.type_, self.value, self.tb)
2024-07-03 21:01:29.427 6 ERROR nova.compute.manager [instance: 78137d40-c031-45cf-a6df-922b3c69fb22] File "/var/lib/kolla/venv/lib/python2.7/site-packages/nova/virt/libvirt/driver.py", line 1351, in attach_volume
2024-07-03 21:01:29.427 6 ERROR nova.compute.manager [instance: 78137d40-c031-45cf-a6df-922b3c69fb22] guest.attach_device(conf, persistent=True, live=live)
2024-07-03 21:01:29.427 6 ERROR nova.compute.manager [instance: 78137d40-c031-45cf-a6df-922b3c69fb22] File "/var/lib/kolla/venv/lib/python2.7/site-packages/nova/virt/libvirt/guest.py", line 309, in attach_device
2024-07-03 21:01:29.427 6 ERROR nova.compute.manager [instance: 78137d40-c031-45cf-a6df-922b3c69fb22] self._domain.attachDeviceFlags(device_xml, flags=flags)
2024-07-03 21:01:29.427 6 ERROR nova.compute.manager [instance: 78137d40-c031-45cf-a6df-922b3c69fb22] File "/var/lib/kolla/venv/lib/python2.7/site-packages/eventlet/tpool.py", line 186, in doit
2024-07-03 21:01:29.427 6 ERROR nova.compute.manager [instance: 78137d40-c031-45cf-a6df-922b3c69fb22] result = proxy_call(self._autowrap, f, *args, **kwargs)
2024-07-03 21:01:29.427 6 ERROR nova.compute.manager [instance: 78137d40-c031-45cf-a6df-922b3c69fb22] File "/var/lib/kolla/venv/lib/python2.7/site-packages/eventlet/tpool.py", line 144, in proxy_call
2024-07-03 21:01:29.427 6 ERROR nova.compute.manager [instance: 78137d40-c031-45cf-a6df-922b3c69fb22] rv = execute(f, *args, **kwargs)
2024-07-03 21:01:29.427 6 ERROR nova.compute.manager [instance: 78137d40-c031-45cf-a6df-922b3c69fb22] File "/var/lib/kolla/venv/lib/python2.7/site-packages/eventlet/tpool.py", line 125, in execute
2024-07-03 21:01:29.427 6 ERROR nova.compute.manager [instance: 78137d40-c031-45cf-a6df-922b3c69fb22] six.reraise(c, e, tb)
2024-07-03 21:01:29.427 6 ERROR nova.compute.manager [instance: 78137d40-c031-45cf-a6df-922b3c69fb22] File "/var/lib/kolla/venv/lib/python2.7/site-packages/eventlet/tpool.py", line 83, in tworker
2024-07-03 21:01:29.427 6 ERROR nova.compute.manager [instance: 78137d40-c031-45cf-a6df-922b3c69fb22] rv = meth(*args, **kwargs)
2024-07-03 21:01:29.427 6 ERROR nova.compute.manager [instance: 78137d40-c031-45cf-a6df-922b3c69fb22] File "/usr/lib64/python2.7/site-packages/libvirt.py", line 605, in attachDeviceFlags
2024-07-03 21:01:29.427 6 ERROR nova.compute.manager [instance: 78137d40-c031-45cf-a6df-922b3c69fb22] if ret == -1: raise libvirtError ('virDomainAttachDeviceFlags() failed', dom=self)
2024-07-03 21:01:29.427 6 ERROR nova.compute.manager [instance: 78137d40-c031-45cf-a6df-922b3c69fb22] libvirtError: internal error: unable to execute QEMU command '__com.redhat_drive_add': Device 'drive-virtio-disk1' could not be initialized
2024-07-03 21:01:29.427 6 ERROR nova.compute.manager [instance: 78137d40-c031-45cf-a6df-922b3c69fb22]
2024-07-03 21:01:29.533 6 ERROR oslo_messaging.rpc.server [req-014e3f73-4eda-4725-8fd3-5bdaf93528a3 aaee0e146d5b46dca639ee70ce6a2e4e 8f187a7003bb4aa0aa8e731066f857e1 - - -] Exception during message handling
2、存储侧的rbd报错
[root@rg8-ceph001 mmwei]# rbd info -p sata_pool volume-3cba4ee1-b2cd-4761-afcd-ea600fc5e78c
2024-07-02 00:57:50.150559 7ff4b56b3700 -1 librbd::image::OpenRequest: failed to retreive immutable metadata: (2) No such file or directory
rbd: error opening image volume-3cba4ee1-b2cd-4761-afcd-ea600fc5e78c: (2) No such file or directory
3、解决思路
大致的解决思路:
- 通过反编码生成对应的元数据的各个属性,比如features、object_prefix、order、parent、size、snap_seq
- 其中这里如果是系统盘,则会多一个parent属性(基于镜像启动)
- 具体的每个属性的编码情况需要在同集群的同pool下找一个正常的观察比对
- 建议有条件的定期对rbd的header信息进行备份
4、解决办法
4.1 先看下正常的rbd的元数据信息
[root@rg8-ceph001 mmwei]# rados -p sata_pool listomapvals rbd_header.24555242b39104 # 普通数据盘
features
value (8 bytes) :
00000000 01 00 00 00 00 00 00 00 |........|
00000008
object_prefix
value (27 bytes) :
00000000 17 00 00 00 72 62 64 5f 64 61 74 61 2e 32 34 35 |....rbd_data.245|
00000010 35 35 32 34 32 62 33 39 31 30 34 |55242b39104|
0000001b
order
value (1 bytes) :
00000000 16 |.|
00000001
size
value (8 bytes) :
00000000 00 00 00 00 19 00 00 00 |........|
00000008
snap_seq
value (8 bytes) :
00000000 00 00 00 00 00 00 00 00 |........|
00000008
[root@rg8-ceph001 mmwei]# rados -p sata_pool listomapvals rbd_header.7954f2d5e14dff # 基于镜像的系统盘
features
value (8 bytes) :
00000000 01 00 00 00 00 00 00 00 |........|
00000008
object_prefix
value (27 bytes) :
00000000 17 00 00 00 72 62 64 5f 64 61 74 61 2e 37 39 35 |....rbd_data.795|
00000010 34 66 32 64 35 65 31 34 64 66 66 |4f2d5e14dff|
0000001b
order
value (1 bytes) :
00000000 16 |.|
00000001
parent
value (48 bytes) :
00000000 01 01 2a 00 00 00 02 00 00 00 00 00 00 00 0e 00 |..*.............|
00000010 00 00 66 63 32 36 36 37 36 62 36 31 32 31 63 35 |..fc26676b6121c5|
00000020 53 0c 00 00 00 00 00 00 00 00 00 40 01 00 00 00 |S..........@....|
00000030
size
value (8 bytes) :
00000000 00 00 00 00 19 00 00 00 |........|
00000008
snap_seq
value (8 bytes) :
00000000 00 00 00 00 00 00 00 00 |........|
00000008
4.2 查找丢失的header
需要先根据debug的信息,确认丢失的volume的header信息,比如这块盘hdd3_pool/volume-1fa15d38-3e0a-450a-b60f-288faf6235b3
# 这条命令的目的是以详细模式获取特定RBD镜像的信息,并在必要时调整调试级别以获取更详细的信息
[root@rg8-ceph001 mmwei]# rbd info hdd3_pool/volume-1fa15d38-3e0a-450a-b60f-288faf6235b3 --debug-rbd 20 --debug-ms 1
......
# 这里输出信息比较多,就不展示了,可以找如下类似语句:
2024-07-04 14:13:46.051067 xxx osd_op(client.1396044205.0:3 3.9660c11e rbd_header.24555242b39104 [call rbd.get_size,call rbd.get_object_prefix] snapc 0=[] ack+read+known_if_redirected e820954) v7 -- ?+0 0x7f49740079c0 con 0x7f4974006560
# 可以看到以上输出信息中能够确认:rbd_header.24555242b39104 就是我们要还原的rbd的header
命令解释:
-
rbd: 是用于管理Ceph块设备(RBD)的命令行工具。 -
info: 是命令,用于获取指定RBD镜像的信息。 -
hdd3_pool/volume-1fa15d38-3e0a-450a-b60f-288faf6235b3: 是要查询的RBD镜像的完整名称,格式为<pool-name>/<image-name>。 -
--debug-rbd 20: 是用于设置RBD调试信息的选项,这里设置为20级别的详细度。 -
--debug-ms 1: 是用于设置与Ceph Messenger调试相关的选项,这里设置为1级别的详细度。
4.3 生成反编码属性
4.3.1 features
- features
- 我们可以看到这个需要生成的features属性信息如下:
features
value (8 bytes) :
00000000 01 00 00 00 00 00 00 00 |........|
00000008
- 键名:
features - 值:
01 00 00 00 00 00 00 00
这个值是一个8字节的数据,以十六进制表示为 01 00 00 00 00 00 00 00。在Ceph的RADOS Block Device(RBD)中,features 字段通常用于指示RBD镜像的特性和支持的功能。
- 第一个字节 (0x01):
- 这通常用来表示一个位掩码的开关,用于指示特定的功能是否启用或支持。在很多系统中,第一个字节的最低位(最右边的位)被用来表示一个功能的状态,例如是否启用或禁用某项功能。
- 其余字节 (0x00 00 00 00 00 00 00):
- 这些字节通常用作填充或保留位,以确保整个字段达到了8字节的长度。在一些系统中,这些字节可能会用来表示更多的功能位或是其他的状态信息,取决于具体的实现和需求。
features 字段的具体含义和使用取决于具体的应用和RBD镜像的配置。它可以用来指示RBD镜像的能力和支持的功能,例如是否启用了快照、克隆、异步复制等特性
那么了解了这个字段后,我们该如何生成呢:
事实上我们可以直接操作rados,而不需要去操作DB, 我们需要提前找个正常的volume,观察下features属性,并进行编码
[root@rg8-ceph001 mmwei]# echo -en \\x01\\x00\\x00\\x00\\x00\\x00\\x00\\x00 | sudo rados -p hdd1_pool setomapval rbd_header.24555242b39104 features
# 这个操作将会生成:(通过rados -p hdd1_pool listomapvals rbd_header.24555242b39104)
features
value (8 bytes) :
00000000 01 00 00 00 00 00 00 00 |........|
00000008
4.3.2 object_prefix
- object_prefix
- 我们可以看到这个需要生成的object_prefix属性信息如下:
object_prefix
value (27 bytes) :
00000000 17 00 00 00 72 62 64 5f 64 61 74 61 2e 32 34 35 |....rbd_data.245|
00000010 35 35 32 34 32 62 33 39 31 30 34 |55242b39104|
0000001b
- 键名:
object_prefix - 值:
17 00 00 00 72 62 64 5f 64 61 74 61 2e 32 34 35 35 35 32 34 32 62 33 39 31 30 34
这个值是一个27字节的数据,以十六进制表示为 17 00 00 00 72 62 64 5f 64 61 74 61 2e 32 34 35 35 35 32 34 32 62 33 39 31 30 34。在Ceph的RADOS Block Device(RBD)中,object_prefix 字段通常用于标识RBD镜像中数据对象的前缀。
详细解释每个字节的含义:
- 前四个字节 (0x17 00 00 00):
- 这可能是一个表示长度或标识符的字段。在这里,
0x17可能指示后续的字符串长度为 23 个字节。
- 这可能是一个表示长度或标识符的字段。在这里,
- 接下来的字符串 (0x72 62 64 5f 64 61 74 61 2e 32 34 35 35 35 32 34 32 62 33 39 31 30 34):
- 这部分是实际的对象前缀字符串,通常用来标识RBD镜像中数据对象的前缀。在这个例子中,字符串是
rbd_data.24555242b39104。
- 这部分是实际的对象前缀字符串,通常用来标识RBD镜像中数据对象的前缀。在这个例子中,字符串是
object_prefix 字段的具体含义是为了帮助唯一标识和组织RBD镜像中的数据对象。
那么了解了这个字段后,我们该如何生成呢:
同样需要找个正常的volume进行属性观察比较
# 这里拿 rbd_header.84ccce2a65a8a3 做测试
[root@rg8-ceph001 mmwei]# echo -en \\x17\\x00\\x00\\x00\\x72\\x62\\x64\\x5f\\x64\\x61\\x74\\x61\\x2e\\x38\\x34\\x63\\x63\\x63\\x65\\x32\\x61\\x36\\x35\\x61\\x38\\x61\\x33 |rados -p sata_pool setomapval rbd_header.84ccce2a65a8a3 object_prefix
# 或者使用另外一种方式也可以:
[root@rg8-ceph001 mmwei]# echo -en \\x17\\x00\\x00\\x00rbd_data.84ccce2a65a8a3 |rados -p sata_pool setomapval rbd_header.84ccce2a65a8a3 object_prefix
这个操作将会生成:
object_prefix
value (27 bytes) :
00000000 17 00 00 00 72 62 64 5f 64 61 74 61 2e 38 34 63 |....rbd_data.84c|
00000010 63 63 65 32 61 36 35 61 38 61 33 |cce2a65a8a3|
0000001b
# 比对发现:
除了占位符:其他都是对rbd_data.84ccce2a65a8a3 编码
具体编码:将字符串 rbd_data.84ccce2a65a8a3 中的每个字符转换为其对应的 ASCII 十六进制值。
| 字符 | ASCII 十六进制 |
|---|---|
| r | 72 |
| b | 62 |
| d | 64 |
| _ | 5f |
| d | 64 |
| a | 61 |
| t | 74 |
| a | 61 |
| . | 2e |
| 8 | 38 |
| 4 | 34 |
| c | 63 |
| c | 63 |
| c | 63 |
| e | 65 |
| 2 | 32 |
| a | 61 |
| 6 | 36 |
| 5 | 35 |
| a | 61 |
| 8 | 38 |
| a | 61 |
| 3 | 33 |
4.3.3 order
- order
- 我们可以看到这个需要生成的order属性信息如下:
order
value (1 bytes) :
00000000 16 |.|
00000001
- 键名:
order - 值:
16
这个值是一个字节的数据,以十六进制表示为 16。在Ceph的RADOS Block Device(RBD)中,order 字段通常用于表示数据存储的顺序。
- 值
16: 这个字节表示RBD镜像的数据存储顺序。具体的含义可以因实现和上下文而有所不同,但通常情况下,这个值可能表示数据块的大小或存储的排列顺序。
在一些情况下,order 字段可能是预先定义的数值,用来指定RBD镜像的一些基本特性或配置参数。
那么了解了这个字段后,我们该如何生成呢:
[root@rg8-ceph001 mmwei]# echo -en \\x16|rados -p sata_pool setomapval rbd_header.84ccce2a65a8a3 order
这个操作将会生成:
order
value (1 bytes) :
00000000 16 |.|
00000001
4.3.4 size
- size
- 我们可以看到这个需要生成的size属性信息如下:
size
value (8 bytes) :
00000000 00 00 00 80 0c 00 00 00 |........|
00000008
- 键名:
size - 值:
00 00 00 80 0c 00 00 00
这个值是一个8字节的数据,以十六进制表示为 00 00 00 80 0c 00 00 00。在Ceph的RADOS Block Device(RBD)中,size 字段通常用于表示RBD镜像的大小。
- 前四个字节 (0x00 00 00 80):
- 这部分是一个32位整数,表示RBD镜像的大小。在这个例子中,大小为
0x800c0000,转换为十进制是134217728字节,或约128 MB。
- 这部分是一个32位整数,表示RBD镜像的大小。在这个例子中,大小为
- 后四个字节 (0x0c 00 00 00):
- 这部分可能是填充字节或保留字段,在这个例子中没有显示具体的用途或值。
size 字段用来指示RBD镜像的存储空间大小,这对于管理和配置存储分配非常重要。
那么了解了这个字段后,我们该如何生成呢:
[root@rg8-ceph001 mmwei]# echo -en \\x00\\x00\\x00\\x80\\x0c\\x00\\x00\\x00 | sudo rados -p sata_pool setomapval rbd_header.84ccce2a65a8a3 size
这个操作将会生成:
size
value (8 bytes) :
00000000 00 00 00 80 0c 00 00 00 |........|
00000008
4.3.5 snap_seq
- snap_seq
- 我们可以看到这个需要生成的snap_seq属性信息如下:
snap_seq
value (8 bytes) :
00000000 00 00 00 00 00 00 00 00 |........|
00000008
- 键名:
snap_seq - 值:
00 00 00 00 00 00 00 00
这个值是一个8字节的数据,以十六进制表示为 00 00 00 00 00 00 00 00。在Ceph的RADOS Block Device(RBD)中,snap_seq 字段通常用于表示RBD镜像的快照序列号。
- 这个字段的值为全零,表示当前RBD镜像没有任何快照。快照序列号通常用来标识和管理RBD镜像的快照,每创建一个新的快照,序列号会增加。然而,如果值为全零,说明当前没有任何快照存在。
那么了解了这个字段后,我们该如何生成呢:
[root@rg8-ceph001 mmwei]# echo -en \\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00 | sudo rados -p sata_pool setomapval rbd_header.84ccce2a65a8a3 snap_seq
这个操作将会生成:
snap_seq
value (8 bytes) :
00000000 00 00 00 00 00 00 00 00 |........|
00000008
4.3.6 parent(系统盘)
- parent
- 我们可以看到这个需要生成的parent属性信息如下:
parent
value (48 bytes) :
00000000 01 01 2a 00 00 00 02 00 00 00 00 00 00 00 0e 00 |..*.............|
00000010 00 00 66 63 32 36 36 37 36 62 36 31 32 31 63 35 |..fc26676b6121c5|
00000020 53 0c 00 00 00 00 00 00 00 00 00 40 01 00 00 00 |S..........@....|
00000030
- 键名:
parent - 值:
01 01 2a 00 00 00 02 00 00 00 00 00 00 0e 00 00 00 66 63 32 36 36 37 36 62 36 31 32 31 63 35 53 0c 00 00 00 00 00 00 00 00 00 40 01 00 00 00
这个值是一个48字节的数据,以十六进制表示。在Ceph的RADOS Block Device(RBD)中,parent 字段通常用于表示RBD镜像的父镜像信息。
- 这个值包含了父镜像的相关信息,具体结构和含义取决于实际的使用场景和实现细节。通常,父镜像信息可能包括父镜像的ID、大小、特性等。
- 那么了解了这个字段后,我们该如何生成呢:
[root@rg8-ceph001 mmwei]# echo -en \\x01\\x01\\x2a\\x00\\x00\\x00\\x02\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x0e\\x00\\x00\\x00\\x66\\x63\\x32\\x36\\x36\\x37\\x36\\x62\\x36\\x31\\x32\\x31\\x63\\x35\\x53\\x0c\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x40\\x01\\x00\\x00\\x00 |rados -p sata_pool setomapval rbd_header.84ccce2a65a8a3 parent
这个操作将会生成:
parent
value (48 bytes) :
00000000 01 01 2a 00 00 00 02 00 00 00 00 00 00 00 0e 00 |..*.............|
00000010 00 00 66 63 32 36 36 37 36 62 36 31 32 31 63 35 |..fc26676b6121c5|
00000020 53 0c 00 00 00 00 00 00 00 00 00 40 01 00 00 00 |S..........@....|
00000030
# 或者可以反编码确认下是什么信息,直接echo -ne也是可以的
4.4 操作汇总
# 普通云盘
[root@rg8-ceph001 mmwei]# echo -en \\x3d\\x00\\x00\\x00\\x00\\x00\\x00\\x00 | sudo rados -p sata_pool setomapval rbd_header.55057c65d568a6 features
[root@rg8-ceph001 mmwei]# echo -en \\x16\\x00\\x00\\x00rbd_data.2a41bd7632bf16 | sudo rados -p sata_pool setomapval rbd_header.2a41bd7632bf16 object_prefix
[root@rg8-ceph001 mmwei]# echo -en \\x16 | sudo rados -p sata_pool setomapval rbd_header.2a41bd7632bf16 order
[root@rg8-ceph001 mmwei]# echo -en \\x00\\x00\\x00\\x\\x00\\x00\\x00\\x00 | sudo rados -p sata_pool setomapval rbd_header.2a41bd7632bf16 size
[root@rg8-ceph001 mmwei]# echo -en \\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00 | sudo rados -p sata_pool setomapval rbd_header.2a41bd7632bf16 snap_seq
# 基于镜像启动的系统盘
需要多添加一个parent
[root@rg8-ceph001 mmwei]# echo -en \\x01\\x01\\x2a\\x00\\x00\\x00\\x02\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x0e\\x00\\x00\\x00\\x66\\x63\\x32\\x36\\x36\\x37\\x36\\x62\\x36\\x31\\x32\\x31\\x63\\x35\\x53\\x0c\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x40\\x01\\x00\\x00\\x00 |rados -p sata_pool setomapval rbd_header.84ccce2a65a8a3 parent
# 正常后
[root@rg8-ceph001 mmwei]# rbd info sata_pool/volume-3cba4ee1-b2cd-4761-afcd-ea600fc5e78c
rbd image 'volume-3cba4ee1-b2cd-4761-afcd-ea600fc5e78c':
size 200 GB in 51200 objects
order 22 (4096 kB objects)
block_name_prefix: rbd_data.2a41bd7632bf16
format: 2
features: layering
flags:
[root@rg8-ceph001 mmwei]#
5、如果是vms_pool出现问题
5.1 替换vms_config
虚机重启发现无法启动,提升ffed7c31-5749-4ddd-8b88-a44b85d70e87_disk.config (2) No such file or directory
# 假设ffed7c31-5749-4ddd-8b88-a44b85d70e87 系统盘出现问题
# 假设8fed7c31-5749-4ddd-8b88-a44b85d70e88 系统盘正常
[root@rg8-ceph001 mmwei]# rbd rm ffed7c31-5749-4ddd-8b88-a44b85d70e87_disk.config -p vms
[root@rg8-ceph001 mmwei]# rbd cp ffed7c31-5749-4ddd-8b88-a44b85d70e87_disk.config 8fed7c31-5749-4ddd-8b88-a44b85d70e88_disk.config
# 硬重启虚机,变可恢复
6、定位header
# 先确认云盘在哪个osd上
[root@rg8-ceph001 mmwei]# ceph osd map sata_pool rbd_header.84ccce2a65a8a3
osdmap e536228 pool 'sata_pool' (1) object 'rbd_header.84ccce2a65a8a3' -> pg 1.867bd707 (1.1707) -> up ([309,118,27], p309) acting ([309,118,27], p309)
# 然后去对应的osd上寻找
[root@rg8-ceph004 DIR_B]# pwd
/var/lib/ceph/osd/ceph-27/current/1.1707_head/DIR_7/DIR_0/DIR_7/DIR_D/DIR_B
# 使用 find . -name '*84ccce2a65a8a3*'
# 通过osd正常便能找到
[root@rg8-ceph004 DIR_B]# getfattr -d -m - rbd\\uheader.84ccce2a65a8a3__head_867BD707__1
# file: rbd\134uheader.84ccce2a65a8a3__head_867BD707__1
user.ceph._=0sEAhgAgAABAM6AAAAAAAAABkAAAByYmRAAYDHAAAAAEAAAAAAAAA/////wAAAABTi9CgAAAACnLggAAgIVAAAACBi1xT8AAAAABgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAgYtcU/AAAAAAQDlAAAAIDYHemUVQAAHgAAAA==
user.ceph._@1=0sAAAAAPSmhiYAAgAArB/QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADQAvQoAAAAAAAAAAAABAAAAgNgd6ZRVAAAIGLXFPwAAAAAEA5QAAACA2B3plFUAAB4AAAAAAAAA9KaGJgACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==
user.ceph._@2=0sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAplKGZo4gFR7//////////wAAAAAAAAAAAAAAAAAAAAAAAAAA
user.ceph.snapset=0sAgIZAAAAAAAAAAAAAAAAAAAA==
user.cephos.spill_out=0sMAA=
但是能否通过这个header的内容快速找到对应的扩展属性信息就需要进一步研究了。



















