关于部署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
解決方法如下:
-
由于device-mapper為系統自己的磁盤映射器,此時檢查系統是否有邏輯卷
pvs
lvs
vgs
如為出現邏輯卷設備,則表明當前磁盤并未創建邏輯卷
此時針對設備上的磁盤做如下操作
sgdisk -z -og /dev/sdb,可以格式化成功,即磁盤內部扇區結構沒有問題
sgdisk -n 1:+2G:+100G /dev/sdb,可以創建gpt分區成功,磁盤支持分區操作
按道理磁盤是可以進行osd部署的,只要能夠正常格式化,保證gpt分區創建成功,ceph-disk部署osd對磁盤也就這么多要求了沒辦法,還得繼續解決啊
-
根據問題查看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設備 -
cd /sys/dev/block并執行ls -l
果然看到了對應的dm設備
../../devices/virtual/block/md127
../../devices/virtual/block/md126此時根據dm設備存儲的文件,打開
cat /proc/mdstat文件,查看果然存在md127和md126設備,查閱發現這兩個設備為raid分區。 -
再次檢查系統是否存在
raid的配置文件
ls /etc/mdadm.conf不存在
綜上,大概可知情況如下:
我們部署osd用到的磁盤之前在某個服務器上被綁定過raid,則拿到當前設備直接使用,系統能夠監測到該磁盤被使用做raid,所以仍然會創建對應的raid分區,但是并未有相關的配置文件生成 -
知道了問題點,即需要進行解決
這里也是借鑒前人經驗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问题解决的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 一袋水泥多少钱啊?
- 下一篇: ceph-objectstore-too