温馨提示×

如何通过Cobbler管理磁盘分区

小樊
41
2025-12-25 21:54:55
栏目: 编程语言

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

一、总体思路与关键点

  • 在 Cobbler 中,磁盘分区由安装器的 Kickstart(RHEL/CentOS)或 preseed(Debian/Ubuntu)模板驱动。常见做法是:在 profile 或 system 级别为不同机型/磁盘规格维护多套分区模板,通过变量复用公共片段,必要时用 %pre/%post 做安装前后补丁。
  • 分区指令要点:
    • 使用 clearpart 清理磁盘(如:clearpart --all --initlabel)。
    • 使用 part 定义分区(如:/boot、/、swap、biosboot 等),可指定 fstype、size、grow 等。
    • 使用 autopart 让安装器自动分区(适合通用场景)。
    • 使用 raid 相关指令配合 part 做软 RAID(创建 raid.XX 分区后组装 md 设备)。
    • 引导相关:传统 BIOS 需 biosboot;UEFI 需 –fstype=efi 的 EFI 分区(大小常见为 200–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 替代手工 part 列表。
    • 若需复用网络/分区等公共片段,可在 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 的磁盘
    • 传统 ext432 位寻址下存在约 16TB 的上限;在 CentOS 6 上需升级工具并启用 64 位模式才能支持,而 CentOS 5 及以下不支持。若使用 ext4 的 –grow 去占满 >16TB 磁盘,可能出现“只能用到 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 后续编排。

0