85 lines
2.7 KiB
Bash
85 lines
2.7 KiB
Bash
#!/bin/bash
|
||
set -e
|
||
|
||
# 用户配置部分
|
||
DISK="/dev/sdb" # 要操作的物理磁盘(请根据实际情况修改)
|
||
MOUNT_PATH="/var/lib/docker" # 挂载点路径(目录会自动创建)
|
||
FS_TYPE="ext4" # 文件系统类型(支持ext4/xfs,默认ext4)
|
||
|
||
#----------------------------------------------------------
|
||
# 核心逻辑(建议非必要不修改)
|
||
#----------------------------------------------------------
|
||
|
||
function check_prerequisites() {
|
||
# 必须root权限运行检查
|
||
[[ $EUID -ne 0 ]] && echo -e "\033[31m错误:必须使用root权限运行此脚本\033[0m" && exit 1
|
||
|
||
# 磁盘存在性检查
|
||
[[ ! -b "$DISK" ]] && echo -e "\033[31m错误:磁盘 $DISK 不存在\033[0m" && exit 1
|
||
|
||
# 文件系统类型校验
|
||
if [[ "$FS_TYPE" != "ext4" && "$FS_TYPE" != "xfs" ]]; then
|
||
echo -e "\033[31m错误:不支持的磁盘格式 $FS_TYPE,仅支持 ext4/xfs\033[0m"
|
||
exit 1
|
||
fi
|
||
}
|
||
|
||
function prepare_disk() {
|
||
local partition="${DISK}1"
|
||
|
||
echo -e "\033[34m正在初始化磁盘分区...\033[0m"
|
||
parted "$DISK" --script mklabel gpt
|
||
parted "$DISK" --script mkpart primary 0% 100%
|
||
parted "$DISK" --script set 1 lvm on
|
||
partprobe "$DISK" # 确保系统识别新分区表
|
||
|
||
echo -e "\033[34m正在创建LVM结构...\033[0m"
|
||
pvcreate "$partition"
|
||
vgcreate datavg "$partition"
|
||
lvcreate -y -l 100%FREE -n lvdata datavg
|
||
}
|
||
|
||
function format_and_mount() {
|
||
echo -e "\033[34m格式化逻辑卷...\033[0m"
|
||
if [[ "$FS_TYPE" == "ext4" ]]; then
|
||
mkfs.ext4 -F "/dev/datavg/lvdata"
|
||
else
|
||
mkfs.xfs -f "/dev/datavg/lvdata"
|
||
fi
|
||
|
||
echo -e "\033[34m设置挂载配置...\033[0m"
|
||
mkdir -p "$MOUNT_PATH"
|
||
UUID=$(blkid -s UUID -o value "/dev/datavg/lvdata")
|
||
echo "UUID=$UUID $MOUNT_PATH $FS_TYPE defaults 0 0" | tee -a /etc/fstab >/dev/null
|
||
mount -a
|
||
}
|
||
|
||
function verify_result() {
|
||
echo -e "\n\033[1;36m最终验证结果:\033[0m"
|
||
lsblk -f "$DISK"
|
||
echo -e "\n磁盘空间使用情况:"
|
||
df -hT "$MOUNT_PATH"
|
||
}
|
||
|
||
# 主执行流程
|
||
check_prerequisites
|
||
prepare_disk
|
||
format_and_mount
|
||
verify_result
|
||
|
||
echo -e "\n\033[32m操作执行完毕,请仔细核查上述输出信息\033[0m"
|
||
|
||
|
||
|
||
#请写一个shell脚本,脚本前面有变量可以设置 物理磁盘名称 挂载点路径 磁盘格式化的形式,脚本实现如下的功能
|
||
#1.将物理磁盘的盘符修改为gpt格式
|
||
#2.将物理磁盘全部空间创建一个分区,分区格式为lvm
|
||
#3.将分区分配给逻辑卷datavg
|
||
#4.将datavg所有可用的空间分配给逻辑卷lvdata
|
||
#5.将逻辑卷格式化为变量磁盘格式化的形式(支持xfs和ext4的格式,默认为ext4)
|
||
#6.创建变量挂载点路径
|
||
#7.写入/etc/fatab,将逻辑卷挂载到变量挂载点,执行全部挂在操作
|
||
#8.执行lsblk和df -TH查看分区是否正确挂载
|
||
|
||
|