大量更新
This commit is contained in:
90
998-常用脚本/a-部署脚本/b-高级磁盘-disk.sh
Normal file
90
998-常用脚本/a-部署脚本/b-高级磁盘-disk.sh
Normal file
@@ -0,0 +1,90 @@
|
||||
#!/bin/bash
|
||||
set -e
|
||||
|
||||
# =========================================================
|
||||
# 用户配置部分
|
||||
# =========================================================
|
||||
DISK="/dev/nvme0n1" # 要操作的物理磁盘(例如 /dev/sdb 或 /dev/nvme0n1)
|
||||
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
|
||||
|
||||
# 核心修复:兼容 NVMe 和传统 SCSI/SATA 磁盘的分区命名规则
|
||||
# 如果物理磁盘名称以数字结尾 (如 nvme0n1),分区名加 'p' (nvme0n1p1)
|
||||
# 如果以字母结尾 (如 sdb),分区名直接加数字 (sdb1)
|
||||
if [[ "$DISK" =~ [0-9]$ ]]; then
|
||||
partition="${DISK}p1"
|
||||
else
|
||||
partition="${DISK}1"
|
||||
fi
|
||||
|
||||
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"
|
||||
# 增加极短暂延时,确保NVMe设备分区节点已在 /dev/ 下成功生成
|
||||
sleep 2
|
||||
|
||||
echo -e "\033[34m正在创建LVM结构 ($partition)...\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")
|
||||
|
||||
# 备份 fstab 防呆,方便回滚
|
||||
cp /etc/fstab /etc/fstab.bak_$(date +%Y%m%d%H%M%S)
|
||||
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 -TH "$MOUNT_PATH"
|
||||
}
|
||||
|
||||
# =========================================================
|
||||
# 主执行流程
|
||||
# =========================================================
|
||||
check_prerequisites
|
||||
prepare_disk
|
||||
format_and_mount
|
||||
verify_result
|
||||
|
||||
echo -e "\n\033[32m操作执行完毕,请仔细核查上述输出信息\033[0m"
|
||||
Reference in New Issue
Block a user