ungleich-tools/ceph-osd-create-start
Nico Schottelius 59028e1c4e Kick out udevadm to avoid such auto mounts
+ dev_metadata=/dev/disk/by-partuuid/55015fcb-dcae-4ced-86f2-c46a0e22ae17
+ dev_block=/dev/disk/by-partuuid/35964ca6-b825-4cef-a784-cc4531cd73f2
+ /sbin/sgdisk --new=0:0:+100M --change-name=0:ceph data --partition-guid=0:55015fcb-dcae-4ced-86f2-c46a0e22ae17 --typecode=0:4fbd7e29-9d25-41b8-afd0-062c0ceff05d --mbrtogpt -- /dev/sdb
Creating new GPT entries.
Setting name!
partNum is 0
REALLY setting name!
The operation has completed successfully.
+ /sbin/udevadm settle --timeout=600

this triggers a mount!!!

Feb 18 19:48:32 unconfigured-host kernel: [ 1608.438792]  sdb: sdb1
Feb 18 19:48:33 unconfigured-host kernel: [ 1609.490182] XFS (sdb1): Mounting V5 Filesystem
Feb 18 19:48:33 unconfigured-host kernel: [ 1609.500185] XFS (sdb1): Ending clean mount

root@unconfigured-host:~# mount  | grep sdb
/dev/sdb1 on /var/lib/ceph/osd/ceph-0 type xfs (rw,noatime,attr2,inode64,noquota)

That's a previous mount point that did not exist prior to calling udevadm.
2018-02-18 20:48:22 +01:00

98 lines
2.6 KiB
Bash
Executable file

#!/bin/sh
# 17:19, 2018-02-09
# Nico Schottelius
# Based on ceph-disk -v prepare --bluestore /dev/sdc --osd-id ${ID} --osd-uuid $(uuidgen) --crush-device-class "ssd"
# Create:
# - block -> link to partuuid
# - block_uuid -e> uuid if the block
# - ceph_fsid -> get from ceph-conf
# crush_device_class -> ssd, hdd
# fsid -> uuidgen!
# magic -> string "ceph osd volume v026"
# type -> bluestore
fsid=$(ceph-conf --cluster=ceph --name=osd. --lookup fsid)
fs_uuid=$(uuidgen)
magic="ceph osd volume v026"
set -x
set -e
if [ $# -lt 2 ]; then
echo "$0 disk class [osdweight]"
echo "class = hdd or ssd"
exit 1
fi
export DEV=$1;shift
export CLASS=$1; shift
uuid_metadata=$(uuidgen)
uuid_block=$(uuidgen)
osd_id=$(ceph osd create)
dev_metadata="/dev/disk/by-partuuid/$uuid_metadata"
dev_block="/dev/disk/by-partuuid/$uuid_block"
/sbin/sgdisk --new=0:0:+100M --change-name="0:ceph data" \
--partition-guid="0:$uuid_metadata" \
--typecode=0:4fbd7e29-9d25-41b8-afd0-062c0ceff05d \
--mbrtogpt -- $DEV
hdparm -z "$DEV"
# Using gdisk --largest-new does not change the name or set guid;
# So use 2 steps instead
/sbin/sgdisk --largest-new=0 --mbrtogpt -- $DEV
hdparm -z "$DEV"
lastpart=$(gdisk -l $DEV | tail -n1 | awk '{ print $1 }')
/sbin/sgdisk --change-name="${lastpart}:ceph block" \
--partition-guid="${lastpart}:$uuid_block" \
--typecode="${lastpart}:cafecafe-9b03-4f30-b4c6-b4b80ceff106" \
--mbrtogpt -- $DEV
hdparm -z "$DEV"
/sbin/mkfs -t xfs -f -i size=2048 -- "$dev_metadata"
mountpath=/var/lib/ceph/osd/ceph-${osd_id}
mkdir -p "$mountpath"
mount "$dev_metadata" "$mountpath"
ln -s $dev_block "$mountpath/block"
echo "$uuid_block" > "$mountpath/block_uuid"
echo "$fsid" > "$mountpath/ceph_fsid"
echo "$magic" > "$mountpath/magic"
echo "$CLASS" > "$mountpath/crush_device_class"
# Important, otherwise --mkfs later will try to create filestore
echo bluestore > "$mountpath/type"
ceph auth get-or-create "osd.${osd_id}" osd \
'allow *' mon 'allow profile osd' > $mountpath/keyring
echo ${osd_id} > "$mountpath/whoami"
touch "$mountpath/sysvinit"
ceph-osd --cluster ceph -i "${osd_id}" --mkfs
chown -R ceph:ceph "$mountpath"
if [ $# -eq 1 ]; then
WEIGHT=$1; shift
else
nodev=$(echo $dev_block | sed 's,/dev/,,')
WEIGHT=$(lsblk -l -b | awk "/^$nodev/ { print \$4/(1024^4) }")
fi
ceph osd crush add osd.${osd_id} ${WEIGHT} host=$(hostname)
echo "$metadata_dev /var/lib/ceph/osd/ceph-${osd_id} xfs noatime 0 0" >> /etc/fstab
/etc/init.d/ceph start osd.${osd_id}