直接上干貨:
ceph自動掛載原理
系統啟動后,ceph 通過掃描所有磁盤及分區的 ID_PART_ENTRY_TYPE 與自己main.py中寫死的osd ready 標識符來判斷磁盤(及其分區)是否准備好自動掛載(journal ,block, osd 同是一個道理)
main.py中記載的狀態標志
/usr/lib/python2.7/site-packages/ceph_disk/main.py 'osd': { 'ready': '4fbd7e29-9d25-41b8-afd0-062c0ceff05d', 'tobe': '89c57f98-2fe5-4dc0-89c1-f3ad0ceff2be', },
而我們磁盤分區的信息如
#blkid -o udev -p /dev/sdb2 ID_FS_UUID=f00b001c-9122-4b4a-b0da-fce7736e1bd1 ID_FS_UUID_ENC=f00b001c-9122-4b4a-b0da-fce7736e1bd1 ID_FS_TYPE=xfs ID_FS_USAGE=filesystem ID_PART_ENTRY_SCHEME=gpt ID_PART_ENTRY_UUID=b5d5060f-4383-430c-8913-5ea9bee11127 ID_PART_ENTRY_TYPE=4fbd7e29-9d25-41b8-afd0-062c0ceff05d ID_PART_ENTRY_NUMBER=2 ID_PART_ENTRY_OFFSET=62916608 ID_PART_ENTRY_SIZE=62914560 ID_PART_ENTRY_DISK=8:16
當ceph判斷分區的ID_PART_ENTRY_TYPE與寫死再main.py中的read標識符相等,則采用ceph-disk啟動自動掛過程,自動掛載與osd activate的過程基本一致
a. 調用sgdisk 使用—largest-new來使用磁盤最大可能空間。所以/dev/sdg會有一個分區sdg1,它使用所有的空間。
b. 格式化/dev/sdg1。這里對ceph-disk做了小的定制,默認使用了ext4分區格式,若磁盤已經做過分區及格式化則采用格式化的分區格式XFS
c. 將此分區mount到目錄/var/lib/ceph/osd-n,然后再其中創建一個名為journal的link,指向/dev/disk/by-partuuid/c6422c03-d320-4633-b35d-4f43c6cdd9fa。至此,OSD的journal分區映射完成。最后umount。
d. 再次調用sgdisk,寫入一個重要的參數,--typecode. Ceph-disk 使用一個特殊的UUID 作為創建OSD的typecode:
ID_PART_ENTRY_TYPE=4fbd7e29-9d25-41b8-afd0-062c0ceff05d;
新的OSD 數據分區的生成,觸發udev event, 通過ceph udev rule,最終調用ceph-disk-udev,分析該分區的typecode,發現是OSD_UUID,即表明是ceph OSD的數據分區,於是觸發ceph-disk activate /dev/sdb2
修改typecode
如果分區的typecode不是ready標識符的字符,則開機不會自己自動掛載,如果我們想自動掛載,則需要修改typecode (想取消自動掛載可以修改typecode 為其他值)
此處我們使用到的是sgdisk ,具體及其他用法可以查看sgdisk --help
修改typecode
sgdisk --help | grep typecode
-t, --typecode=partnum:{hexcode|GUID} change partition type code
具體操作為
#sgdisk -t 2:4fbd7e29-9d25-41b8-afd0-062c0ceff05d /dev/sdb /////其中想改第N分區-t后邊就是 N Warning: The kernel is still using the old partition table. The new table will be used at the next reboot. The operation has completed successfully
可以將所有磁盤分區的osd 均改了
/usr/sbin/sgdisk --typecode=1:4fbd7e29-9d25-41b8-afd0-062c0ceff05d -- /dev/sdb //////磁盤分區序號(1,2,3)根據自己想改的自己定
至此,修改typecode 后可以自動掛載
另外:
sgdisk 常用命令
查看磁盤分區 sgdisk -i 1 /dev/sdb /////123同樣是自己定的
查看整個磁盤 sgdisk -p /dev/sdc
修改分區名 sgdisk -c 1:"ceph data" /dev/sdb
清除數據
刪除分區 sgdisk -d 1 /dev/sdb
reference :
https://www.cnblogs.com/gzxbkk/p/7727424.html
https://www.cnblogs.com/gzxbkk/p/7737421.html