日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

关于部署osd过程中:Device is in use by a device-mapper mapping问题解决

發布時間:2023/11/27 生活经验 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 关于部署osd过程中:Device is in use by a device-mapper mapping问题解决 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

ceph環境:12.2.1
使用古老的ceph-disk工具部署osd,僅僅prepare過程中就出現如上所示問題
Device is in use by a device-mapper mapping md127

解決方法如下:

  1. 由于device-mapper為系統自己的磁盤映射器,此時檢查系統是否有邏輯卷
    pvs
    lvs
    vgs
    如為出現邏輯卷設備,則表明當前磁盤并未創建邏輯卷
    此時針對設備上的磁盤做如下操作
    sgdisk -z -og /dev/sdb,可以格式化成功,即磁盤內部扇區結構沒有問題
    sgdisk -n 1:+2G:+100G /dev/sdb,可以創建gpt分區成功,磁盤支持分區操作
    按道理磁盤是可以進行osd部署的,只要能夠正常格式化,保證gpt分區創建成功,ceph-disk部署osd對磁盤也就這么多要求了

    沒辦法,還得繼續解決啊

  2. 根據問題查看ceph-disk工具的源碼main.py
    該處邏輯處理如下

    def verify_not_in_use(dev, check_partitions=False): #檢查是否存在device_mapper設備
    """
    Verify if a given device (path) is in use (e.g. mounted or
    in use by device-mapper).:raises: Error if device is in use.
    """
    assert os.path.exists(dev)
    if is_mounted(dev): #在該處進行檢測,大發現該磁盤被某個設備持有,則認為它被占用raise Error('Device is mounted', dev)
    holders = is_held(dev)
    if holders:raise Error('Device %s is in use by a device-mapper ''mapping (dm-crypt?)' % dev, ','.join(holders))
    ...def is_held(dev): #檢查是否有其他設備持有當前設備
    """
    Check if a device is held by another device (e.g., a dm-crypt mapping)
    """
    assert os.path.exists(dev)
    if is_mpath(dev): #檢查是否為dm設備return []dev = os.path.realpath(dev)
    base = get_dev_name(dev)
    ...def is_mpath(dev):
    """
    True if the path is managed by multipath
    """
    if FREEBSD:return False
    uuid = get_dm_uuid(dev) #去指定路徑下嘗試獲取dm設備的uuid
    return (uuid and(re.match('part\d+-mpath-', uuid) orre.match('mpath-', uuid)))
    ...
    def get_dm_uuid(dev):
    uuid_path = os.path.join(block_path(dev), 'dm', 'uuid')
    LOG.debug("get_dm_uuid " + dev + " uuid path is " + uuid_path)
    if not os.path.exists(uuid_path):return False
    uuid = open(uuid_path, 'r').read()
    LOG.debug("get_dm_uuid " + dev + " uuid is " + uuid)
    return uuiddef block_path(dev):
    if FREEBSD:return dev
    path = os.path.realpath(dev)
    rdev = os.stat(path).st_rdev
    (M, m) = (os.major(rdev), os.minor(rdev))
    return "{sysfs}/dev/block/{M}:{m}".format(sysfs=SYSFS, M=M, m=m) #即在 /sys/dev/block 路徑下存在對應的dm 設備,uuid號為md127	
    

    根據以上調用邏輯,最終ceph-disk是通過/sys/dev/block檢查是否有對應的dm設備

  3. cd /sys/dev/block 并執行ls -l
    果然看到了對應的dm設備
    ../../devices/virtual/block/md127
    ../../devices/virtual/block/md126

    此時根據dm設備存儲的文件,打開cat /proc/mdstat文件,查看果然存在md127和md126設備,查閱發現這兩個設備為raid分區。

  4. 再次檢查系統是否存在raid的配置文件
    ls /etc/mdadm.conf不存在
    綜上,大概可知情況如下:
    我們部署osd用到的磁盤之前在某個服務器上被綁定過raid,則拿到當前設備直接使用,系統能夠監測到該磁盤被使用做raid,所以仍然會創建對應的raid分區,但是并未有相關的配置文件生成

  5. 知道了問題點,即需要進行解決
    這里也是借鑒前人經驗mdadm命令出手

    • mdadm -S md127或者mdamd --stop md127先停止raid設備
    • 由于沒有對應的raid配置,此時不需要刪除了,刪除raid并直接清除磁盤的超級塊
      mdadm --remove md127
      mdamd --zero-superblobk /dev/sdb

最終我們即可清除掉磁盤的device-mapper告警問題,成功部署osd

總結

以上是生活随笔為你收集整理的关于部署osd过程中:Device is in use by a device-mapper mapping问题解决的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。