![wangwei](/assets/img/avatar_default.png)
The current bluestore disk label naming is inconsistent with the filestore. The filestore naming format is that the disk prefixes belonging to the same osd are the same and the suffixes are different. This patch keeps the bluestore's disk naming as well. Change-Id: I090cf055ebedc555b5ada35e140b7a7bb2a4cf8f
175 lines
7.9 KiB
Bash
175 lines
7.9 KiB
Bash
#!/bin/bash
|
|
|
|
if [[ ! -d "/var/log/kolla/ceph" ]]; then
|
|
mkdir -p /var/log/kolla/ceph
|
|
fi
|
|
if [[ $(stat -c %a /var/log/kolla/ceph) != "755" ]]; then
|
|
chmod 755 /var/log/kolla/ceph
|
|
fi
|
|
|
|
# Bootstrap and exit if KOLLA_BOOTSTRAP variable is set. This catches all cases
|
|
# of the KOLLA_BOOTSTRAP variable being set, including empty.
|
|
if [[ "${!KOLLA_BOOTSTRAP[@]}" ]]; then
|
|
# NOTE(SamYaple): Static gpt partcodes
|
|
CEPH_JOURNAL_TYPE_CODE="45B0969E-9B03-4F30-B4C6-B4B80CEFF106"
|
|
CEPH_OSD_TYPE_CODE="4FBD7E29-9D25-41B8-AFD0-062C0CEFF05D"
|
|
CEPH_OSD_BS_WAL_TYPE_CODE="0FC63DAF-8483-4772-8E79-3D69D8477DE4"
|
|
CEPH_OSD_BS_DB_TYPE_CODE="CE8DF73C-B89D-45B0-AD98-D45332906d90"
|
|
|
|
# Wait for ceph quorum before proceeding
|
|
ceph quorum_status
|
|
|
|
if [[ "${USE_EXTERNAL_JOURNAL}" == "False" ]]; then
|
|
# Formatting disk for ceph
|
|
if [[ "${OSD_STORETYPE}" == "bluestore" ]]; then
|
|
if [[ "${OSD_BS_DEV}" =~ "/dev/loop" ]]; then
|
|
sgdisk --zap-all -- "${OSD_BS_DEV}""p${OSD_BS_PARTNUM}"
|
|
else
|
|
sgdisk --zap-all -- "${OSD_BS_DEV}""${OSD_BS_PARTNUM}"
|
|
fi
|
|
|
|
if [ -n "${OSD_BS_BLK_DEV}" ] && [ "${OSD_BS_DEV}" != "${OSD_BS_BLK_DEV}" ] && [ -n "${OSD_BS_BLK_PARTNUM}" ]; then
|
|
if [[ "${OSD_BS_BLK_DEV}" =~ "/dev/loop" ]]; then
|
|
sgdisk --zap-all -- "${OSD_BS_BLK_DEV}""p${OSD_BS_BLK_PARTNUM}"
|
|
else
|
|
sgdisk --zap-all -- "${OSD_BS_BLK_DEV}""${OSD_BS_BLK_PARTNUM}"
|
|
fi
|
|
else
|
|
sgdisk --zap-all -- "${OSD_BS_DEV}"
|
|
sgdisk --new=1:0:+100M --mbrtogpt -- "${OSD_BS_DEV}"
|
|
sgdisk --largest-new=2 --mbrtogpt -- "${OSD_BS_DEV}"
|
|
sgdisk --zap-all -- "${OSD_BS_DEV}"2
|
|
fi
|
|
|
|
if [ -n "${OSD_BS_WAL_DEV}" ] && [ "${OSD_BS_BLK_DEV}" != "${OSD_BS_WAL_DEV}" ] && [ -n "${OSD_BS_WAL_PARTNUM}" ]; then
|
|
if [[ "${OSD_BS_WAL_DEV}" =~ "/dev/loop" ]]; then
|
|
sgdisk --zap-all -- "${OSD_BS_WAL_DEV}""p${OSD_BS_WAL_PARTNUM}"
|
|
else
|
|
sgdisk --zap-all -- "${OSD_BS_WAL_DEV}""${OSD_BS_WAL_PARTNUM}"
|
|
fi
|
|
fi
|
|
|
|
if [ -n "${OSD_BS_DB_DEV}" ] && [ "${OSD_BS_BLK_DEV}" != "${OSD_BS_DB_DEV}" ] && [ -n "${OSD_BS_DB_PARTNUM}" ]; then
|
|
if [[ "${OSD_BS_DB_DEV}" =~ "/dev/loop" ]]; then
|
|
sgdisk --zap-all -- "${OSD_BS_DB_DEV}""p${OSD_BS_DB_PARTNUM}"
|
|
else
|
|
sgdisk --zap-all -- "${OSD_BS_DB_DEV}""${OSD_BS_DB_PARTNUM}"
|
|
fi
|
|
fi
|
|
else
|
|
sgdisk --zap-all -- "${OSD_DEV}"
|
|
sgdisk --new=2:1M:5G -- "${JOURNAL_DEV}"
|
|
sgdisk --largest-new=1 -- "${OSD_DEV}"
|
|
fi
|
|
# NOTE(SamYaple): This command may throw errors that we can safely ignore
|
|
partprobe || true
|
|
|
|
fi
|
|
|
|
if [[ "${OSD_STORETYPE}" == "bluestore" ]]; then
|
|
OSD_UUID=$(uuidgen)
|
|
OSD_ID=$(ceph osd new "${OSD_UUID}")
|
|
OSD_DIR="/var/lib/ceph/osd/ceph-${OSD_ID}"
|
|
mkdir -p "${OSD_DIR}"
|
|
|
|
if [[ "${OSD_BS_DEV}" =~ "/dev/loop" ]]; then
|
|
mkfs.xfs -f "${OSD_BS_DEV}""p${OSD_BS_PARTNUM}"
|
|
mount "${OSD_BS_DEV}""p${OSD_BS_PARTNUM}" "${OSD_DIR}"
|
|
else
|
|
mkfs.xfs -f "${OSD_BS_DEV}""${OSD_BS_PARTNUM}"
|
|
mount "${OSD_BS_DEV}""${OSD_BS_PARTNUM}" "${OSD_DIR}"
|
|
fi
|
|
|
|
# This will through an error about no key existing. That is normal. It then
|
|
# creates the key in the next step.
|
|
ceph-osd -i "${OSD_ID}" --mkkey
|
|
echo "bluestore" > "${OSD_DIR}"/type
|
|
if [ -n "${OSD_BS_BLK_DEV}" ] && [ "${OSD_BS_BLK_DEV}" != "${OSD_BS_DEV}" ] && [ -n "${OSD_BS_BLK_PARTNUM}" ]; then
|
|
sgdisk "--change-name="${OSD_BS_BLK_PARTNUM}":KOLLA_CEPH_DATA_BS_${OSD_ID}_B" "--typecode="${OSD_BS_BLK_PARTNUM}":${CEPH_OSD_TYPE_CODE}" -- "${OSD_BS_BLK_DEV}"
|
|
else
|
|
sgdisk "--change-name=2:KOLLA_CEPH_DATA_BS_${OSD_ID}_B" "--typecode=2:${CEPH_OSD_TYPE_CODE}" -- "${OSD_BS_DEV}"
|
|
fi
|
|
|
|
if [ -n "${OSD_BS_WAL_DEV}" ] && [ "${OSD_BS_BLK_DEV}" != "${OSD_BS_WAL_DEV}" ] && [ -n "${OSD_BS_WAL_PARTNUM}" ]; then
|
|
sgdisk "--change-name="${OSD_BS_WAL_PARTNUM}":KOLLA_CEPH_DATA_BS_${OSD_ID}_W" "--typecode="${OSD_BS_WAL_PARTNUM}":${CEPH_OSD_BS_WAL_TYPE_CODE}" -- "${OSD_BS_WAL_DEV}"
|
|
fi
|
|
|
|
if [ -n "${OSD_BS_DB_DEV}" ] && [ "${OSD_BS_BLK_DEV}" != "${OSD_BS_DB_DEV}" ] && [ -n "${OSD_BS_DB_PARTNUM}" ]; then
|
|
sgdisk "--change-name="${OSD_BS_DB_PARTNUM}":KOLLA_CEPH_DATA_BS_${OSD_ID}_D" "--typecode="${OSD_BS_DB_PARTNUM}":${CEPH_OSD_BS_DB_TYPE_CODE}" -- "${OSD_BS_DB_DEV}"
|
|
fi
|
|
|
|
partprobe || true
|
|
|
|
ln -sf /dev/disk/by-partlabel/KOLLA_CEPH_DATA_BS_"${OSD_ID}"_B "${OSD_DIR}"/block
|
|
|
|
if [ -n "${OSD_BS_WAL_DEV}" ] && [ "${OSD_BS_BLK_DEV}" != "${OSD_BS_WAL_DEV}" ] && [ -n "${OSD_BS_WAL_PARTNUM}" ]; then
|
|
ln -sf /dev/disk/by-partlabel/KOLLA_CEPH_DATA_BS_"${OSD_ID}"_W "${OSD_DIR}"/block.wal
|
|
fi
|
|
|
|
if [ -n "${OSD_BS_DB_DEV}" ] && [ "${OSD_BS_BLK_DEV}" != "${OSD_BS_DB_DEV}" ] && [ -n "${OSD_BS_DB_PARTNUM}" ]; then
|
|
ln -sf /dev/disk/by-partlabel/KOLLA_CEPH_DATA_BS_"${OSD_ID}"_D "${OSD_DIR}"/block.db
|
|
fi
|
|
|
|
ceph-osd -i "${OSD_ID}" --mkfs -k "${OSD_DIR}"/keyring --osd-uuid "${OSD_UUID}"
|
|
ceph auth add "osd.${OSD_ID}" osd 'allow *' mon 'allow profile osd' -i "${OSD_DIR}/keyring"
|
|
if [[ "${OSD_BS_DEV}" =~ "/dev/loop" ]]; then
|
|
umount "${OSD_BS_DEV}""p${OSD_BS_PARTNUM}"
|
|
else
|
|
umount "${OSD_BS_DEV}""${OSD_BS_PARTNUM}"
|
|
fi
|
|
else
|
|
OSD_ID=$(ceph osd create)
|
|
OSD_DIR="/var/lib/ceph/osd/ceph-${OSD_ID}"
|
|
mkdir -p "${OSD_DIR}"
|
|
|
|
if [[ "${OSD_FILESYSTEM}" == "btrfs" ]]; then
|
|
mkfs.btrfs -f "${OSD_PARTITION}"
|
|
elif [[ "${OSD_FILESYSTEM}" == "ext4" ]]; then
|
|
mkfs.ext4 "${OSD_PARTITION}"
|
|
else
|
|
mkfs.xfs -f "${OSD_PARTITION}"
|
|
fi
|
|
mount "${OSD_PARTITION}" "${OSD_DIR}"
|
|
|
|
# This will through an error about no key existing. That is normal. It then
|
|
# creates the key in the next step.
|
|
ceph-osd -i "${OSD_ID}" --mkfs --osd-journal="${JOURNAL_PARTITION}" --mkkey
|
|
ceph auth add "osd.${OSD_ID}" osd 'allow *' mon 'allow profile osd' -i "${OSD_DIR}/keyring"
|
|
umount "${OSD_PARTITION}"
|
|
fi
|
|
|
|
if [[ "${!CEPH_CACHE[@]}" ]]; then
|
|
CEPH_ROOT_NAME=cache
|
|
fi
|
|
|
|
if [[ "${OSD_INITIAL_WEIGHT}" == "auto" ]]; then
|
|
OSD_INITIAL_WEIGHT=$(parted --script ${OSD_PARTITION} unit TB print | awk 'match($0, /^Disk.* (.*)TB/, a){printf("%.2f", a[1])}')
|
|
fi
|
|
|
|
# These commands only need to be run once per host but are safe to run
|
|
# repeatedly. This can be improved later or if any problems arise.
|
|
ceph osd crush add-bucket "${HOSTNAME}${CEPH_ROOT_NAME:+-${CEPH_ROOT_NAME}}" host
|
|
ceph osd crush move "${HOSTNAME}${CEPH_ROOT_NAME:+-${CEPH_ROOT_NAME}}" root=${CEPH_ROOT_NAME:-default}
|
|
|
|
# Adding osd to crush map
|
|
ceph osd crush add "${OSD_ID}" "${OSD_INITIAL_WEIGHT}" host="${HOSTNAME}${CEPH_ROOT_NAME:+-${CEPH_ROOT_NAME}}"
|
|
|
|
# Setting partition name based on ${OSD_ID}
|
|
if [[ "${OSD_STORETYPE}" == "bluestore" ]]; then
|
|
sgdisk "--change-name=${OSD_PARTITION_NUM}:KOLLA_CEPH_DATA_BS_${OSD_ID}" "--typecode=${OSD_PARTITION_NUM}:${CEPH_OSD_TYPE_CODE}" -- "${OSD_BS_DEV}"
|
|
else
|
|
sgdisk "--change-name=${OSD_PARTITION_NUM}:KOLLA_CEPH_DATA_${OSD_ID}" "--typecode=${OSD_PARTITION_NUM}:${CEPH_OSD_TYPE_CODE}" -- "${OSD_DEV}"
|
|
sgdisk "--change-name=${JOURNAL_PARTITION_NUM}:KOLLA_CEPH_DATA_${OSD_ID}_J" "--typecode=${JOURNAL_PARTITION_NUM}:${CEPH_JOURNAL_TYPE_CODE}" -- "${JOURNAL_DEV}"
|
|
fi
|
|
partprobe || true
|
|
|
|
exit 0
|
|
fi
|
|
|
|
OSD_DIR="/var/lib/ceph/osd/ceph-${OSD_ID}"
|
|
if [[ "${OSD_STORETYPE}" == "bluestore" ]]; then
|
|
ARGS="-i ${OSD_ID}"
|
|
else
|
|
ARGS="-i ${OSD_ID} --osd-journal ${JOURNAL_PARTITION} -k ${OSD_DIR}/keyring"
|
|
fi
|