阅读量:2
CentOS 分区自动化运维实践
一 自动化分区与挂载脚本
- 适用场景:新磁盘初始化、数据盘快速上线、批量标准化挂载。
- 核心要点:非交互式分区(如 fdisk 的 here-document)、分区后执行 partprobe 刷新内核分区表、格式化(建议 XFS)、挂载到目标目录、写入 /etc/fstab 使用 UUID 保证稳定性,并做 idempotent 幂等判断与卸载保护。
- 示例脚本(将 /dev/sdb 整盘创建一个分区并挂载到 /data,可按需改为 LVM):
#!/usr/bin/env bash
set -Eeuo pipefail
DISK="${1:-/dev/sdb}"
MOUNT_POINT="${2:-/data}"
FS_TYPE="${3:-xfs}"
FSTAB="/etc/fstab"
# 幂等:若已挂载则退出
if findmnt -n -o TARGET "$MOUNT_POINT" >/dev/null 2>&1; then
echo "[OK] $MOUNT_POINT already mounted."
exit 0
fi
# 幂等:若设备不存在则退出
if [[ ! -b "$DISK" ]]; then
echo "[ERROR] $DISK not found."
exit 2
fi
# 若存在旧分区表,先清理(危险!确保 DISK 非系统盘)
wipefs -af "$DISK" || true
sgdisk --zap-all "$DISK" || true
# 非交互创建单个分区(整盘)
{
echo n
echo p
echo 1
echo
echo
echo w
} | fdisk "$DISK"
# 刷新分区表
partprobe "$DISK"
sleep 2
PART="${DISK}1"
# 格式化
if [[ "$FS_TYPE" == "xfs" ]]; then
mkfs -t xfs -f "$PART"
else
mkfs -t ext4 -F "$PART"
fi
# 挂载点
mkdir -p "$MOUNT_POINT"
# 获取 UUID 并写入 fstab(避免设备名漂移)
UUID=$(blkid -s UUID -o value "$PART")
grep -qE "^UUID=$UUID" "$FSTAB" || echo "UUID=$UUID $MOUNT_POINT $FS_TYPE defaults 0 0" >> "$FSTAB"
# 挂载
mount "$MOUNT_POINT"
echo "[OK] $PART -> $MOUNT_POINT ($FS_TYPE), fstab updated."
- 使用方式:
- 新建分区并挂载:
./setup_disk.sh /dev/sdb /data xfs - 仅当目录已存在且需变更时,先卸载:
umount /data && ./setup_disk.sh /dev/sdb /data xfs
- 新建分区并挂载:
- 说明:上述流程与常见自动化脚本思路一致(如通过 fdisk 非交互创建分区、格式化、写入 fstab 实现开机挂载),可按业务替换为 ext4 或 xfs。
二 扩容已有分区与 LVM 自动化
-
场景 A:新增数据盘并加入 LVM(推荐,便于后续在线扩容)
- 识别新盘:
echo "- - -" > /sys/class/scsi_host/host0/scan(无需重启即可发现新盘)。 - 分区:
(echo n; echo p; echo 1; echo; echo; echo w) | fdisk /dev/sdb - 创建 PV:
pvcreate /dev/sdb1 - 扩展 VG(假设卷组名为 centos):
vgextend centos /dev/sdb1 - 扩展 LV(按需选择 root 或 data):
lvextend -l +100%FREE /dev/centos/root - 在线扩容文件系统:
- XFS:
xfs_growfs / - ext4:
resize2fs /dev/centos/root
以上步骤适合“根分区空间不足、通过加盘扩容”的典型需求;新增盘识别与热插拔扫描可用 SCSI 扫描方式实现。
- XFS:
- 识别新盘:
-
场景 B:已有分区在线扩容(风险高,务必先备份)
- 适用于底层支持在线扩容的块设备与文件系统(如 LVM + XFS/ext4)。
- 基本思路:先扩展底层分区/PV,再扩展 LV,最后扩展文件系统;每一步都需确认设备状态与可用空间,避免数据损坏。
三 批量与持续交付
- 批量执行:结合 Ansible 的
script或shell模块在多台主机上分发并执行分区脚本;对生产环境建议先在测试机验证,脚本内做好幂等与回滚逻辑。 - 无人值守安装阶段:使用 Kickstart 在系统安装时自动完成分区(适合大规模标准化交付)。示例片段:
clearpart --all --initlabel
part /boot --fstype="xfs" --ondisk=sda --size=1024
part pv.01 --fstype="lvmpv" --ondisk=sda --size=51200
volgroup centos --pesize=4096 pv.01
logvol / --fstype="xfs" --size=45056 --name=root --vgname=centos
logvol swap --fstype="swap" --size=4096 --name=swap --vgname=centos
- 说明:Kickstart 可在安装流程中定义分区、网络、包组与 %post 脚本,适合“装机即标准化分区”的自动化场景。
四 容量监控与告警自动化
- 使用 cron 定期巡检磁盘使用率并邮件告警(阈值可按需调整):
# 每10分钟检查,超过阈值(如80%)则告警
*/10 * * * * root df -Ph | awk 'NR>1 {gsub(/%/,"",$5); if($5>=80) print "WARN: "$0}' | mail -s "Disk usage alert on $(hostname)" ops@example.com
- 也可针对特定挂载点精细化监控与告警,减少噪音。上述做法简单可靠,适合大多数生产环境的容量预警。
五 安全与回滚建议
- 操作前务必:备份关键数据、确认目标磁盘非系统盘、在维护窗口执行、对脚本与命令做 dry-run 验证。
- 建议:优先采用 LVM 管理数据盘,便于后续扩容与快照;/etc/fstab 使用 UUID 而非设备名;变更后使用
mount -o remount或systemctl daemon-reload验证,再观察业务状态。 - 风险提示:分区、格式化与扩容为高风险操作,可能造成数据丢失;请在充分评估与备份的前提下执行,必要时先在测试环境演练。
以上就是关于“centos分区如何进行自动化运维”的相关介绍,筋斗云是国内较早的云主机应用的服务商,拥有10余年行业经验,提供丰富的云服务器、租用服务器等相关产品服务。云服务器资源弹性伸缩,主机vCPU、内存性能强悍、超高I/O速度、故障秒级恢复;电子化备案,提交快速,专业团队7×24小时服务支持!
简单好用、高性价比云服务器租用链接:https://www.jindouyun.cn/product/cvm