您的位置:首页 > 运维架构 > Linux

Linux LVM Tool --- Linux LVM管理工具

2013-05-13 09:40 393 查看
# 这是一个基于SHELL的Linux LVM管理工具.类似于AIX下的SMIT.当然,它只能管理LVM.

# 此工具当前版本为1.0.实现了如下功能:

物理卷模块的功能:创建,移除,更改,扫描,查看.
卷组模块的功能:创建,移除,更改,扫描,查看,合并,迁移.
逻辑卷模块的功能:创建,移除,更改,扫描,查看,快照.

# 已在Red Hat Enterprise Linux 5.4 64bit上测试通过.

# 脚本可通过附件下载

#!/bin/bash
# Version 1.0
# AUTHOR:       Xin23   http://weibo.com/231988 Tab()
{
printf \\t
}
NextLine()
{
echo ' '
}
EchoTitle()
{
NextLine
if [ "$1" == "newline" ]
then echo "--------$TITLE-----------------------------------------"
NextLine
NextLine
else
echo "--------$TITLE-----------------------------------------"
fi
}
ErrorInput()
{
NextLine
echo "$(printf \\t)Warning:$(printf \\t)Invalid Value,Please Retype!"
NextLine
}
ReadError()
{
NextLine
read -p "$(printf \\t)Press Any Key Plus Enter To Return:$(printf \\t)" ErrorVar

NextLine
}
ChooseDisk()
{
NextLine
Tab
read -p "Please Choose Disk:$(printf \\t)(Example: /dev/sdc)$(printf \\t)"  PARAMETER
NextLine
}
ChoosePV()
{
NextLine

Tab
read -p "Please Choose Physical Volumn:$(printf \\t)(Example: /dev/sdb)$(printf \\t)"  PVVAR
NextLine
}
ChooseVG()
{
NextLine
Tab
read -p "Please Choose Volumn Group:$(printf \\t)(Example: datavg)$(printf \\t)"  VGVAR
NextLine
}
ChooseLV()
{
NextLine
Tab
read -p "Please Choose Logical Volumn:$(printf \\t)(Example: /dev/datavg/datalv)$(printf \\t)"  LVVAR
NextLine
}
GetChoice()
{
NextLine
Tab
read -p "Input Your Choice:$(printf \\t)" CHOICE
NextLine
}
RunCommand()
{
if   [ $CHOICE == y ]
then $COMMAND $ADDTIONAL_OPTIONS $PARAMETER
elif [ $CHOICE == n ]
then LVMMain
else
VerifyOperate
fi

if [ $? -ne 0 ]
then exit 1
fi
}
VerifyOperate()
{
NextLine
echo "$(printf \\t)Attention:$(printf \\t)You Will Run Command:$(printf \\t) $COMMAND $ADDTIONAL_OPTIONS $PARAMETER"
NextLine
echo "$(printf \\t)Continue$(printf \\t)...... y
$(printf \\t)Return$(printf \\t)$(printf \\t)...... n"
GetChoice
NextLine
RunCommand
}
UnsetVar()
{
unset COMMAND ADDTIONAL_OPTIONS PARAMETER PVVAR VGVAR LVVAR TITLE PVNAME VGNAME PESIZE DestinationVG SourceVG VGSTATUS LVNAME LVNAMEVAR
unset LVOPTION LENUM LVSIZE SIZE MIRRORNUM STRIPESIZE STRIPEWIDTH MIRRORVAR STRIPEVAR LVSIZECreateType PVSTATUS LVSTATUS
}
PVChange()
{
echo "$(printf \\t)Which Operate You Want To do ?"
NextLine
echo "$(printf \\t)Enable Allocatable$(printf \\t)...... y
$(printf \\t)Disable Allocatable$(printf \\t)...... n"
GetChoice
if   [ $CHOICE == y ]
then ADDTIONAL_OPTIONS='-x y'
PVSTATUS=Enable
TITLE='Enable Physical Volumn'
EchoTitle newline
elif [ $CHOICE == n ]
then ADDTIONAL_OPTIONS='-x n'
PVSTATUS=Disable
TITLE='Disable Physical Volumn'
EchoTitle newline
else
ErrorInput
ReadError
PV
fi
}
PVShow()
{
echo "$(printf \\t)Which Physical Volumn You Want To Show ?"
NextLine
echo "$(printf \\t)All    Physical Volumn$(printf \\t)...... 1
$(printf \\t)Single Physical Volumn$(printf \\t)...... 2"
GetChoice
if   [ $CHOICE -eq 1 ]
then clear
pvdisplay
elif [ $CHOICE -eq 2 ]
then EchoTitle newline
ChooseDisk
clear
pvdisplay $PARAMETER
else
ErrorInput
ReadError
PV
fi
}
MigratePE()
{
read -p "$(printf \\t)Please Input Source Physical Volumn:$(printf \\t)" SourcePV
NextLine
read -p "$(printf \\t)Please Input Destination Physical Volumn:$(printf \\t)" DestinationPV
NextLine
COMMAND=pvmove
PARAMETER="$SourcePV $DestinationPV"
echo "$(printf \\t)Attention:$(printf \\t)Extents on Physical Volumn $SourcePV Will Move To $DestinationPV"
VerifyOperate
}
PV()
{
UnsetVar
clear
TITLE='Physical Volumn Menu'
EchoTitle
ShowPVMenu()
{
echo "

$(printf \\t)Physical Volumn Menu
$(printf \\t)Input Number To Choose!
$(printf \\t)Create  Physical Volumn$(printf \\t)...... 1
$(printf \\t)Remove  Physical Volumn$(printf \\t)...... 2
$(printf \\t)Change  Physical Volumn$(printf \\t)...... 3
$(printf \\t)Show    Physical Volumn$(printf \\t)...... 4
$(printf \\t)Scan    Physical Volumn$(printf \\t)...... 5
$(printf \\t)Migrate Physical Extent$(printf \\t)...... 6
$(printf \\t)Exit                   $(printf \\t)...... 7"
NextLine
}
ShowPVMenu
GetChoice
case $CHOICE in
"1")
TITLE='Create Physical Volumn'
EchoTitle newline
COMMAND=pvcreate
ChooseDisk
echo "$(printf \\t)Attention:$(printf \\t)Disk $PARAMETER Will Convert To Physical Volumn"
VerifyOperate
;;
"2")
TITLE='Remove Physical Volumn'
EchoTitle newline
COMMAND=pvremove
ChooseDisk
echo "$(printf \\t)Attention:$(printf \\t)Disk $PARAMETER Will Be Remove From Physical Volumn"
VerifyOperate
;;
"3")
TITLE='Change Physical Volumn'
EchoTitle newline
COMMAND=pvchange
PVChange
ChooseDisk
echo "$(printf \\t)Attention:$(printf \\t)Physical Volumn $PARAMETER Will $PVSTATUS"
VerifyOperate
;;
"4")
TITLE='Show   Physical Volumn'
EchoTitle newline
PVShow
;;
"5")
TITLE='Scan   Physical Volumn'
clear
EchoTitle newline
pvscan
;;
"6")
TITLE='Migrate Physical Extent'
EchoTitle newline
MigratePE
;;
"7")
LVMMain
;;
* )
ErrorInput
ReadError
PV
;;

