文章

Ceph RBD 数据恢复

前言


操作步骤

当前只是记录一下,使用该脚本恢复了数百台虚拟机,实际使用过,感谢一起连续加班的小伙伴

#!/bin/bash PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin export PATH set -e read -p '虚拟机UUID :' UUID read -p '磁盘大小G :' SIZE mkdir -p data VMUUID=`echo $UUID | tr 'A-Z' 'a-z'` # 获取id rados -p rbd-vms get rbd_id.${VMUUID}_disk rbd_id.txt # 获取元数据 rados -p rbd-vms ls | grep `cat -v rbd_id.txt | awk -F '@' '{print $4}'` >> rbd_data.txt cat rbd_data.txt | awk -F '.' '{print $3}' >> index.txt OLD_HEAD_ID=`cat rbd_data.txt|awk -F '.' '{print $1"."$2}'|head -1` # 创建空白磁盘 NUM=`cat rbd_data.txt|wc -l` #SIZE=`echo "${NUM}*4/1024+5"|bc` #echo $SIZE $NUM rbd create rbd-vms/${VMUUID}_restore_disk -s ${SIZE}G NEW_RBD_ID=`rbd info rbd-vms/${VMUUID}_restore_disk | grep block_name_prefix|awk -F ': ' '{print $2}'` DISK=`rbd info rbd-vms/${VMUUID}_restore_disk` echo "rbd-vms/${VMUUID}_restore_disk \n $DISK" >> disk_new.txt # 调整并发 默认200 thread=500 THRE=`echo "$NUM/$thread"|bc` split -l $THRE index.txt for f in `ls x*` do for i in `cat $f` do #count=`ps -ef |grep rados |grep -v "grep" |wc -l` count=`ps -ef |grep ceph_object_restroe.sh |grep -v "grep" |wc -l` if [ $count -le $thread ];then echo " >>>>>>: $i" >> get.log rados -p rbd-vms get ${OLD_HEAD_ID}.$i data/$i >> get.log 2>&1 if [ -f "data/$i" ];then sleep 2 echo " >>>>>>: $i" >> put.log rados -p rbd-vms put ${NEW_RBD_ID}.$i data/$i >> put.log 2>&1 else echo "$i is not in data" >> error.log 2>&1 fi else sleep 10 echo " >>>>>>: $i" >> get.log rados -p rbd-vms get ${OLD_HEAD_ID}.$i data/$i >> get.log 2>&1 if [ -f "data/$i" ];then sleep 2 echo " >>>>>>: $i" >> put.log rados -p rbd-vms put ${NEW_RBD_ID}.$i data/$i >> put.log 2>&1 else echo "$i is not in data" >> error.log 2>&1 fi fi done & done

参考资料


交个朋友

本文由作者按照 CC BY 4.0 进行授权

热门标签