天天看點

linux LVM 一鍵分區腳本自動擴容執行腳本:

#  1.首先 将硬碟加入lvm 才能建立LVM 分區
#!/bin/bash
check(){                    #  [ʧɛk] 檢查
azlvm=$(yum list installed | grep lvm2)
                        # 定義一個名稱為azlvm的變量,值為:
                        # 檢視已安裝的包,grep 比對lvm 名稱
cdazlvm=$(echo ${#azlvm})    # 定義一個變量為:列印字元串長度
if [ $cdazlvm -lt 1 ]
                        # 判斷變量字元串長度小于1
then                        # 然後
        yum install -y lvm2    
        echo "您還沒有安裝lvm,正在為您安裝,請稍後:"
else                        # 其他情況
        echo "lvm 已經安裝,無需操作,已經安裝的資訊為:
    $azlvm"
fi                        # if的結束标記 fi
}
check    ;             # 調用方法函數;函數名放出來才會執行
# 2. 輸入資訊
input(){
echo "lv 分區,vg 卷,pv 硬碟"
lsdisk=$(fdisk -l |  awk -F " " '$1=="Disk" {print i++ " | "  $1 " | "  $2 " | " $3 $4}'  | sed s/\://g )
                        # 檢視所有硬碟
                        # -F " " 指定分隔符是空格;$1 是第一列;==等于字元串 Disk; 的所有行
                        # 坐标:行已得到,開始print 列印列; i++ 表示列印序号數數
                        # " | " 是字元串連接配接符号  |   ; 列印結果的123列内容
                        # sed s/\://g  修改冒号為空格,  符号 \  将特殊字元 冒号 轉譯 
lvs=$(lvs |grep "-" | awk -F " " '{print i++ "  |分區:  " $1 "  |卷:  " $2 "  |  "  $3 } ')
echo "
檢視硬碟:
$lsdisk
檢視所有曆史分區:
$lsDiskCatalog  
檢視目前存在的VG 卷 和LV分區如下:
$lvs
"
##################   使用者輸入  ################
echo "
read 接收視窗指令界面輸入的字元串;-p 加文字說明;需要分區的磁盤變量 a
如果輸入錯誤字元或者閃跳,請Ctrl +c  退出重新輸入
請輸入你要進行分區的磁盤; 磁盤格式為:sdb "
read -p "請輸入要分區的磁盤:"  disk ;             
echo "磁盤挂載目錄格式為:   /www     将會清空該目錄下的檔案
下面功能方法涉及不到的參數請回車跳過"
read -p "請輸入挂載 [ˈkætəlɔg]目錄:"  catalog        ;             
read -p "請輸入邏輯 [ˈvɑljum] 卷的組名稱如 eisc 請您輸入名字:"  volume    ;     
read -p "請輸入 [pɑrˈtɪʃən]分區唯一名稱如 a 請您輸入名字:"  partition ;     
read -p "請輸入分區大小,如: 3G 請您輸入:"  size    ;     
DiskCatalog=$(fdisk -l | grep "\-$partition" | awk -F" " '{print $2}' | sed "s/\://g")
                        # 檢視lvm 分區目錄;    作為公有變量來使用
                        # grep 比對字元包含 -a字 符 字段的行; 特殊轉譯符号 \;  awk -F " " 指定空格為分隔符
                        # 直接列印結果中的第二列
                        # sed "s/\://g"  其中 sed s 修改 g 開啟特殊字元轉譯, 特殊字元轉譯符号 \  使冒号 : 不被解析;
echo "根據您輸入的資訊先查找的硬碟目錄:
$DiskCatalog
"
}
# 3. 分區
partition(){
echo "目前是建立LVM卷和挂載新分區"
input ;                     # 調用輸入函數
pvcreate /dev/$disk        # 建立實體卷,選擇的硬碟為 sdc
                        #  create [kriˈet] 建立
pvs                        # 檢視所有pv硬碟
pvs /dev/$disk pvscan        # 檢視指定pv硬碟
pvdisplay /dev/$disk        # 顯示系統上面的pv硬碟狀态
                        # display [dɪˈsple] 顯示
    
# pvremove /dev/xxx        # 廢除pv硬碟格式,(僅需要了解)
#                        # remove [riˈmuv] 廢除
# pvs/pvscan             # 檢視系統裡有pv的磁盤
# pvdisplay                 # 顯示系統上面的pv狀态
vgcreate -s 16M $volume /dev/$disk
                        # 建立一個卷組,大小為16M;名字為:eisc
                        # 選擇的硬碟為:sdc
                        # 建立一個vg,-s後面接pe的大小(可選),機關是M,G,可以放多塊pv
lvcreate -L $size -n $partition $volume    
                        # 建立邏輯卷,名字為:a
                        # 建立一個lv,-l指定pe的個數,-L指定容量,M,G
# lvs/lvscan             # 檢視系統裡有lv的磁盤
# lvdisplay                 # 顯示系統上面的lv狀态
# lvremove                 # 删除lv
# lvreduce                 # 在lv裡減少容量
# lvextend                 # 增加容量
mkfs -t ext4 /dev/mapper/$volume-$partition ; 
mkfs -t ext4 /dev/mapper/$volume-$partition
                        # 格式化分區
rm -rf $catalog
mkdir $catalog            # 建立挂載的目錄
mount /dev/mapper/$volume-$partition $catalog
                        # 挂載到目錄 /www
df -h                     # 檢視挂載的lvm分區
sed -i "/#eisc$partition/d" /etc/fstab ; sed -i "/^$/d" /etc/fstab
                        # 挂載删除寫記錄; 删除空行
echo "
/dev/mapper/$volume-$partition            $catalog        ext4    defaults        0 0        #eisc$partition
" >> /etc/fstab
}
 # 4. 基本lvm 分區結束,擴容分區和強制調整分區大小
PartitionSize(){
echo "目前是分區擴容,需要提供大小,分區所屬硬碟,挂載目錄
需要輸入大小,和分區名字
"
input ;                    # 調用使用者輸入方法函數;函數名放出來才會執行
lvextend -L +$size $DiskCatalog    
                        # 擴充這個分區1G容量
resize2fs $DiskCatalog        # 更新檔案系統的大小,即激活
lvs                        # 檢視分區
}
MandatorySize(){                # [ˈmændəˌtɔri] 強制
echo "目前是分區擴容,需要提供大小,分區所屬硬碟,挂載目錄
需要輸入大小,和分區名字,挂載目錄
請注意:需要格式化才能裝載(挂載);需要備份資料
"
input ; 
catalog=$(df -h | grep "\-$partition" | awk -F" " '{print $6}')
umount /dev/mapper/$volume-$partition  $catalog
                        # 取消現有挂載,然後強制設定大小,再然後:
lvreduce -L $size /dev/mapper/$volume-$partition 
                        # 強制設定大小;首先需要:
# resize2fs /dev/mapper/$volume-$partition         # 生效
mkfs -t ext4 /dev/mapper/$volume-$partition
                        # 格式化
mount /dev/mapper/$volume-$partition  $catalog
                        # 重新挂載
df -h                    # 再次檢視磁盤容量;發現分區已經調整
}
 # 5.LVM 擴容硬碟:多個硬碟加入LVM;# 如果硬碟(硬體)空間不夠:vg空間不夠,需先擴充vg,擴充vg就是往vg中加pv
Expansion(){                #  [ɪkˈspænʃən] 擴容
echo "将硬碟加入現有的LVM卷,需要硬碟和卷名稱兩個參數,其他提示回車跳過。列出目前加入LVM分區的硬碟,和現有的PV卷"
pvs                        # 檢視現有pv硬碟:加入lvm的硬碟
vgs                        # LVM卷
input ;                      # 調用輸入函數
pvcreate /dev/$disk        # 将硬碟加入lvm, 然後 pvs 再次檢視
vgextend $volume /dev/$disk
                        # 将硬碟加入 eisc 卷組,然後總容量是各個硬碟容量之和
pvs                        # 再次檢視LVM硬碟
}
 # 6.LVM的縮減删除操作 
Delete(){                    # [dəˈlit] 删除
echo "
删除操作需要滿足先後順序
1.先删除LV分區:隻輸入分區名字,其他回車跳過
2.再删除VG卷:隻輸入卷名字
3.最後删除VG硬碟先後順序
需要提供卷,分區名字,挂載目錄"
input ; 
echo "請輸入:1删除lv分區,2 删除vg卷,3删除lvm硬碟(取消挂載)
"
read -p "請輸入操作:" r
case "$r" in 
"1") 
dcatalog=$(df -h | grep "\-$partition" | awk -F " " '{print $6}')
                            # 檢視LVM分區的挂載目錄 : "\-" 将特殊字元 -  轉譯
umount $DiskCatalog $dcatalog    # 取消挂載的所有分區(lv)才能執行删除
lvremove $DiskCatalog            # 删除lvm分區 a  ;             簡稱 lv
lvs
;;
"2")
vgremove /dev/mapper/$volume    # 删除eisc卷組(邏輯卷);    簡稱:vg
vgs
echo "删除了VG卷,請也删除硬碟重新加入LVM,即重新分區;"
;; 
"3")
pvremove /dev/$disk            # 删除lvm 的硬碟;            簡稱:pv
pvs
;;
*) echo "
###########################################################
                           輸入錯誤請重新輸入
###########################################################
"
Delete
;;
esac
}
home(){
clear            # 清屏
echo "
歡迎來到小綠葉技術部落格
www.eisc.cn
LVM自動化分區腳本
請輸入對應數字驚醒操作:
1.建立LVM分區                                   2.分區擴容
3.減少分區至指定大小                         4.擴容LVM硬碟
5.lv vg pv 的删除操作
"
read -p " 請輸入您的操作:" h
case "$h" in
"1") partition
;;
"2") PartitionSize
;;
"3") MandatorySize
;;
"4") Expansion
;;
"5") Delete
;;
*) echo "輸入錯誤,請重新輸入。正在傳回主界面"
home
;;
esac
}
home
# 執行腳本:
yum install -y wget 
rm -rf lvmpartition.sh ; wget eisc.cn/file/shell/lvmpartition.sh ; sed -i "/^$/d" lvmpartition.sh ; chmod 755 lvmpartition.sh ; ./lvmpartition.sh
           

執行腳本:

yum install -y wget

rm -rf lvmpartition.sh ; wget eisc.cn/file/shell/lvmpartition.sh ; sed -i "/^$/d" lvmpartition.sh ; chmod 755 lvmpartition.sh ; ./lvmpartition.sh

繼續閱讀