esac
exit 0
}
VGChange()
{

echo "$(printf \\t)Which Operate You Want To do ?"
NextLine
echo "$(printf \\t)Extend Volumn Group$(printf \\t)...... 1
$(printf \\t)Reduce Volumn Group$(printf \\t)...... 2
$(printf \\t)Active Volumn Group$(printf \\t)...... 3
$(printf \\t)Inactive Volumn Group$(printf \\t)...... 4"
GetChoice

case $CHOICE in

"1")
TITLE='Extend Volumn Group'
EchoTitle newline
COMMAND=vgextend
read -p "$(printf \\t)Which Volumn Group You Want To Extend?$(printf \\t)(Example: datavg)$(printf \\t)" VGVAR
NextLine
read -p "$(printf \\t)Which Physical Volumn You Want To Add?$(printf \\t)(Example: /dev/sdb)$(printf \\t)" PVVAR
PARAMETER="$VGVAR $PVVAR"
VGSTATUS=Extend
;;
"2")
TITLE='Reduce Volumn Group'
EchoTitle newline
COMMAND=vgreduce
read -p "$(printf \\t)Which Volumn Group You Want To Reduce ?$(printf \\t)(Example: datavg)$(printf \\t)" VGVAR
NextLine
read -p "$(printf \\t)Which Physical Volumn You Want To Remove ?$(printf \\t)(Example: /dev/sdb)$(printf \\t)" PVVAR
PARAMETER="$VGVAR $PVVAR"
VGSTATUS=Reduce
;;
"3")
TITLE='Active Volumn Group'
EchoTitle newline
COMMAND=vgchange
ChooseVG
ADDTIONAL_OPTIONS='-a y'
PARAMETER=$VGVAR
VGSTATUS=Active
;;
"4")
TITLE='Inactive Volumn Group'
EchoTitle newline
COMMAND=vgchange
ChooseVG
ADDTIONAL_OPTIONS='-a n'
PARAMETER=$VGVAR
VGSTATUS=Inactive
;;
* )
ErrorInput
ReadError
VG
;;

