Linux分区:如何实现分区的自动化管理
导读:Linux 分区自动化管理实践 一、方案总览与选型 下表给出常见场景与工具选型,便于快速落地: 场景 推荐工具 关键要点 一次性脚本化分区、格式化、挂载 parted/sfdisk + mkfs + mount 非交互、可...
Linux 分区自动化管理实践
一、方案总览与选型
- 下表给出常见场景与工具选型,便于快速落地:
| 场景 | 推荐工具 | 关键要点 |
|---|---|---|
| 一次性脚本化分区、格式化、挂载 | parted/sfdisk + mkfs + mount | 非交互、可脚本化;大磁盘用 GPT;注意对齐与数据安全 |
| 大规模与可重复部署 | Ansible(配合 LVM 模块) | 批量执行、幂等、可回滚,适合多机标准化 |
| 安装阶段无人值守分区 | Kickstart(RHEL/CentOS)、AutoYaST(SUSE) | 安装即分区,适合新机交付 |
| 图形化与半自动 | GParted / GNOME Disks / KDE Partition Manager | 适合桌面或小规模操作,不便于批量 |
以上工具覆盖了从安装期到运维期的自动化需求,脚本方案以 parted/sfdisk 为核心,批量与标准化推荐 Ansible,安装期可用 Kickstart/AutoYaST。
二、命令行脚本自动化
-
使用 parted 全自动分区、格式化并挂载(适配大磁盘,GPT)
- 以 root 执行;2) 选择目标盘(如 /dev/sdb);3) 建 GPT 分区表并创建单一分区;4) 格式化为 ext4;5) 挂载到目录;6) 写入 /etc/fstab 使用 UUID 保证稳定性。
#!/usr/bin/env bash set -Eeuo pipefail DISK="${ 1:-/dev/sdb} " MOUNT="/data" [[ $EUID -ne 0 ]] & & { echo "请使用 root"; exit 1; } # 简单盘符校验 [[ ! -b "$DISK" ]] & & { echo "设备不存在: $DISK"; exit 2; } # 使用 parted 非交互创建 GPT 分区(整个磁盘) parted -s "$DISK" mklabel gpt parted -s "$DISK" mkpart primary ext4 0% 100% # 等待内核重读分区表 udevadm settle || sleep 2 PART="${ DISK} 1" # 若已有文件系统则跳过格式化 if ! blkid -p "$PART" > /dev/null 2> & 1; then mkfs.ext4 -F "$PART" fi mkdir -p "$MOUNT" UUID=$(blkid -s UUID -o value "$PART") # 幂等追加 fstab(避免重复) grep -qxF "UUID=$UUID $MOUNT ext4 defaults 0 2" /etc/fstab || \ echo "UUID=$UUID $MOUNT ext4 defaults 0 2" > > /etc/fstab mount -a || { echo "mount 失败,请检查 /etc/fstab"; exit 3; } echo "已挂载到 $MOUNT(UUID=$UUID)"说明:
- parted 的 -s 为非交互模式;GPT 更适合 > 2TB 磁盘;对齐默认已优化。
- 使用 UUID 而非设备名(如 /dev/sdb1)写入 fstab,避免盘符漂移导致挂载错乱。
-
使用 sfdisk 的脚本化分区示例(MBR,便于“描述即分区”)
#!/usr/bin/env bash set -Eeuo pipefail DISK="${ 1:-/dev/sdb} " [[ $EUID -ne 0 ]] & & { echo "请使用 root"; exit 1; } [[ ! -b "$DISK" ]] & & { echo "设备不存在: $DISK"; exit 2; } # 备份当前分区表 sfdisk -d "$DISK" > "${ DISK} .sfdisk.bak" # 从 stdin 描述分区:label + 一个从 1MiB 开始、占满剩余空间的 Linux 分区 sfdisk "$DISK" < < 'EOF' label: dos unit: sectors ,,83 EOF udevadm settle || sleep 2 PART="${ DISK} 1" mkfs.ext4 -F "$PART" mkdir -p /data UUID=$(blkid -s UUID -o value "$PART") grep -qxF "UUID=$UUID /data ext4 defaults 0 2" /etc/fstab || \ echo "UUID=$UUID /data ext4 defaults 0 2" > > /etc/fstab mount -a说明:
- sfdisk 适合批量与自动化,支持从标准输入读取布局;早期版本对 GPT 支持有限,复杂 GPT 场景优先用 parted/gdisk。
三、使用 LVM 获得弹性容量
- 适合需要后续扩容、快照、在线迁移等能力的场景。
说明:#!/usr/bin/env bash set -Eeuo pipefail PV="/dev/sdb" VG="data_vg" LV="data_lv" SIZE="100%FREE" # 或例如 50G MOUNT="/data" yum install -y lvm2 || apt-get update & & apt-get install -y lvm2 # 初始化并创建卷组/逻辑卷 pvcreate "$PV" vgcreate "$VG" "$PV" lvcreate -l "$SIZE" -n "$LV" "$VG" mkfs.ext4 -F "/dev/$VG/$LV" mkdir -p "$MOUNT" UUID=$(blkid -s UUID -o value "/dev/$VG/$LV") grep -qxF "UUID=$UUID $MOUNT ext4 defaults 0 2" /etc/fstab || \ echo "UUID=$UUID $MOUNT ext4 defaults 0 2" > > /etc/fstab mount -a- LVM 提供卷组、逻辑卷、快照与在线调整等能力,便于后续按需扩容与维护。
四、批量与标准化部署
- 使用 Ansible 管理 LVM(幂等、可重复)
- 安装集合:
ansible-galaxy collection install community.general - 示例 Playbook(创建 VG/LV/FS 并挂载):
说明:- hosts: storage_nodes become: yes vars: pv: /dev/sdb vg: data_vg lv: data_lv size: 100%FREE mount: /data fstype: ext4 tasks: - name: 安装 LVM 工具 package: name: lvm2 state: present - name: 初始化物理卷 community.general.lvg: vg: "{ { vg } } " pvs: "{ { pv } } " state: present - name: 创建逻辑卷 community.general.lvol: vg: "{ { vg } } " lv: "{ { lv } } " size: "{ { size } } " state: present - name: 创建文件系统 filesystem: fstype: "{ { fstype } } " dev: "/dev/{ { vg } } /{ { lv } } " - name: 创建挂载点 file: path: "{ { mount } } " state: directory mode: '0755' - name: 获取 LV UUID command: blkid -s UUID -o value "/dev/{ { vg } } /{ { lv } } " register: lv_uuid changed_when: false - name: 配置 fstab 并挂载 mount: path: "{ { mount } } " src: "UUID={ { lv_uuid.stdout } } " fstype: "{ { fstype } } " opts: defaults state: mounted- Ansible 模块具备幂等性与可回滚,适合大规模标准化交付与日常运维。
- 安装集合:
五、安装期自动化与注意事项
- 安装期无人值守分区
- Kickstart(RHEL/CentOS):在
%pre/%post或分区指令中定义分区方案,实现装机即分区。 - AutoYaST(SUSE):通过 XML 定义存储与分区,适合 SUSE 系的标准化安装。
- Kickstart(RHEL/CentOS):在
- 关键注意事项
- 始终以 root 执行;操作前确认目标盘,避免误伤系统盘(如 /dev/sda)。
- 大磁盘优先 GPT;MBR 对 > 2TB 有局限。
- 写入 /etc/fstab 建议使用 UUID,并在变更后用
mount -a校验。 - 变更前备份分区表(如
sfdisk -d /dev/sdX > backup.txt),必要时先快照或停机。 - 生产环境先在测试环境验证脚本,确保幂等与可回滚流程可靠。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: Linux分区:如何实现分区的自动化管理
本文地址: https://pptw.com/jishu/783812.html
