openstack虚机重启无法启动或者云盘无法挂载问题(rbd的header元数据丢失问题)

news2024/11/25 7:04:34

这里写自定义目录标题

    • 一、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镜像的特性和支持的功能。

  1. 第一个字节 (0x01):
    • 这通常用来表示一个位掩码的开关,用于指示特定的功能是否启用或支持。在很多系统中,第一个字节的最低位(最右边的位)被用来表示一个功能的状态,例如是否启用或禁用某项功能。
  2. 其余字节 (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镜像中数据对象的前缀。

详细解释每个字节的含义:

  1. 前四个字节 (0x17 00 00 00):
    • 这可能是一个表示长度或标识符的字段。在这里,0x17 可能指示后续的字符串长度为 23 个字节。
  2. 接下来的字符串 (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

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 十六进制
r72
b62
d64
_5f
d64
a61
t74
a61
.2e
838
434
c63
c63
c63
e65
232
a61
636
535
a61
838
a61
333
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镜像的大小。

  1. 前四个字节 (0x00 00 00 80):
    • 这部分是一个32位整数,表示RBD镜像的大小。在这个例子中,大小为 0x800c0000,转换为十进制是 134217728 字节,或约 128 MB
  2. 后四个字节 (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的内容快速找到对应的扩展属性信息就需要进一步研究了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1893104.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

四大水刊《PLoS One》也升一区了!发文量依旧爆炸!

关注GZH【欧亚科睿学术】&#xff0c;第一时间获取期刊最新动态&#xff01; 最新JCR正式公布后&#xff0c;期刊PLOS ONE发文量继续保持在高位&#xff0c;还上升至JCR1区&#xff0c;简直赢麻了&#xff01; 作为四大“水刊”之一&#xff0c;期刊PLOS ONE创刊于2006年&…

docker 安装 禅道

docker pull hub.zentao.net/app/zentao:20.1.1 sudo docker network create --subnet172.172.172.0/24 zentaonet 使用 8087端口号访问 使用禅道mysql 映射到3307 sudo docker run \ --name zentao2 \ -p 8087:80 \ -p 3307:3306 \ --networkzentaonet \ --ip 172.172.172.…

科东软件精彩亮相华南工博会,展现未来工业前沿技术

近日&#xff0c;华南国际工业博览会在深圳成功举办。科东软件携众多前沿技术、解决方案及最新应用案例精彩亮相&#xff0c;为参展观众带来了一场工业智能的科技盛宴。 鸿道操作系统&#xff08;Intewell&#xff09; 科东软件重点展示了鸿道操作系统&#xff08;Intewell&…

Shenandoah GC概述

文章目录 1_介绍2_原理1.0版本2.0版本3_ShenandoahGC的执行流程4_并发转移阶段 – 并发问题 1_介绍 Shenandoah 是由Red Hat开发的一款低延迟的垃圾收集器&#xff0c;Shenandoah 并发执行大部分 GC 工作&#xff0c;包括并发的整理&#xff0c;堆大小对STW的时间基本没有影响…

day11_homework_need2submit

Homework 编写—个将ts或mp4中视频文件解码到yuv的程序 yuv数据可以使用如下命令播放: ffplay -i output yuv-pix_fmt yuv420p-s 1024x436 要求: ffmpeg解析到avpacket并打印出pts和dts字段完成解码到avframe并打印任意字段完成yuv数据保存 // teminal orders on bash cd ex…

Unity2D - 基本战斗系统(Battle System Design)

1. 攻击逻辑 在Entity中初始化两个变量&#xff0c;因为在每个角色几乎都拥有攻击状态。这两个变量分别是transform类&#xff0c;接收一个坐标和一个半径画一个圆作为攻击的判定范围 public Transform attackCheck; public float attackCheckRadius; 为了可视化攻击范围&am…

基于改进高斯-拉普拉斯滤波器的一维时间序列平滑与降噪(MATLAB)

以图像处理为例&#xff0c;拉普拉斯算子是基于图像的二阶导数来找到边缘并搜索过零点&#xff0c;传统的拉普拉斯算子常产生双像素宽的边缘&#xff0c;对于较暗区域中的亮斑进行边缘检测时&#xff0c;拉普拉斯运算就会使其变得更亮。因此&#xff0c;与梯度算子一样&#xf…

亚马逊跟卖选品erp采集,跟卖卖家的选品利器,提升选品效率!

今天给亚马逊跟卖卖家&#xff0c;分享我现在在用的两种选品方式&#xff0c;做个铺货或者是跟卖都可以&#xff0c;是不是很多卖家选品现在都是亚马逊前端页面或是新品榜单选择产品跟卖&#xff0c;这样找品这就相当于大海捞针&#xff0c;而且新品榜单的产品你能看到那其他卖…

Zabbix6.4安装教程

目录 前言 主要功能 常见应用场景 一. 环境准备 二. 部署安装 三. Web页面安装 前言 Zabbix是一个开源的企业级监控解决方案&#xff0c;用于监控各种网络设备、服务器、应用程序和云资源。它能够提供全面的监控、告警和数据分析功能&#xff0c;帮助管理员及时发现和解决…

Cocos 7.2~7.4

这几天没更新CSDN&#xff0c;跑去玩Cocos了。自从知道我的粉丝百分之十之八九都是假人&#xff0c;更新确实没什么动力了。主要还是把这边当成一个日记本吧。 选择cocos的原因也很简单。会点js&#xff0c;技术栈比较接近&#xff0c;上手估计也快。简单记录下这几天的内容 主…

2-24 基于图像处理的细胞计数方法

基于图像处理的细胞计数方法。经过初次二值化、中值滤波后二值化、优化后二值化图像、填充背景色的二进制图像、开运算后的图像一系列运算后&#xff0c;进行标签设置&#xff0c;最终得到细胞总数。程序已调通&#xff0c;可直接运行。 2-24 细胞计数方法 中值滤波后二值化 - …

RAL论文:基于弹性体形变仿真的视触觉传感器仿真器Tacchi

近期伦敦国王学院罗山教授和清华大学计算机系方斌在IEEE RAL联合发表了“视触觉传感器仿真”的论文研究工作"Tacchi: A Pluggable and Low Computational Cost Elastomer Deformation Simulator for Optical Tactile Sensors"。 https://ieeexplore.ieee.org/docume…

mac如何压缩视频大小不改变画质,mac怎么压缩视频软件

在数字时代&#xff0c;视频已成为信息传递和娱乐消遣的重要媒介。然而&#xff0c;视频带来的愉悦体验背后&#xff0c;是日益增长的存储和分享压力。大视频文件不仅占用大量存储空间&#xff0c;上传和下载也变得异常缓慢。那么&#xff0c;如何才能有效压缩视频&#xff0c;…

图书电商引入实在Agent:自动化运营提效80%,节省人天1000+

某知名教辅图书品牌深耕中小学教辅图书领域&#xff0c;是中国最具影响力的教育出版策划与发行集团之一&#xff0c;以丰富的图书品类&#xff0c;满足了小学、初中、高中各年龄段读者多元化的阅读需求。 2023年&#xff0c;该品牌在运营、客服等多部门超60个场景中部署实在Ag…

CPU/内存/综合性能评估工具汇总-3:unixbench

目录 一、概括二、UnixBench 一、概括 嵌入式开发中对要设计的产品、立项的项目进行设计时&#xff0c;往往需要对关键芯片进行性能评估&#xff0c;本文主要总结基于linux系统的产品在性能评估时的工具使用总结&#xff0c;在aarch64(arm64平台下测试)&#xff0c;板卡根文件…

PowerToys 是什么?如何在 Windows 上进行安装

PowerToys 是一组由微软开发的系统实用工具&#xff0c;旨在增强 Windows 操作系统的功能和用户体验。这些工具主要针对高级用户和专业人士&#xff0c;提供了许多实用且强大的功能&#xff0c;使得 Windows 的日常使用更加高效和便捷。 PowerToys 最早出现在 Windows 95 时代…

ActiViz实战:鼠标交互和vtkCommand的问题

文章目录 前言一、消失的vtkCallbackCommand二、自定义命令vtkCommand1、自定义一个左键双击事件的命令2、使用观察者/命令模式3、结果 三、vtkObject类中的事件1、vtkCommand中所有的事件2、鼠标事件测试3、如何添加左键的双击事件 四、总结 前言 在C的VTK中&#xff0c;我们…

这次终于能把神经网络学习原理搞清楚了!

在本文中&#xff0c;我们将深入训练过程&#xff0c;探讨神经网络到底是如何学习的。 内容很肝&#xff0c;建议收藏反复观看学习&#xff01; 假设我们想创建一个神经网络&#xff0c;这个神经网络使用温度和星期几特征来预测每天冰淇淋的销售额。 这是我们使用的训练数据…

spring中集成mybatis,并测试是否成功

首先你要配置pom.xml <!-- 连接 MySQL 数据库的驱动程序 --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.16</version></dependency><!-- spring-jdbc -->&…

纯前端低代码开发脚手架 - daelui/molecule

daelui/molecule低代码开发脚手架&#xff1a;分子组件开发、预览、打包 页面代码示例、大屏代码示例预览 可开发页面组件 可开发大屏组件 项目git地址&#xff1a;https://gitee.com/daelui/molecule 在线预览&#xff1a;http://www.daelui.com/daelui/molecule/app/index.…