셸 스 크 립 트 프로 그래 밍: Linux 의 자동화 논리 볼 륨 생 성 스 크 립 트

LV 를 만 들 고 관리 하 는 스 크 립 트 를 작성 합 니 다:
설명: 스 크 립 트 가 실 행 될 때 아래 와 같은 메뉴 를 표시 할 수 있 습 니 다.
A Create an LV.
B Create an LV in an existing VG.
C Extend an LV.
D Reduce an LV.
사용자 가 A 항목 을 선택 하면 다음 과 같은 기능 을 수행 합 니 다.
1) 현재 시스템 의 모든 디스크 와 디스크 기둥면 에 대한 정 보 를 표시 합 니 다. 기둥면 수 와 남 은 기둥면 범위 가 있 습 니 다.그 다음 에 사용자 에 게 특정한 디스크 를 선택 하 라 고 알려 줍 니 다.
  LV 디스크 만 들 기;
2) 사용자 가 디스크 를 선택 하면 선택 한 디스크 의 파 티 션 정 보 를 사용자 에 게 표시 합 니 다.
3) 사용자 가 만 든 VG 이름, PV 개수 및 PV 당 크기 에 대해 묻는다.그 다음 에 분 구 를 새로 만 들 고 분 구 크기 는 각 PV 크기 에 대응 합 니 다.
4) 그 후에 해당 하 는 PV 를 만 들 고 이 를 통 해 VG 를 만 듭 니 다.
5) LV 생 성:
a) 사용자 에 게 LV 의 크기 와 이름 을 입력 한 후 LV 를 만 드 는 것 을 알려 줍 니 다.
b) 이 LV 를 포맷 합 니 다.
6) 마 운 트 지점 지정 알림
  a) 마 운 트 지점 이 이미 존재 하고 다른 저장 장 치 를 마 운 트 하면 마 운 트 지점 으로 바 꿀 때 까지 바 꾸 라 고 알려 줍 니 다.
  b) 그렇지 않 으 면 이 마 운 트 지점 을 사용 하여 이 LV 를 마 운 트 합 니 다. 
사용자 가 B 항 을 선택 하면 다음 과 같은 기능 을 수행 합 니 다.
1) 사용자 에 게 만 들 LV 의 이름, 크기, VG 의 이름 을 입력 하 라 고 알려 줍 니 다.
2) 이 LV 만 들 기;(설명: LV 를 만 들 기 전에 VG 에 남 은 공간 이 지정 한 LV 를 사용 할 수 있 는 지 테스트 해 야 합 니 다.)
사용자 가 C 항목 을 선택 하면 다음 과 같은 기능 을 수행 합 니 다.
1) 사용자 에 게 LV 선택 을 알 리 기;다음 에 현재 LV 의 크기 를 표시 하고 사용자 에 게 확 장 된 크기 를 알려 줍 니 다.
2) 사용자 가 지정 한 크기 로 LV 확장 하기;(알림: 확장 하기 전에 현재 VG 에 디스크 공간 이 충분 한 지 테스트 해 야 합 니 다.)
사용자 가 D 항목 을 선택 하면 다음 과 같은 기능 을 수행 합 니 다.
1) 사용자 에 게 LV 선택 을 알 리 기;그 다음 에 현재 LV 의 크기 를 표시 하고 사용자 에 게 줄 인 크기 를 알려 줍 니 다.
2) 이 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

좋은 웹페이지 즐겨찾기