esac
}
VGShow()
{
echo "$(printf \\t)Which Volumn Group You Want To Show ?"
NextLine
echo "$(printf \\t)All    Volumn Group$(printf \\t)...... 1
$(printf \\t)Single Volumn Group$(printf \\t)...... 2"
GetChoice
if   [ $CHOICE -eq 1 ]
then clear
vgdisplay -v
elif [ $CHOICE -eq 2 ]
then EchoTitle newline
ChooseVG
PARAMETER=$VGVAR
clear
vgdisplay -v $PARAMETER
else
ErrorInput
ReadError
VG
fi
}
VGMerge()
{
echo "$(printf \\t)Merge Source Volumn Group To Destination Volumn Group!"
NextLine
read -p "$(printf \\t)Please Input Your Destination Volumn Group:$(printf \\t)" DestinationVG
NextLine
read -p "$(printf \\t)Please Input Your Source Volumn Group:$(printf \\t)" SourceVG
NextLine
COMMAND=vgmerge
PARAMETER="$DestinationVG $SourceVG"
}
VGMigrate()
{
echo "$(printf \\t)Which Operation Do You Want To Do?"
NextLine
echo "$(printf \\t)Export Volumn Group$(printf \\t)...... 1
$(printf \\t)Import Volumn Group$(printf \\t)...... 2"
GetChoice
NextLine
if [ $CHOICE -eq 1 ]
then TITLE='Export Volumn Group'
EchoTitle newline
COMMAND=vgexport
read -p "$(printf \\t)Which Volumn Group Do You Want To Export:$(printf \\t)"       PARAMETER
NextLine
VGSTATUS=Export
elif [ $CHOICE -eq 2 ]
then TITLE='Import Volumn Group'
EchoTitle newline
COMMAND=vgimport
read -p "$(printf \\t)Which Volumn Group Do You Want To Import:$(printf \\t)"       PARAMETER
NextLine
VGSTATUS=Import
else
ErrorInput
ReadError
VG
fi
}
VG()
{
UnsetVar
clear
TITLE='Volumn   Group Menu'
EchoTitle
ShowVGMenu()
{

echo "

$(printf \\t)Volumn   Group Menu
$(printf \\t)Input Number To Choose!
$(printf \\t)Create  Volumn Group$(printf \\t)...... 1
$(printf \\t)Remove  Volumn Group$(printf \\t)...... 2
$(printf \\t)Change  Volumn Group$(printf \\t)...... 3
$(printf \\t)Show    Volumn Group$(printf \\t)...... 4
$(printf \\t)Scan    Volumn Group$(printf \\t)...... 5
$(printf \\t)Merge   Volumn Group$(printf \\t)...... 6
$(printf \\t)Migrate Volumn Group$(printf \\t)...... 7
$(printf \\t)Exit                $(printf \\t)...... 8"
NextLine
}
ShowVGMenu
GetChoice
case $CHOICE in
"1")
TITLE='Create Volumn Group'
EchoTitle newline
COMMAND=vgcreate
read -p "$(printf \\t)Please Input VGNAME You Want To Create:$(printf \\t)"       VGNAME
NextLine
read -p "$(printf \\t)Please Input PVNAME(Member Of Volumn Group):$(printf \\t)" PVNAME
NextLine
read -p "$(printf \\t)Please Input Physical Extent Size:$(printf \\t)(Example: 16MB$(printf \\t)Default: 4MB)$(printf \\t)" PESIZE
NextLine
PARAMETER=" $VGNAME $PVNAME"
if [ -n "$PESIZE" ]
then ADDTIONAL_OPTIONS="-s $PESIZE"
fi
echo "$(printf \\t)Attention:$(printf \\t)Volumn Group $VGNAME Will Be Create And $PVNAME Will Be It Member"
VerifyOperate
;;
"2")
TITLE='Remove Volumn Group'
EchoTitle newline
COMMAND=vgremove
ChooseVG
PARAMETER=$VGVAR
echo "$(printf \\t)Attention:$(printf \\t)Volumn Group $PARAMETER Will Remove"
VerifyOperate
;;
"3")
TITLE='Change Volumn Group'
EchoTitle newline
VGChange
NextLine
echo "$(printf \\t)Attention:$(printf \\t)Volumn Group $VGVAR Will $VGSTATUS"
VerifyOperate
;;
"4")
TITLE='Show   Volumn Group'
EchoTitle newline
VGShow
;;
"5")
TITLE='Scan   Volumn Group'
clear
EchoTitle newline
vgscan
;;
"6")
TITLE='Merge  Volumn Group'
EchoTitle newline
VGMerge
echo "$(printf \\t)Attention:$(printf \\t)Volumn Group $SourceVG Will Merge To $DestinationVG "
VerifyOperate
;;
"7")
TITLE='Migrate   Volumn Group'
EchoTitle newline
VGMigrate
echo "$(printf \\t)Attention:$(printf \\t)Volumn Group $PARAMETER Will Be $VGSTATUS"
VerifyOperate
;;
"8")
LVMMain
;;
* )
ErrorInput
ReadError
VG
;;

