新加磁盘初始化脚本

跳转:优化(2022-4-14)

vim initDB.sh

#!/bin/bash
# auther by wangxp EXCLUDE_LIST='2,11'
EXCLUDE_DISK=sda
VG_NAME=vg0 function check {
if test ! $? -eq 0
then
echo "Error!"
exit 1
fi
}
lsblk |grep -v sda
#生成磁盘数组1
VDA_NUM=`lsblk -d -e $EXCLUDE_LIST -p|grep -v $EXCLUDE_DISK|grep -v 'NAME'|wc -l`
if test $VDA_NUM -ge 1;then
echo "-------------- New hard disk detected ---------------------"
for(( i=0; i< ${VDA_NUM} ; i++ ))
do
vda_name=`lsblk -d -e $EXCLUDE_LIST -p|grep -v $EXCLUDE_DISK|grep -v 'NAME'|awk "NR==($i+1)"|awk '{print $1}'`
vda_names[$i]=${vda_name}
done
else
exit 1
fi
#设置选择操作磁盘 VDA_NAME 磁盘名
PS3="Select an unmounted hard disk: "
select VDA_NAME in ${vda_names[@]}
do
if test -z $VDA_NAME
then
echo "Input error!"
exit 1
fi
break
done
#设置挂载点数量
read -p "Input the number of mount points: " POINT_NUM
while true;do
if test -z $POINT_NUM
then
echo "ERROR,input is null"
echo -n "Input the number of mount points: "
read POINT_NUM
else
break
fi
done if test $POINT_NUM -ge 1
then
LV_MAX_SIZE=`lsblk -d -e $EXCLUDE_LIST -p| grep $VDA_NAME|awk '{print $4}'`
LV_FREE_SIZE=${LV_MAX_SIZE%G*}
for (( i=0;i<${POINT_NUM};i++ ))
do
j=$[$i+1]
#设置挂载目录名
read -p "[$j].Input name of ${j}th_mount(default u0$j): " MOUNT_NAME
if test -z $MOUNT_NAME;then
MOUNT_NAME="u0$j"
fi
mount_names[$i]=$MOUNT_NAME
#设置最后一个lv剩余空间大小
echo "Set mount point /${mount_names[$i]}"
if test $[$POINT_NUM-$j] -eq 0
then
echo "Set /${mount_names[$i]} all free size is ${LV_FREE_SIZE}G"
LV_SIZE=$LV_FREE_SIZE
else
#规范空间大小
read -p "Input size of ${mount_names[$i]}(free size ${LV_FREE_SIZE}G): " LV_SIZE
while true;do
if test -z $LV_SIZE
then
echo "ERROR,input is null"
echo -n "Input size of ${mount_names[$i]}(free size ${LV_FREE_SIZE}G): "
read LV_SIZE
elif test $LV_SIZE -ge $LV_FREE_SIZE
then
echo "ERROR,input size greater than or equal to ${LV_FREE_SIZE}G"
echo -n "Input size of ${mount_names[$i]}(free size ${LV_FREE_SIZE}G): "
read LV_SIZE
elif test $LV_SIZE -le 0
then
echo "ERROR,input size less than or equal to 0G"
echo -n "Input size of ${mount_names[$i]}(free size ${LV_FREE_SIZE}G): "
read LV_SIZE
else
break
fi
done
LV_FREE_SIZE=$[$LV_FREE_SIZE-$LV_SIZE]
fi
lv_sizes[$i]=$LV_SIZE
lv_names[$i]=lv${j}
done
else
echo "Input illegal"
fi echo '-----------------'
echo VDA_NAME=$VDA_NAME
echo VG_NAME=$VG_NAME
for (( i=0;i<${POINT_NUM};i++ ))
do
echo "mount point=/${mount_names[$i]} size=${lv_sizes[$i]}G"
done
echo '-----------------'
read -p "Confirm configuration(yes/no)?" INPUT
while true;do
case $INPUT in
y|yes)
#创建物理卷
pvcreate $VDA_NAME
check
#创建逻辑卷组
vgcreate $VG_NAME $VDA_NAME
check
#创建逻辑卷
for (( i=0;i<${POINT_NUM};i++ ))
do
j=$[$i+1]
if test $[$POINT_NUM-$j] -eq 0
then
lvcreate -l +100%free -n "lv${lv_names[$i]}" $VG_NAME
check
else
lvcreate -L ${lv_sizes[$i]}G -n "lv${lv_names[$i]}" $VG_NAME
check
fi
#创建挂载点
mkdir "/${mount_names[$i]}"
check
#格式化逻辑卷
mkfs -t xfs "/dev/$VG_NAME/lv${lv_names[$i]}"
check
#添加fstab开机启动
fstab_lv=`cat /etc/fstab|grep "/dev/mapper/$VG_NAME-lv${lv_names[$i]}"`
if test -z $fstab_lv
then
echo "/dev/mapper/$VG_NAME-lv${lv_names[$i]} /${mount_names[$i]} xfs defaults 0 0" >> /etc/fstab
check
fi
done
#重新加载fstab文件中的内容
echo "mount all point......"
mount -a
lsblk
break
;;
n|no)
break
;;
*)
echo "Input ERROR"
echo -n "Confirm configuration(yes/no)?"
read INPUT
;;
esac
done

优化

  • 识别T级别以上磁盘
  • 排除已经使用的pv
  • 判断是否存在目录

vim initDB.sh

#!/bin/bash
# auther by wangxp function check {
if test ! $? -eq 0
then
echo "Error!"
exit 1
fi
}
#lsblk |grep -v sda
#生成磁盘数组
pv_used_num=`pvs|grep -v PV|wc -l`
for (( i=0; i<$pv_used_num; i++))
do
pv_used_name=`pvs|egrep -o /dev/[[:alpha:]]{3}|awk "NR==($i+1)"`
pv_useds_names[i]=$pv_used_name
done
pv_num=`lsblk -ldp|grep -v sr|grep -v fd|grep -v 'NAME'|wc -l`
for(( i=0; i< ${pv_num} ; i++ ))
do
pv_name=`lsblk -ldp|grep -v sr|grep -v fd|grep -v 'NAME'|awk "NR==($i+1)"|awk '{print $1}'`
pv_names[$i]=${pv_name}
done
#去除已经存在的pv
for (( i=0; i<${pv_num}; i++ ))
do
for (( j=0; j<${pv_used_num}; j++ ))
do
if test "${pv_names[$i]}" == "${pv_useds_names[$j]}";then
unset pv_names[$i]
break
fi
done
done #设置选择操作磁盘 pv_name 磁盘名
PS3="Select an unmounted hard disk: "
select pv_name in ${pv_names[@]}
do
if test -z $pv_name
then
echo "Input error!"
exit 1
fi
break
done #生成了逻辑卷组数组
vg_num=`vgs|grep -v 'VG'|awk '{print $1}'|wc -l`
for(( i=0; i<$vg_num; i++))
do
vg_names[$i]=`vgs|grep -v 'VG'|awk '{print $1}'|awk "NR==$i+1"`
done
#设置vg_name卷组名
for (( j=0; j<$vg_num; j++))
do
VG_NAME="vg$j"
for (( i=0; i<$vg_num; i++))
do
if test "$vg_name" == "${vg_names[$i]}";then
j=$[$j+1]
break
fi
done
done #设置挂载点数量
read -p "Input the number of mount points: " POINT_NUM
while true;do
if test -z $POINT_NUM
then
echo "ERROR,input is null"
echo -n "Input the number of mount points: "
read POINT_NUM
else
break
fi
done if test $POINT_NUM -ge 1
then
LV_MAX_SIZE_BYTE=`lsblk -bdp| grep $pv_name|awk '{print $4}'`
LV_MAX_SIZE=$[${LV_MAX_SIZE_BYTE}/1024/1024/1024]
LV_FREE_SIZE=$LV_MAX_SIZE
for (( i=0;i<${POINT_NUM};i++ ))
do
j=$[$i+1]
#设置挂载目录名
read -p "[$j].Input name of ${j}th_mount(default u0$j): " MOUNT_NAME
if test -z $MOUNT_NAME;then
MOUNT_NAME="u0$j"
fi
if test -d "/${MOUNT_NAME}";then
echo "$MOUNT_NAME is exist!"
exit 1
fi
mount_names[$i]=$MOUNT_NAME
#设置最后一个lv剩余空间大小
echo "Set mount point /${mount_names[$i]}"
if test $[$POINT_NUM-$j] -eq 0
then
echo "Set /${mount_names[$i]} all free size is ${LV_FREE_SIZE}G"
LV_SIZE=$LV_FREE_SIZE
else
#规范空间大小
read -p "Input size of ${mount_names[$i]}(free size ${LV_FREE_SIZE}G): " LV_SIZE
while true;do
if test -z $LV_SIZE
then
echo "ERROR,input is null"
echo -n "Input size of ${mount_names[$i]}(free size ${LV_FREE_SIZE}G): "
read LV_SIZE
elif test $LV_SIZE -ge $LV_FREE_SIZE
then
echo "ERROR,input size greater than or equal to ${LV_FREE_SIZE}G"
echo -n "Input size of ${mount_names[$i]}(free size ${LV_FREE_SIZE}G): "
read LV_SIZE
elif test $LV_SIZE -le 0
then
echo "ERROR,input size less than or equal to 0G"
echo -n "Input size of ${mount_names[$i]}(free size ${LV_FREE_SIZE}G): "
read LV_SIZE
else
break
fi
done
LV_FREE_SIZE=$[$LV_FREE_SIZE-$LV_SIZE]
fi
lv_sizes[$i]=$LV_SIZE
lv_names[$i]=lv${j}
done
else
echo "Input illegal"
fi
echo '-----------------'
echo pv_name=$pv_name
echo VG_NAME=$VG_NAME
for (( i=0;i<${POINT_NUM};i++ ))
do
echo "mount point=/${mount_names[$i]} size=${lv_sizes[$i]}G"
done
echo '-----------------'
read -p "Confirm configuration(yes/no)?" INPUT
while true;do
case $INPUT in
y|yes)
#创建物理卷
pvcreate $pv_name
check
#创建逻辑卷组
vgcreate $VG_NAME $pv_name
check
#创建逻辑卷
for (( i=0;i<${POINT_NUM};i++ ))
do
j=$[$i+1]
if test $[$POINT_NUM-$j] -eq 0
then
lvcreate -l +100%free -n "${lv_names[$i]}" $VG_NAME
check
else
lvcreate -L ${lv_sizes[$i]}G -n "${lv_names[$i]}" $VG_NAME
check
fi
#创建挂载点
mkdir "/${mount_names[$i]}"
check
#格式化逻辑卷
mkfs -t xfs "/dev/$VG_NAME/${lv_names[$i]}"
check
#添加fstab开机启动
fstab_lv=`cat /etc/fstab|grep "/dev/mapper/$VG_NAME-${lv_names[$i]}"`
if test -z $fstab_lv
then
echo "/dev/mapper/$VG_NAME-${lv_names[$i]} /${mount_names[$i]} xfs defaults 0 0" >> /etc/fstab
check
fi
done
#重新加载fstab文件中的内容
echo "mount all point......"
mount -a
lsblk
break
;;
n|no)
break
;;
*)
echo "Input ERROR"
echo -n "Confirm configuration(yes/no)?"
read INPUT
;;
esac
done

