脚本说明:
本脚适用于/dev/sda 系统盘之外的 所有盘全部整合成lvm,只有一个vg卷组,只有一个lv逻辑卷。
提供制作与删除两个模式,任选其一。
#!/bin/bash
#用法:除却系统盘之外的所有盘,若不想此盘作为lvm,可以加入“ grep -v ” ,本文需要修改2处,第一是制作lvm盘,第二十删除lvm格式两处
#注意:制作pv物理卷时,使用的是所有的sda1 、sdb1 ……带1的lvm的盘
#创建VG卷组的名称
vg_name=vg1
#创建LV逻辑卷的名称
lv_name=lv1
#将lv逻辑卷挂载在主机上的目录名
mount_name=/app1
case $1 in
install)
#---------------------------------------------1.制作lvm盘、重读分区表、制作PV盘-----------------------------------------------------------
#除却系统盘之外的所有盘,如果想排除盘,这里可以加入grep -v ……
for i in `fdisk -l|grep -v "/dev/sda"|grep "磁盘 /dev/sd"|awk '{print $2}'|awk -F ':' '{print $1}'`
do
#硬盘名称
Disk=$i
#硬盘分区时的第一个主分区,该主分区占据全部硬盘容量
Disk1=$i\1
#判断上条命令执行成功与否的函数
panduan(){
if [ `echo $?` -eq 0 ];then
echo "$1 已完成"
else
echo "$1 未完成"
fi
}
#制作成lvm盘
echo "$Disk 制作lvm盘中…………";sleep 1
echo -e "n\np\n1\n\n\nt\n8e\nw" |fdisk $Disk >/dev/null
#检查是否是lvm盘,lvm编码 = 8e
if [ "`fdisk -l $Disk|grep 8e|awk '{print $5}'`" == "8e" ];then
echo -e "lvm盘制作完成,$Disk 编号8e";sleep 1
#重读分区表
partprobe $Disk
panduan "$Disk 重读分区表"
#创建PV物理卷
pvcreate $Disk1 >/dev/null
panduan "$Disk1 物理卷"
echo "------------------------------------------"
else
echo "$Disk 编号不是8e 不是lvm盘,请检查磁盘!"
fi
done
#---------------------------------------------2.制作VG、LV盘以及LV盘格式化-----------------------------------------------------------
#获取已制作的物理卷
PV_set_of=`fdisk -l|grep -v "/dev/sda"|grep LVM|grep 8e|awk '{print $1}'|xargs echo`
#创建VG卷组
echo "正在制作VG卷组……"
sleep 1
vgcreate $vg_name $PV_set_of >/dev/null
panduan "/dev/$vg_name 卷组-------------------"
echo
#创建LV逻辑卷,100%使用VG卷组内的容量
lvcreate -l 100%VG -n $lv_name $vg_name >/dev/null
if [ `lvs |grep $lv_name|wc -l` -eq 1 ];then
echo "/dev/$vg_name/$lv_name 逻辑卷创建完毕"
sleep 1
#对lv逻辑卷进行ext4格式化
mkfs.ext4 /dev/$vg_name/$lv_name>/dev/null
panduan "/dev/$vg_name/$lv_name 格式化-------------------"
else
echo "lv逻辑卷创建失败,请使用lvs查看"
fi
#---------------------------------------------3.挂载目录-----------------------------------------------------------
#创建挂载目录,将lv逻辑卷挂载这个目录上
mkdir $mount_name
panduan "$mount_name 目录创建-------------------"
#永久挂载,导入配置文件中,目前需要检查是否存在配置文件中,不然会一直导入
if [ `grep "/dev/$vg_name/$lv_name" /etc/fstab |wc -l` -eq 1 ];then
echo "/etc/fstab中已存在,无需重复写入。"
else
echo "/dev/$vg_name/$lv_name $mount_name ext4 defaults 0 0" >>/etc/fstab
if [ `grep "/dev/$vg_name/$lv_name" /etc/fstab |wc -l` -eq 1 ];then
echo "/dev/$vg_name/$lv_name $mount_name ext4 defaults 0 0 写入/etc/fstab文件成功"
else
echo "/dev/$vg_name/$lv_name $mount_name ext4 defaults 0 0 写入文件失败,请检查/etc/fstab"
fi
fi
#挂载配置文件立即生效
mount -a
sleep 2
#检查是否挂载成功
if [ "`mount |grep $vg_name-$lv_name|awk -F '/' '{print $4}'|awk '{print $1}'`" == "$vg_name-$lv_name" ];then
echo -e "$mount_name 已挂载\n----------------------------------------------------------------------"
else
echo "$mount_name 挂载失败"
fi
;;
remove)
#判断上条命令执行成功与否的函数
panduan2(){
if [ `echo $?` -eq 0 ];then
echo "$1 已删除"
else
echo "$1 未删除"
fi
}
#取消挂载
mount|grep "$vg_name-$lv_name"|awk '{print $1}'|xargs umount
#检查取消挂载是否成功
if [ "`mount |grep $vg_name-$lv_name|awk -F '/' '{print $4}'|awk '{print $1}'`" == "$vg_name-$lv_name" ];then
echo "$mount_name 依旧挂载中,请检查配置文件以及命令。"
else
echo "$mount_name 已取消挂载";sleep 1
#删除/etc/fstab配置文件中的lv挂载配置
sed -i "/\/dev\/vg1\/lv1/d" /etc/fstab
#检查配置文件中是否修改成功
if [ `grep "/dev/$vg_name/$lv_name" /etc/fstab |wc -l` -eq 1 ];then
echo "/etc/fstab中 /dev/$vg_name/$lv_name $mount_name ext4 defaults 0 0 配置依旧存在,请检查配置文件以及命令。"
else
echo "/dev/$vg_name/$lv_name $mount_name ext4 defaults 0 0 挂载配置文件已删除"
#删除挂载的目录
rm -rf $mount_name
#删除lv逻辑卷
echo -e "y"|lvremove /dev/$vg_name/$lv_name >/dev/null
panduan2 "$lv_name 逻辑卷"
#删除vg卷组
vgremove $vg_name >/dev/null
panduan2 "$vg_name 卷组"
#删除pv物理卷
pvremove `fdisk -l|grep -v "/dev/sda"|grep LVM|grep 8e|awk '{print $1}'|xargs echo` >/dev/null
panduan2 "`fdisk -l|grep -v "/dev/sda"|grep LVM|grep 8e|awk '{print $1}'|xargs echo` 物理卷"
echo "开始清除lvm的8e格式:"
#删除lvm盘8e格式
dev_sd=`fdisk -l|grep -v "/dev/sda"|grep -v 8e|grep "/dev/sd"|awk '{print $2}'|awk -F ':' '{print $1}'|xargs echo`
for i in $dev_sd;do
sleep 1
echo -e "d\n1\nw" |fdisk $i >/dev/null
panduan2 $i
done
fi
fi
;;
*)
echo "你的用法不对,用法:install | remove , 再试试吧……"
;;
esac