«
逻辑卷安装与扩容脚本

时间:2023-1-16     作者:李泽信     分类: shell



#!/bin/bash

# Date:2023-1-16
# Author:lizexin
# Version:2.0

echo -e "\033[31m 磁盘创建与扩容,此版本将磁盘所有空间添加 \033[0m"
cat <<END
    1.[新建磁盘分区]
    2.[磁盘扩容]
    3.[退出]
    请输入您需要执行的序号:

END
read num

expr $num + 1 &> /dev/null

[ $? -ne 0 ] && {
    echo -e "\033[31m 序号必须输入{1|2|3}.. \033[0m"
    exit 1
}

[ "$num" -eq "1" ] && {
    echo -e "\033[31m 开始新建分区...请等待... \033[0m" 
    sleep 2;

    # 创建物理卷
    read -p "请输入需要创建的物理卷,例如(/dev/vdb): " Physical_Volume
    pvcreate $Physical_Volume &>/dev/null
    if [ $? -ne 0 ];then
        echo -e "\033[31m 创建${Physical_Volume}错误,请检查是否存在... \033[0m"
        exit 1
    else
        echo -e "\033[32m 创建成功,物理卷为${Physical_Volume} \033[0m"
    fi

    # 创建卷组
    read -p "请输入需要创建的卷组名称,例如(vg_data): " Volume_Group
    vgcreate $Volume_Group $Physical_Volume 2>&1 >/dev/null
    if [ $? -ne 0 ];then
        echo -e "\033[31m 创建${Volume_Group}错误,请检查是否已存在... \033[0m"
        exit 1
    else
        echo -e "\033[32m 创建成功,卷组为${Volume_Group}... \033[0m"
    fi

    # 创建逻辑卷
    read -p "请输入需要创建的逻辑卷名称,例如(lv_data): " Logical_Volume
    lvcreate -l 100%vg -n $Logical_Volume $Volume_Group 2>&1 >/dev/null
    if [ $? -ne 0 ];then
        echo -e "\033[31m 创建${Logical_Volume}错误,请检查是否正确... \033[0m"
        exit 1
    else
        echo -e "\033[32m 创建成功,逻辑卷为${Logical_Volume} \033[0m"
    fi

    # 格式化
    read -p "请选择格式化方式,请输入{ext4|xfs}  " MKFS
    if [ $MKFS = "ext4" ];then
        mkfs."${MKFS}" /dev/${Volume_Group}/${Logical_Volume} 2>&1 >/dev/null
        echo -e "\033[32m 格式化成功,类型为${MKFS} \033[0m"
    elif [ $MKFS = "xfs" ];then
        mkfs."${MKFS}" /dev/${Volume_Group}/${Logical_Volume}
        echo -e "\033[32m 格式化成功,类型为${MKFS} \033[0m" 2>&1 >/dev/null
    else
        echo -e "输入有误!"
        exit 2
    fi

    # 挂载点创建
    read -p "创建挂载目录,请输入目录名称(例如:/data): " Dir
    [ -d $Dir ] && echo -e "\033[31m 目录已存在 \033[0m" || mkdir $Dir

    # 临时挂载
    echo -e "\033[32m 开始挂载 \033[0m"
    mount /dev/${Volume_Group}/${Logical_Volume} $Dir

    # 永久挂载
    echo "/dev/mapper/${Volume_Group}-${Logical_Volume}     ${Dir}   ${MKFS}    defaults        0 0 " >>/etc/fstab
    if [ $? -ne 0 ];then
        echo -e "\033[31m 挂载失败,请查看是否有误! \033[0m"
        exit 1
    else
        echo -e "\033[31m 创建成功,请用以下命令自行查看(df -hT && cat /etc/fstab) \033[0m"
    fi
    echo -e "\033[31m 磁盘分配完成... \033[0m"
    exit 0
}

[ "$num" -eq "2" ] && {
    echo -e "\033[31m 开始磁盘扩容...请等待... \033[0m" 
    sleep 2;

    # 创建物理卷
    read -p "请输入需要创建的物理卷,例如(/dev/vdb): " Physical_Volume
    pvcreate $Physical_Volume 2>&1 >/dev/null
    if [ $? -ne 0 ];then
        echo -e "\033[31m 创建${Physical_Volume}错误,请检查是否存在... \033[0m"
        exit 1
    else
        echo -e "\033[32m 创建成功,物理卷为${Physical_Volume} \033[0m"
    fi

    # 将物理卷/dev/vdc加入卷组
    read -p "是否需要查看现有卷组,请输入(y/n): " VG_display
    while [ "1" -eq "1" ];do
        if [ "$VG_display" = "y" ];then
            vgs
            break
        elif [ "$VG_display" = "n" ];then
            echo -e "\033[31m 退出查看! \033[0m"
            break 
        else
            echo -e "\033[31m 您的输入有误,已退出! \033[0m"
            break
        fi
    done

    read -p "请输入要扩容的卷组名称,例如(vg_data): " Volume_Group
    vgextend $Volume_Group $Physical_Volume 2>&1 >/dev/null
    if [ $? -ne 0 ];then
        echo -e "\033[31m 输入有误,请检查是否存在... \033[0m"
        exit 1
    else
        echo -e "\033[32m 加入成功! \033[0m"
    fi
    read -p "请输入要添加的逻辑卷名称,例如(lv_data):" Logical_Volume
    echo -e "\033[32m 开始添加! \033[0m"
    lvextend -l +100%FREE -n /dev/mapper/${Volume_Group}-${Logical_Volume} 2>&1 >/dev/null
    sleep 2;
    if [ $? -ne 0 ];then
        echo -e "\033[31m 添加失败,请检查是否存在... \033[0m"
        exit 1
    else
        echo -e "\033[32m 加入成功! \033[0m"
    fi

    read -p "请选择文件类型格式,请输入{ext4|xfs} " MKFS
    if [ $MKFS = "ext4" ];then
        resize2fs /dev/mapper/${Volume_Group}-${Logical_Volume}
        echo -e "\033[32m 扩容成功,类型为${MKFS} \033[0m" 2>&1 >/dev/null
    elif [ $MKFS = "xfs" ];then
        xfs_growfs /dev/mapper/${Volume_Group}-${Logical_Volume} 2>&1 >/dev/null
        echo -e "\033[32m 扩容成功,类型为${MKFS} \033[0m"
    else
        echo -e "输入有误!"
        exit 2
    fi
    echo -e "\033[31m 磁盘分配完成,验证请用df -hT \033[0m"
    exit 0
}

# 退出

[ "$num" -eq "3" ] && {
    echo "bye!"
    exit 3
}

# 限制用户输入的必须是1,2,3
[[ ! "$num" =~ [1-3] ]] && {

    echo "序号必须输入{1|2|3}"
    exit 4  
}