商城首页欢迎来到中国正版软件门户

您的位置: 首页 > 文章列表 > 编程开发 > 如何通过Cobbler管理磁盘分区

如何通过Cobbler管理磁盘分区

  发布于2026-07-18 阅读(0)

扫一扫,手机访问

通过 Cobbler 管理磁盘分区的实践指南

如何通过Cobbler管理磁盘分区

一、总体思路与关键点

说到 Cobbler 管理分区,其实核心思路并不复杂:安装器的磁盘分区策略,说白了就是由 Kickstart(RHEL/CentOS)或 preseed(Debian/Ubuntu)模板来驱动的。常见的做法是,在 profile 或 system 级别为不同机型、不同磁盘规格维护多套分区模板,然后通过变量拆分公共片段,必要时再在 %pre 或 %post 阶段做些补丁工作。

那么,具体操作中有哪些关键点?

  • 清盘:用 clearpart --all --initlabel 把磁盘清理干净,这是第一步。
  • 分区定义:用 part 命令指定 /boot、/、swap、biosboot 等分区,同时可控制文件系统类型、大小以及是否允许增长。
  • 自动分区:如果需求比较通用,直接用 autopart 让安装器帮你搞定一切。
  • 软 RAID:需要创建 raid.XX 分区,然后通过 raid 指令组装成 md 设备。
  • 引导方式:传统 BIOS 必须配 biosboot 分区;UEFI 则需要一个 --fstype=efi 的 EFI 分区,大小通常在 200M 到 500M 之间。

二、RHEL/CentOS 的 Kickstart 示例