initDB.sh初始化磁盘脚本centos7的更多相关文章

  1. centos7初始化bashshell脚本

    centos7初始化bashshell脚本 #!/bin/bash if [[ "$(whoami)" != "root" ]]; then echo &quo ...

  2. ActiveX控件的安全初始化和脚本操作 和 数字签名SIGN

    摘要:数字签名SIGN保证控件在下载时候的安全性.如果你的代码已经经过数字签名,即使用户IE的安全设置很高也能下载,安装并登记.但是在页面上初始化,或者用脚本运行这个控件,为了保证安全性,还需要进行M ...

  3. 阿里云ecs初始化磁盘后远程连接不到服务器

    阿里云初始化磁盘后远程连接不到服务器 报错: WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! ... 原因:阿里云ecs第一次链接服务器之后会在本地电 ...

  4. JLink V8初始化exynos4412脚本

    /** ****************************************************************************** * @author    Maox ...

  5. SQL Server 数据库初始化准备脚本

    通常我们在项目部署前都会写一份数据库初始化脚本.由于数据库外键的限制,我们需要按照数据引用顺序添加初始记录,这个整理过程相当麻烦. 因此写了以下脚本,原理是先去掉所有外键,然后执行一次清空,然后添加数 ...

  6. VS C++工程类成员初始化检测脚本

    最近项目中出现由类成员未初始化而进行读写而造成的问题,于是想将项目中所有的为初始化的地方找出来,优化一下代码,维护了这么多年的程序已有百万余行且VS2015还尚未支持检查类成员初始化的方法.,于是想写 ...

  7. CENTOS 6.6初始化SHELL脚本

    时间:2016-02-24 00:30来源:blog.51cto.com 作者:“xxlixin” 博客 举报 点击:1717次 这个脚本是在刚安装完CENTOS6.6后可能需要进行的操作.在学习CE ...

  8. 使用sh运行bash脚本的奇怪问题

    在同一个文件夹下有两个脚本.a.sh和b.sh,脚本内容例如以下: a.sh: echo "test for a" source b.sh b.sh: echo "tes ...

  9. Shell之监控cpu、内存、磁盘脚本

    #!/bin/bash #获取内存情况 mem_total=`free | awk 'NR==2{print $2}'` #获取内存总大小 mem_use=`free | awk 'NR==2{pri ...

  10. source、sh、./执行脚本对变量的影响

    shell脚本中的变量: local一般用于局部变量声明,多在在函数内部使用. shell脚本中定义的变量是global的,其作用域从被定义的地方开始,到shell结束或被显示删除的地方为止. she ...

随机推荐

  1. 关于《完全手册Excel VBA典型实例大全——通过368个例子掌握》随书样例的下载

    按照早先下载的电子教程查看和编写vba,有些例子使用运行错误,想着看看原始文件.容易看到,网上有提供的doc或者pdf文档,都不完整,可能是{完全手册Excel_VBA典型实例大全:通过368个例子掌 ...

  2. 13TB的StarRocks大数据库迁移过程

    公司有一套StarRocks的大数据库在大股东的腾讯云环境中,通过腾讯云的对等连接打通,通过dolphinscheduler调度datax离线抽取数据和SQL计算汇总,还有在大股东的特有的Flink集 ...

  3. ZCMU-1051

    比较来说不太难其实,当然找到一定的公式这与前面的1033相识,都会用到f(i,j)=f(i-1,j)+f(i-1,j-1) 我们可以先从小部分看出来,一层可以整体或者两部分,在面对第i层看前面i-1层 ...

  4. R数据分析:国产新冠口服药比辉瑞好的文章的统计做法分享

    元旦前在人民日报中央厨房上看到一篇文章,叫做"比肩辉瑞的国产新冠药物VV116,是这样研制和临床试验的",想来就把文献原文找来读了读,写下本文分享给大家,本文主要关注文章的正文中主 ...

  5. Flutter问题 Flutter MissingPluginException(No implementation found for method xxx on channel xxx)

    问题如题 有时候项目跑着跑着突然控制台就报了这个错,用hot restart也没有用,问题的本质是plugin没有找到,这时候有两种方法 flutter clean,会将依赖清除,这时候再重新pub ...

  6. Nuget Reference 丢失问题

    现象 在 Visual Studio 2017 中创建一个控制台项目.创建出来的项目如下所示. 通过 NuGet 管理器,添加 Newtonsoft.Json 的 NuGet 包,安装之后,项目中添加 ...

  7. 搞懂现代Web端即时通讯技术一文就够:WebSocket、socket.io、SSE

    本文引用自" 豆米博客"的<JS实时通信三把斧>系列文章,有优化和改动. 1.引言 有关Web端即时通讯技术的文章我已整理过很多篇,阅读过的读者可能都很熟悉,早期的We ...

  8. Apgar score

    Apgar score Apgar is a quick test performed on a baby at 1 and 5 minutes after birth. The 1-minute s ...

  9. 【译】GitHub Copilot Free 在 Visual Studio 中

    可能您还没有听说过,GitHub 刚刚宣布了 Copilot Free(免费版)!好消息是:您现在已经可以在 Visual Studio 中开始使用 Copilot Free 了.它现在已经可用了,我 ...

  10. Solution Set -「AGC 013~015」C~F

    目录 「AGC 013C」Ants on a Circle 「AGC 013D」Piling Up ^ 「AGC 013E」Placing Squares ^ 「AGC 013F」Two Faced ...