esac
exit 0
}
VerifyLVType()
{

echo "$(printf \\t)Which Type You Want To Determine Size Of Logical Volumn?

$(printf \\t)LogicalExtentsNumber$(printf \\t)...... 1
$(printf \\t)LogicalVolumeSize   $(printf \\t)...... 2"
GetChoice
if [ $CHOICE -eq 1 ]
then    LVOPTION='-l'
read -p "$(printf \\t)Please Input Numbers Of Logical Extent:$(printf \\t)" LENUM
SIZE="$LVOPTION $LENUM"
elif [ $CHOICE -eq 2 ]
then  LVOPTION='-L'
read -p "$(printf \\t)Please Input Size Of Logical Volumn:$(printf \\t)" LVSIZE
SIZE="$LVOPTION $LVSIZE"
else
ErrorInput
ReadError
LV
fi
}
Snapshot()
{
VerifyLVType
NextLine
COMMAND=lvcreate
read -p "$(printf \\t)Please Input Logical Volumn Name You Want To Create:$(printf \\t)" LVNAME
NextLine
ChooseLV
PARAMETER=$LVVAR
NextLine
LVNAMEVAR="-n $LVNAME"
ADDTIONAL_OPTIONS="-s $LVNAMEVAR $SIZE"
echo "$(printf \\t)Attention:$(printf \\t)Snapshot $LVNAME Will Create"
VerifyOperate
}
LVCreate()
{
COMMAND=lvcreate
read -p "$(printf \\t)Please Input Logical Volumn Name You Want To Create:$(printf \\t)" LVNAME
LVNAMEVAR="-n $LVNAME"
ChooseVG
PARAMETER=$VGVAR

echo "$(printf \\t)Which Type Of Logical Volumn You Want To Create?

$(printf \\t)Common Logical Volumn$(printf \\t)...... 1
$(printf \\t)Mirror Logical Volumn$(printf \\t)...... 2
$(printf \\t)Stripe Logical Volumn$(printf \\t)...... 3
$(printf \\t)exit         $(printf \\t)...... 4"
NextLine

GetChoice

case $CHOICE in
"1")
TITLE='Create Common Logical Volumn'
EchoTitle newline
VerifyLVType
NextLine
ADDTIONAL_OPTIONS="$LVNAMEVAR $SIZE"
;;
"2")
TITLE='Create Mirror Logical Volumn'
EchoTitle newline
VerifyLVType
NextLine
read -p "$(printf \\t)How Many Mirror You Want To Create?$(printf \\t)" MIRRORNUM
MIRRORVAR="-m $MIRRORNUM"
ADDTIONAL_OPTIONS="$MIRRORVAR $LVNAMEVAR $SIZE"
;;
"3")
TITLE='Create Stripe Logical Volumn'
EchoTitle newline
VerifyLVType
NextLine
read -p "$(printf \\t)Please Input Stripe Size:$(printf \\t)" STRIPESIZE
NextLine
read -p "$(printf \\t)Please Input Stripe Width:$(printf \\t)" STRIPEWIDTH
STRIPEVAR="-i $STRIPEWIDTH -I $STRIPESIZE"
ADDTIONAL_OPTIONS="$STRIPEVAR $LVNAMEVAR $SIZE"
;;
"4")
LV
;;
* )
ErrorInput
ReadError
LV
;;