标准分区(MBR,适配多数服务器

# 清盘并初始化卷标
clearpart --all --initlabel
# 引导分区(BIOS)
part biosboot --fstype=biosboot --size=1
# 启动分区
part /boot --fstype=ext4 --size=1024
# 根分区(示例 40GB)
part / --fstype=ext4 --size=40960
# 交换分区(示例 8GB)
part swap --fstype=swap --size=8192

LVM 示例(便于后续在线扩缩)

clearpart --all --initlabel
part /boot --fstype=ext4 --size=1024
part pv.01 --fstype=lvmpv --grow --ondisk=sda
volgroup vg_root pv.01
logvol / --vgname=vg_root --size=30G --name=lv_root
logvol swap --vgname=vg_root --size=8G --name=lv_swap
logvol /data --vgname=vg_root --size=1 --grow --name=lv_data

软 RAID-5 示例

clearpart --all --initlabel
part raid.01 --fstype=raid --grow --ondisk=sda --size=1
part raid.02 --fstype=raid --grow --ondisk=sdb --size=1
part raid.03 --fstype=raid --grow --ondisk=sdc --size=1
part raid.04 --fstype=raid --grow --ondisk=sdd --size=1
part raid.05 --fstype=raid --grow --ondisk=sde --size=1
raid / --device=md0 --fstype=ext4 --level=5 raid.01 raid.02 raid.03 raid.04 raid.05

使用提示

  • 如果对分区没太细的要求,直接用 autopart 代替手工逐条定义,省时省力。
  • 想复用分区等公共配置段?可以在 ks 模板中引用 $SNIPPET('xxx'),挺方便的。

三、Ubuntu 的 preseed 示例

原子模式(自动 LVM)

这种方式最适合快速交付和通用场景:安装器会自动创建一个约 250M 的 /boot 分区,然后创建一个约 10G 的卷组,swap 分区大小接近内存大小,剩下的空间全部给 /。

手工 LVM 模式(精细控制)

# 磁盘与分区
d-i partman-auto/method string lvm
d-i partman-lvm/device_remove_lvm boolean true
d-i partman-lvm/confirm boolean true
d-i partman-lvm/confirm_nooverwrite boolean true
# 引导分区(MBR)
d-i partman-auto/expert_recipe string \
boot-root ::
256 256 256 ext2 \
$primary{ } $bootable{ } \
method{ format } format{ } \
use_filesystem{ } filesystem{ ext2 } \
mountpoint{ /boot } .
10240 10240 10240 ext4 \
$lvmok{ } lv_name{ lv_root } \
method{ format } format{ } \
use_filesystem{ } filesystem{ ext4 } \
mountpoint{ / } .
512 512 512 linux-swap \
$lvmok{ } lv_name{ lv_swap } \
method{ swap } format{ } .
5120 5120 5120 ext4 \
$lvmok{ } lv_name{ lv_www } \
method{ format } format{ } \
use_filesystem{ } filesystem{ ext4 } \
mountpoint{ /www } .
d-i partman-auto/choose_recipe select boot-root
d-i partman-partitioning/confirm_write_new_label boolean true
d-i partman/confirm_write_new_label boolean true
d-i partman/confirm_nooverwrite boolean true
d-i partman/choose_partition finish
d-i partman/confirm finish

简单说:原子模式适合“开箱即用”,而手工模式则对 /boot、/、swap、/data 等分区的大小有明确规划的场景。

四、大容量磁盘与 LVM 的注意事项

这里有两个地方需要特别留心。

  • 大于 16TB 的磁盘:传统 ext4 在 32 位寻址下存在大约 16TB 的上限。在 CentOS 6 上,得升级工具并启用 64 位模式才能支持,而 CentOS 5 及以下根本不支持。如果使用 ext4 的 --grow 去填满超过 16TB 的磁盘,可能会出现“只能用到 16TB”或者格式化异常的情况。建议优先使用 XFS,或者在装机完成后对数据盘重新分区/格式化,避免安装阶段触发 ext4 的限制。
  • LVM 与后续扩容:LVM 虽然方便在线扩容,但根分区在线扩容的可行性取决于文件系统本身的支持能力(ext4 和 xfs 的在线扩容能力差别不小)。在生产环境做变更前,务必先在测试环境验证,并准备好回滚方案。

五、安装后处理与数据盘自动化

安装完系统后,如果还有未用上的硬盘,完全可以在 %post 阶段自动完成分区、格式化和挂载。下面给一个示例脚本的思路:

%post
NUM=01
for DEVICE in $(awk '$NF ~ /sd/ && $NF !~ /[0-9]$/ {print $NF}' /proc/partitions | sort); do
    DEVICE="/dev/$DEVICE"
    # 跳过已挂载或已用作 swap 的设备
    [[ -b ${DEVICE}1 ]] && FSTYPE=$(parted -s ${DEVICE}1 print 2>/dev/null | awk '/^ / {print $5}')
    if [[ $FSTYPE == "swap" ]]; then continue; fi
    LABEL="hadoop${NUM}"
    if ! e2label ${DEVICE}1 2>/dev/null; then
        parted -s $DEVICE mklabel gpt
        parted -s $DEVICE mkpart primary ext4 0% 100%
        partprobe; sleep 3
        mkfs.ext4 -q -L "$LABEL" ${DEVICE}1
    else
        e2label ${DEVICE}1 "$LABEL"
    fi
    grep -q "LABEL=$LABEL" /etc/fstab || \
        echo "LABEL=$LABEL /$LABEL ext4 defaults,noatime,nodiratime 0 0" >>/etc/fstab
    mkdir -p "/$LABEL"
    NUM=$(printf "%02d" $((10#$NUM + 1)))
done
%end

这个脚本可以批量初始化类似 /data01、/data02 的数据盘。当然,你也可以按需改成 xfs、调整挂载选项,甚至后续用 systemd mount 单元或 Ansible 来做更灵活的编排。

本文转载于:https://www.yisu.com/ask/17428044.html 如有侵犯,请联系zhengruancom@outlook.com删除。
免责声明:正软商城发布此文仅为传递信息,不代表正软商城认同其观点或证实其描述。

热门关注