大量更新
This commit is contained in:
132
84-202605-北京三河测试/b-高级磁盘-多物理盘.sh
Normal file
132
84-202605-北京三河测试/b-高级磁盘-多物理盘.sh
Normal file
@@ -0,0 +1,132 @@
|
||||
#!/bin/bash
|
||||
set -euo pipefail
|
||||
|
||||
#----------------------------------------------------------
|
||||
# 用户配置部分
|
||||
#----------------------------------------------------------
|
||||
DISKS=("/dev/sda" "/dev/sdb" "/dev/sdc" "/dev/sdd") # 4块物理磁盘
|
||||
MOUNT_PATH="/data" # 挂载点路径(目录会自动创建)
|
||||
FS_TYPE="ext4" # 文件系统类型(支持 ext4/xfs,默认 ext4)
|
||||
|
||||
VG_NAME="bigdatavg" # 卷组名
|
||||
LV_NAME="biglvdata" # 逻辑卷名
|
||||
|
||||
#----------------------------------------------------------
|
||||
# 核心逻辑(建议非必要不修改)
|
||||
#----------------------------------------------------------
|
||||
|
||||
function check_prerequisites() {
|
||||
# 必须 root 权限运行检查
|
||||
[[ $EUID -ne 0 ]] && echo -e "\033[31m错误:必须使用 root 权限运行此脚本\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
|
||||
|
||||
# 磁盘存在性检查
|
||||
for disk in "${DISKS[@]}"; do
|
||||
[[ ! -b "$disk" ]] && echo -e "\033[31m错误:磁盘 $disk 不存在\033[0m" && exit 1
|
||||
done
|
||||
|
||||
# 检查 VG / LV 是否已存在,避免误操作
|
||||
if vgdisplay "$VG_NAME" >/dev/null 2>&1; then
|
||||
echo -e "\033[31m错误:卷组 $VG_NAME 已存在,请先检查环境\033[0m"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if lvdisplay "/dev/${VG_NAME}/${LV_NAME}" >/dev/null 2>&1; then
|
||||
echo -e "\033[31m错误:逻辑卷 /dev/${VG_NAME}/${LV_NAME} 已存在,请先检查环境\033[0m"
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
|
||||
function prepare_disks() {
|
||||
PARTITIONS=()
|
||||
|
||||
echo -e "\033[34m正在初始化磁盘分区...\033[0m"
|
||||
for disk in "${DISKS[@]}"; do
|
||||
echo -e "\033[34m处理磁盘: $disk\033[0m"
|
||||
|
||||
parted "$disk" --script mklabel gpt
|
||||
parted "$disk" --script mkpart primary 0% 100%
|
||||
parted "$disk" --script set 1 lvm on
|
||||
partprobe "$disk"
|
||||
|
||||
# 兼容 nvme 和普通 sd/vd 设备命名
|
||||
if [[ "$disk" =~ nvme ]]; then
|
||||
partition="${disk}p1"
|
||||
else
|
||||
partition="${disk}1"
|
||||
fi
|
||||
|
||||
# 等待分区节点出现
|
||||
udevadm settle
|
||||
sleep 1
|
||||
|
||||
[[ ! -b "$partition" ]] && echo -e "\033[31m错误:分区 $partition 未识别成功\033[0m" && exit 1
|
||||
|
||||
PARTITIONS+=("$partition")
|
||||
done
|
||||
}
|
||||
|
||||
function create_lvm() {
|
||||
echo -e "\033[34m正在创建 LVM 结构...\033[0m"
|
||||
|
||||
pvcreate "${PARTITIONS[@]}"
|
||||
vgcreate "$VG_NAME" "${PARTITIONS[@]}"
|
||||
lvcreate -y -l 100%FREE -n "$LV_NAME" "$VG_NAME"
|
||||
}
|
||||
|
||||
function format_and_mount() {
|
||||
local lv_path="/dev/${VG_NAME}/${LV_NAME}"
|
||||
|
||||
echo -e "\033[34m格式化逻辑卷...\033[0m"
|
||||
if [[ "$FS_TYPE" == "ext4" ]]; then
|
||||
mkfs.ext4 -F "$lv_path"
|
||||
else
|
||||
mkfs.xfs -f "$lv_path"
|
||||
fi
|
||||
|
||||
echo -e "\033[34m设置挂载配置...\033[0m"
|
||||
mkdir -p "$MOUNT_PATH"
|
||||
|
||||
UUID=$(blkid -s UUID -o value "$lv_path")
|
||||
[[ -z "$UUID" ]] && echo -e "\033[31m错误:未获取到逻辑卷 UUID\033[0m" && exit 1
|
||||
|
||||
# 避免重复写入 fstab
|
||||
if ! grep -q "$UUID" /etc/fstab; then
|
||||
echo "UUID=$UUID $MOUNT_PATH $FS_TYPE defaults 0 0" >> /etc/fstab
|
||||
else
|
||||
echo -e "\033[33m提示:/etc/fstab 中已存在该 UUID,跳过写入\033[0m"
|
||||
fi
|
||||
|
||||
mount -a
|
||||
}
|
||||
|
||||
function verify_result() {
|
||||
echo -e "\n\033[1;36m最终验证结果:\033[0m"
|
||||
|
||||
echo -e "\n\033[1;36m1. 查看块设备和 LVM 结构:\033[0m"
|
||||
lsblk -f
|
||||
|
||||
echo -e "\n\033[1;36m2. 查看挂载结果:\033[0m"
|
||||
df -hT "$MOUNT_PATH"
|
||||
|
||||
echo -e "\n\033[1;36m3. 查看 VG/LV 信息:\033[0m"
|
||||
vgs
|
||||
lvs
|
||||
pvs
|
||||
}
|
||||
|
||||
#----------------------------------------------------------
|
||||
# 主执行流程
|
||||
#----------------------------------------------------------
|
||||
check_prerequisites
|
||||
prepare_disks
|
||||
create_lvm
|
||||
format_and_mount
|
||||
verify_result
|
||||
|
||||
echo -e "\n\033[32m操作执行完毕,请仔细核查上述输出信息\033[0m"
|
||||
Reference in New Issue
Block a user