esac
}
LVChange()
{
echo "$(printf \\t)Active Logical Volumn$(printf \\t)...... 1
$(printf \\t)Inactive Logical Volumn$(printf \\t)...... 2
$(printf \\t)Rename Logical Volumn$(printf \\t)...... 3
$(printf \\t)Extend Logical Volumn$(printf \\t)...... 4
$(printf \\t)Reduce Logical Volumn$(printf \\t)...... 5"
GetChoice
case $CHOICE in
"1")
TITLE='Active Logical Volumn'
EchoTitle newline
COMMAND=lvchange
ADDTIONAL_OPTIONS='-a y'
ChooseLV
PARAMETER=$LVVAR
LVSTATUS=Active
;;
"2")
TITLE='Inactive Logical Volumn'
EchoTitle newline
COMMAND=lvchange
ADDTIONAL_OPTIONS='-a n'
ChooseLV
PARAMETER=$LVVAR
LVSTATUS=Inactive
;;
"3")
TITLE='Rename Logical Volumn'
EchoTitle newline
COMMAND=lvrename
ChooseLV
read -p "$(printf \\t)Please Input New Name Of The Logical Volumn:$(printf \\t)" LVNEWNAME
PARAMETER="$LVVAR $LVNEWNAME"
LVSTATUS=Rename
NextLine
;;
"4")
TITLE='Extend Logical Volumn'
EchoTitle newline
VerifyLVType
COMMAND=lvextend
ChooseLV
PARAMETER="$LVVAR"
LVSTATUS=Extend
ADDTIONAL_OPTIONS="$SIZE"
;;
"5")
TITLE='Reduce Logical Volumn'
EchoTitle newline
VerifyLVType
COMMAND=lvreduce
ChooseLV
PARAMETER="$LVVAR"
LVSTATUS=Reduce
ADDTIONAL_OPTIONS="$SIZE"
;;
* )
ErrorInput
ReadError
LV
;;
esac
}
LVShow()
{

echo "$(printf \\t)Which Logical Volumn You Want To Show ?"
NextLine
echo "$(printf \\t)All    Logical Volumn$(printf \\t)...... 1
$(printf \\t)Single Logical Volumn$(printf \\t)...... 2"
GetChoice

if   [ $CHOICE -eq 1 ]
then clear
lvdisplay
elif [ $CHOICE -eq 2 ]
then EchoTitle newline
ChooseLV
PARAMETER=$LVVAR
clear
lvdisplay $PARAMETER
else
ErrorInput
ReadError
LV
fi
}
LV()
{
UnsetVar
clear
TITLE='Logical Volumn Menu'
EchoTitle
ShowLVMenu()
{
echo "

$(printf \\t)Logical Volumn Menu
$(printf \\t)Input Number To Choose!
$(printf \\t)Create Logical Volumn$(printf \\t)...... 1
$(printf \\t)Remove Logical Volumn$(printf \\t)...... 2
$(printf \\t)Change Logical Volumn$(printf \\t)...... 3
$(printf \\t)Show   Logical Volumn$(printf \\t)...... 4
$(printf \\t)Scan   Logical Volumn$(printf \\t)...... 5
$(printf \\t)Create Snapshot      $(printf \\t)...... 6
$(printf \\t)Exit                 $(printf \\t)...... 7"
NextLine
}
ShowLVMenu
GetChoice
case $CHOICE in
"1")
TITLE='Create Logical Volumn'
EchoTitle newline
LVCreate
NextLine
echo "$(printf \\t)Attention:$(printf \\t)Logical Volumn $LVNAME Will Create"
VerifyOperate
;;
"2")
TITLE='Remove Logical Volumn'
EchoTitle newline
COMMAND=lvremove
ChooseLV
PARAMETER=$LVVAR
echo "$(printf \\t)Attention:$(printf \\t)Logical Volumn $PARAMETER Will Remove"
VerifyOperate
;;
"3")
LVChange
echo "$(printf \\t)Attention:$(printf \\t)Logical Volumn $PARAMETER Will $LVSTATUS"
VerifyOperate
;;
"4")
TITLE='Show   Logical Volumn'
EchoTitle newline
LVShow
;;
"5")
TITLE='Scan   Logical Volumn'
clear
EchoTitle newline
lvscan
;;
"6")
TITLE='Create Snapshot'
EchoTitle newline
Snapshot
;;
"7")
LVMMain
;;
* )
ErrorInput
ReadError
LV
;;

esac
exit 0
}
LVMMain()
{

clear
TITLE='LVM Main Menu'
EchoTitle
echo "
$(printf \\t)LVM Main Menu
$(printf \\t)Input Number To Choose!
$(printf \\t)Physical Volumn Manager$(printf \\t)...... 1
$(printf \\t)Volumn    Group Manager$(printf \\t)...... 2
$(printf \\t)Logical  Volumn Manager$(printf \\t)...... 3
$(printf \\t)Exit                   $(printf \\t)...... 4"

GetChoice

NextLine
case $CHOICE in
"1")
PV
Status=0
;;
"2")
VG
Status=0
;;
"3")
LV
Status=0
;;
"4")
exit 0
;;
* )
ErrorInput
ReadError
LVMMain
;;
esac
ReturnToLVMMain()
{
if [ $Status -eq 0 ]
then NextLine
LVMMain
fi
}
ReturnToLVMMain
}
LVMMain


The End

本文出自 “Xin23的流水账” 博客,谢绝转载!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: