#! /bin/bash
#注:只有硬盘没有做过系统才能这么搞,如果有做过文件系统会直接返回异常信息。
set -x
exec &>> /tmp/mount_disk.log
diskEmpty=""
nameOfLv="lv_data"
nameOfVg="vg_data"
pathOfLog="/tmp/mkfs.log"
pathOfMount="/data"
echo -e "\n\n`date '+%Y-%m-%d %H:%M:%S'` ###" >> $pathOfLog
#验证磁盘是否为空,如果为空则把磁盘名称放入diskEmpty中,空格区分
for i in `lsblk -l | grep disk |awk '{print $1}'`
do
isEmpty=1
for j in `hexdump -n 170000 -C /dev/$i | head -1000 | awk -F'|' '{print $2}' | grep -v '^$' |awk -F'.' '{print NF-1}'`
do
if [ $j -ne 16 ];then
echo "Warnning: disk /dev/$i have data。please check the data of the disk 。" >> $pathOfLog
isEmpty=0
break
fi
done
if [ $isEmpty -eq 1 ];then
diskEmpty="$diskEmpty"" /dev/$i"
fi
done
echo $diskEmpty
#创建逻辑卷和逻辑盘
vgcreate $nameOfVg $diskEmpty &>> $pathOfLog
lvcreate -l 100%FREE -n $nameOfLv $nameOfVg &>> $pathOfLog
#验证是否创建成功,如果失败则退出
lvscan |awk -F"'" '{print $2}' | awk -F '/' '{print $4}' | grep "^$nameOfLv$" &>> $pathOfLog
if [ $? -ne 0 ];then
echo "ERROR: no exists device of $nameOfLv named !" &>> $pathOfLog
exit 1
fi
#获取用于格式化文件系统的真实绝对路径
pathOfDeviceFormkfs=`lvscan |awk -F"'" '{print $2}'|grep "$nameOfLv$"`
echo 'pathOfDeviceFormkfs:' `lvscan |awk -F"'" '{print $2}'|grep "$nameOfLv$"`
#在该逻辑卷上制作文件系统
mkfs.xfs $pathOfDeviceFormkfs &>> $pathOfLog
#获取新创建的逻辑卷的真实绝对路径
pathOfDevice=`blkid |awk -F":" '{print $1}'|grep "$nameOfLv$"`
#检查挂载点是否存在,不存在则创建
[ ! -d $pathOfMount ] && mkdir $pathOfMount &>> $pathOfLog
#获取该逻辑卷的uuid和文件系统类型
infoOfDevice=`blkid |grep "^$pathOfDevice" | awk '{print $2" "$3}' | awk -F'"' '{print $2" "$4}'`
uuid=`echo "$infoOfDevice" | awk '{print $1}'`
typeOfFs=`echo "$infoOfDevice" | awk '{print $2}'`
#保证两个变量值存在,如果不存在就不做任何临时和永久的挂载操作。
[ -z "$uuid" ] && echo "uuid is null!" &>> $pathOfLog && exit
[ -z "$pathOfDevice" ] && echo "pathOfDevice is null!" &>> $pathOfLog && exit
#将挂载信息写入fstab并挂载
for i in `cat -n /etc/fstab | awk '{print $1" "$2}' | grep -E "$uuid|$pathOfDevice" | awk '{print $1}'`
do
sed -n "${i}p" /etc/fstab >> $pathOfLog
echo "warnning: 该数据将删除!"
done
echo "UUID=$uuid $pathOfMount $typeOfFs defaults 0 0" >> /etc/fstab
mount -a &>> $pathOfLog
echo "Info: 文件系统挂载完成" >> $pathOfLog
【shell脚本】新硬盘制作成lv,并挂载使用
于 2022-03-01 17:02:09 首次发布