#!/bin/bash mon_host=mon01.example.com cluster=ceph osd_host=$1 [ -z $osd_host ] && exit 1 ssh_osd() { ssh root@$osd_host "$*" } ssh_mon() { ssh root@$mon_host "$*" } recreate_dev() { id=$1 dev=$2 ssh_osd "systemctl stop ceph-osd@${id}" ssh_mon "ceph osd down ${id}" ssh_mon "ceph osd out ${id}" sleep 1 ssh_mon "ceph osd destroy ${id} --yes-i-really-mean-it" sleep 1 ssh_osd "ceph-volume lvm zap ${dev}" ssh_osd "ceph-volume lvm create --osd-id ${id} --data ${dev}" } get_num_osds() { ssh_osd "mount | grep -v tmpfs | grep 'osd/${cluster}' | awk '{printf \"%s %s\n\",\$1,\$3}' | sed 's_/var/lib/ceph/osd/${cluster}-__g' | wc -l" } get_next_osd() { ssh_osd "mount | grep -v tmpfs | grep 'osd/${cluster}' | awk '{printf \"%s %s\n\",\$1,\$3}' | sed 's_/var/lib/ceph/osd/${cluster}-__g' | sort -u | head -n 1" } for i in $(seq 1 `get_num_osds` ) do osd=$(get_next_osd) dev=$(echo $osd | awk '{print $1}') dev=${dev/[0-9]/} id=$(echo $osd | awk '{print $2}') echo "$i: id{$id} dev{$dev}" recreate_dev $id $dev done