shell脚本编程:Linux的自动化逻辑卷创建脚本
发布时间
阅读量:
阅读量
编写一个脚本以实现创建和管理虚拟化存储(LV)的功能。例如:
A. 创建一个LV。
B. 在已有的虚拟集群(VG)中创建LV。
C. 扩展现有的LV。
D. 缩小或减少现有LV的数量。
如果用户选择了A项,则完成如下功能:
1)显示当前系统中所有磁盘及其柱面的相关信息:包括共有柱面数量及空闲柱面范围;随后请求用户选择一个特定的磁盘作为创建LV的基础;
2)当用户选定该磁盘后将展示其详细的分区信息;
3)询问用户创建的新VG名称、PV数量以及每个PV的具体容量;随后自动划分相应的PV并建立对应的VG;
4)完成后将创建相应的PV并以这些PV为基础生成VG;
5)创建LV:首先请用户输入所需的LV容量与名称后进行创建;
6)完成格式化该LV的操作;
7)提示用户指定挂载点:如果已有的挂载点存在且连接有其他存储设备,则要求更换一个可用的挂载位置直至成功找到空闲位置;否则就使用当前选中的挂载点完成文件系统的挂载
如果用户选择了B项,则完成以下功能:
1)引导用户输入要创建的LV名称、容量和对应的VG名称;
2)生成此LV。(说明:在为该LV生成之前,请确保VG剩余空间足以容纳所需的空间。)
当用户选择选项C时,系统将执行以下操作:首先要求用户选定一个LV,并显示其当前容量;随后请求用户提供扩展后的容量。随后将该LV按用户的指定容量进行扩展。(注:在执行扩展操作前,请确认VG中剩余磁盘空间足以支持此次操作。)
如果用户选择了D项,则执行以下操作:
- 引导用户选择一个 LV,并告知当前 LV 的空间占用情况。
- 将其容量压缩至用户的设定值。
(注:在进行压缩操作前,请确保目标空间能够容纳当前 LV 的全部数据。)
#!/bin/bash
#: Title:lvm3.sh
#: Synopsis:
#: Date:2011-08-01 20:48:38
#: Version: 1.0
#: Author: Dean
#: Options:
function A {
#DISK INFORMATION 要求用户只能选择一个空硬盘进行操作
D=`fdisk -l | grep -v Extended | grep Di | awk '{print $2}' | cut -d: -f1` //截取出所有的DISK名字
for I in $D;do //用for循环打印出每一个DISK的柱面信息
C=`fdisk -l $I | grep -v Extended | head -3 | tail -1 | awk '{print $5}'` //截取出总柱面信息
CN=`fdisk -l $I | grep -v Extended | tail -1 | awk '{print $3}' ` //截取出最后柱面,并排除extend分区
if [ $CN == 'Start' ];then //排除新硬盘没有分区的情况
let CN=0
echo "DISK:$I Total:$C Free:$[$C-$CN]"
else
echo "DISK:$I Total:$C Free:$[$C-$CN]"
fi
done
#USER INPUT
read -p "Please chose a free disk for creating LV:" DISK
fdisk -l $DISK
read -p "Input the VG's name;" VG
read -p "The number of PV;" NPV
#FDISK PV 用for循环实现创建用户所要求的PV,精确到每一个
for (( i=1;i<=$NPV;i++ ));do
read -p "The size of $i PV:" SPV
fdisk /dev/sda << End
n
p
+$SPV
t
$i
8e
w
End
done
partprobe $DISK
#PV $ VG CREATE 在刚创建的PV基础上创建VG
DPV=`fdisk -l /dev/sda | tail -$NPV | awk '{print $1}'`
for I in $DPV ;do
pvcreate $I
done
DPV=`echo $DPV`
vgcreate $VG $DPV
#LV CREATE 询问用户创建的LV的名字,和vg,创建出LV
read -p "Input the name of LV:" LV
read -p "Input the size of LV;" SLV
lvcreate -L $SLV -n $LV $VG
mke2fs -r /dev/$LV
#MOUNT 询问用户挂载点,并且直到这个挂载点没有被占用,才挂载上LV
read -p "Input the mount dir:" DIR
mount | grep "DIR"
TEST=$?
until [ $TEST -eq 0 ] ;do
echo "The dir is exist,try another!"
read -p "Input the mount dir:" DIR
mount | grep "DIR"
TEST=$?
done
mount /dev/$VG/$LV
}
function B {
######################创建LV
until [ $TEST -eq 0 ];do
read -p "Input the the name of LV:" LV
read -p "Input the size of LV:" SLV
vgdisplay
read -p "Input the VG's name:" VG
lvcreate /dev/$VG/$LV
TEST=$?
done
}
#####################扩展LV,如果容量不够扩展,重新选择大小进行扩展,直到可以扩展
function C {
until [ $TEST -eq 0 ];do
read -p "Which LV you want extend:" LV
lvdisplay $LV
read -p "Input the VG;s name:" VG
read -p "The size of extend:" SEN
lvextend -L $SEN /dev/$VG/$LV
TEST=$?
resize -p /dev/$VG/$LV
done
}
#######################缩小LV,如果容量限制不能缩小,重新选择大小,直到可以缩小,并且缩小前自检
function D {
until [ $TEST -eq 0 ];do
read -p "Which LV you want reduce:" LV
lvdisplay $LV
read -p "Input the VG's name:" VG
read -p "The size of reduce to:" SRE
umount /dev/$VG/$LV
e2fsck -f /dev/$VG/$LV
resize2fs /dev/$VG/$LV $SRE
TEST=$?
lvreduce -L $SRE /dev/$VG/$LV
done
}
### 程序选择界面
echo "------------------------------------------"
echo '-----------Program for LVM----------------'
echo "A Create an LV.
B Create an LV in an existing VG.
C Extend an LV.
D Reduce an LV."
read -p "Your choise,others for quite:" CH
case $CH in
'A')
A
;;
'B')
B
;;
'C')
C
;;
'D')
D
;;
*)
exit
;;
esac
全部评论 (0)
还没有任何评论哟~
