當想將ceph集群中現(xiàn)有osd存量體替換成bcache架構(gòu)時,直接停掉osd然后初始化bcache設(shè)備會報錯:

因為bcache初始化時會刷superblock,而此時superblock被lv設(shè)備占據(jù):

進一步發(fā)現(xiàn)lv的superblock長度為1M而bcache的只有8k,利用這一特點直接刪除lv替換為bcache,同時指定bcache的data-offset為1M就可以保持原有osd上的數(shù)據(jù)不被損壞(特別是開頭的4k數(shù)據(jù)中記錄的osd的label信息影響這osd的啟動),然后將osd掛載目錄中的block替換為新的bcache設(shè)備即可。具體過程:
制作lv 初始化bcache的cache設(shè)備
vgcreate vg-sdc /dev/sdc
lvcreate -L 8G -n lv-sdd vg-sdc
make-bcache -C /dev/vg-sdc/lv-sdd
停掉對應(yīng)osd并刪除原有osd對應(yīng)lvm的dm
systemctl stop ceph-osd@6
dmsetup remove ceph--71e8f6b2--3072--4a58--9d0f--54ae5d87e31b-osd--block--f391145b--a038--47e9--bd62--b5024d6854a0
刷新sata盤的簽名
wipefs -a? /dev/sdd
初始化bcache后端盤(注意數(shù)據(jù)位置的偏移為2048個扇區(qū),這對應(yīng)了lv的data-offset)
make-bcache --data-offset 2048 -B /dev/sdd
連接bcache的cache設(shè)備和后端設(shè)備
bcache-super-show /dev/vg-sdc/lv-sdd| grep cset| awk '{print $2}'
echo 587a1fb9-4d67-405d-a932-9bb315d49797 > /sys/block/bcache0/bcache/attach
刪除/var/lib/ceph/osd/ceph-{num}/目錄下的block軟連接,并新增軟連接:
ln?-s?/dev/bcache0 /var/lib/ceph/osd/ceph-{num}/block
并為之賦權(quán)
chown?-h?ceph:ceph?/var/lib/ceph/osd/ceph-{num}/block
chown?-R?ceph:ceph?/dev/bcache0
啟動osd即可(此時數(shù)據(jù)直接恢復(fù)? 不發(fā)生再平衡的過程,啟動ceph osd deep-scrub osd.{num}未發(fā)現(xiàn)降級對象)
systemctl start ceph-osd@6