How to change wal block in bluestore?
Hi, I want to change my wal device to another device. I search much time and write a shell script, but finally, when I start the osd, the process is crashed. I think something is wrong, please help me check the script. Thanks! ceph version: ceph version 14.2.9 (bed944f8c45b9c98485e99b70e11bbcec6f6659a) nautilus (stable). The shell script is below: #! /bin/bash id=$1 # osd id vg=$2 # vg name osdPath="/var/lib/ceph/osd/ceph-$id" osdService="ceph-osd@${id}.service" blockPath=$(ls -lh ${osdPath}/block|awk '{print $11}') if [ -z "$blockPath" ]; then echo "no block path" exit 1; fi walPath=$(ls -lh ${osdPath}/block.wal|awk '{print $11}') if [ -z "$walPath" ]; then echo "no wal path" exit 2; fi walSize=$(blockdev --getsize64 $walPath) if [ -z "$walSize" ]; then echo "no wal size" exit 3; fi walUUID=$(lvdisplay ${walPath}|grep "LV UUID"|awk '{print $3}') if [ -z "$walUUID" ]; then echo "no wal uuid" exit 3; fi newWalLv="journal-osd${id}" newWalPath="/dev/${vg}/${newWalLv}" lvcreate -n "${newWalLv}" -L${walSize}b $vg || exit 4 newWalUUID=$(lvdisplay ${newWalPath}|grep "LV UUID"|awk '{print $3}') if [ -z "$newWalUUID" ]; then echo "no new wal uuid, new wal path:${newWalPath}" exit 3; fi ceph osd set noout || exit 5 systemctl stop ${osdService} || exit 6 ceph-osd -i $id --flush-journal || exit 7 dd if=${walPath} of=${newWalPath} bs=4M || exit 8 chown -h ceph:ceph $(realpath ${newWalPath}) || exit 9 ceph-bluestore-tool bluefs-bdev-migrate --path ${osdPath} --devs-source ${osdPath}/block.wal --dev-target ${newWalPath} chown -h ceph:ceph ${osdPath}/block.wal || exit 11 # device lvchange --deltag "ceph.wal_device=${walPath}" ${blockPath} || exit 12 lvchange --addtag "ceph.wal_device=${newWalPath}" ${blockPath} || exit 13 # for uuid lvchange --deltag "ceph.wal_uuid=${walUUID}" ${blockPath} || exit 12 lvchange --addtag "ceph.wal_uuid=${newWalUUID}" ${blockPath} || exit 13 # for wal lvs for tag in $(lvs -o lv_tags ${blockPath}|grep ceph|sed 's/,/\n/g') do lvchange --addtag "$tag" ${newWalPath} done lvchange --deltag "ceph.type=block" ${newWalPath} lvchange --addtag "ceph.type=wal" ${newWalPath} systemctl start ceph-osd@${id}.service || exit 14 ceph osd unset noout || exit 15
Hi, taking a quick look at the script I noticed that you're trying to dd from old to new device and then additionally run the 'ceph-bluestore-tool bluefs-bdev-migrate' which seems redundant to me, I believe 'ceph-bluestore-tool bluefs-bdev-migrate' is supposed to migrate the data itself. I think you just have to prepare the LV and let ceph do the rest. Regards, Eugen Zitat von xux1217@gmail.com:
Hi,
I want to change my wal device to another device.
I search much time and write a shell script, but finally, when I start the osd, the process is crashed.
I think something is wrong, please help me check the script.
Thanks!
ceph version: ceph version 14.2.9 (bed944f8c45b9c98485e99b70e11bbcec6f6659a) nautilus (stable).
The shell script is below: #! /bin/bash
id=$1 # osd id
vg=$2 # vg name
osdPath="/var/lib/ceph/osd/ceph-$id" osdService="ceph-osd@${id}.service"
blockPath=$(ls -lh ${osdPath}/block|awk '{print $11}') if [ -z "$blockPath" ]; then echo "no block path" exit 1; fi
walPath=$(ls -lh ${osdPath}/block.wal|awk '{print $11}') if [ -z "$walPath" ]; then echo "no wal path" exit 2; fi
walSize=$(blockdev --getsize64 $walPath) if [ -z "$walSize" ]; then echo "no wal size" exit 3; fi
walUUID=$(lvdisplay ${walPath}|grep "LV UUID"|awk '{print $3}') if [ -z "$walUUID" ]; then echo "no wal uuid" exit 3; fi
newWalLv="journal-osd${id}" newWalPath="/dev/${vg}/${newWalLv}"
lvcreate -n "${newWalLv}" -L${walSize}b $vg || exit 4
newWalUUID=$(lvdisplay ${newWalPath}|grep "LV UUID"|awk '{print $3}') if [ -z "$newWalUUID" ]; then echo "no new wal uuid, new wal path:${newWalPath}" exit 3; fi
ceph osd set noout || exit 5
systemctl stop ${osdService} || exit 6
ceph-osd -i $id --flush-journal || exit 7
dd if=${walPath} of=${newWalPath} bs=4M || exit 8
chown -h ceph:ceph $(realpath ${newWalPath}) || exit 9
ceph-bluestore-tool bluefs-bdev-migrate --path ${osdPath} --devs-source ${osdPath}/block.wal --dev-target ${newWalPath}
chown -h ceph:ceph ${osdPath}/block.wal || exit 11
# device lvchange --deltag "ceph.wal_device=${walPath}" ${blockPath} || exit 12 lvchange --addtag "ceph.wal_device=${newWalPath}" ${blockPath} || exit 13 # for uuid lvchange --deltag "ceph.wal_uuid=${walUUID}" ${blockPath} || exit 12 lvchange --addtag "ceph.wal_uuid=${newWalUUID}" ${blockPath} || exit 13
# for wal lvs for tag in $(lvs -o lv_tags ${blockPath}|grep ceph|sed 's/,/\n/g') do lvchange --addtag "$tag" ${newWalPath} done lvchange --deltag "ceph.type=block" ${newWalPath} lvchange --addtag "ceph.type=wal" ${newWalPath}
systemctl start ceph-osd@${id}.service || exit 14
ceph osd unset noout || exit 15 _______________________________________________ ceph-users mailing list -- ceph-users@ceph.io To unsubscribe send an email to ceph-users-leave@ceph.io
participants (2)
-
Eugen Block
-
xux1217@gmail.com