温馨提示×

Cobbler如何处理磁盘分区问题

小樊
40
2025-12-06 04:57:37
栏目: 编程语言

Cobbler 处理磁盘分区的机制概览 Cobbler 并不内置磁盘分区器,它通过为不同发行版提供相应的自动化安装应答文件来驱动分区:RHEL/CentOS 系列使用 Kickstart,Ubuntu/Debian 使用 Preseed。在 Kickstart 中通过 part/partition、clearpart、volgroup/logvol、bootloader、zerombr 等指令完成标准分区、LVM、清除磁盘与引导配置;在 Preseed 中通过 partman 系列变量/配方实现自动或手工分区与 LVM。Cobbler 负责分发这些应答文件与安装源,从而实现无人值守安装与一致的磁盘布局。

RHEL CentOS 系列 Kickstart 分区要点

  • 常用指令与用途
    • clearpart --all --initlabel:清空目标磁盘并初始化磁盘标签(新盘常用)。
    • part /boot --fstype=xfs --size=1024:创建 /boot 分区,示例大小 1GB,文件系统 XFS
    • part swap --fstype=swap --size=2048:创建 swap 分区,示例大小 2GB;也可使用 –recommended 让安装程序自动按内存给出建议值。
    • part / --fstype=xfs --grow --size=1:创建根分区并“占满剩余空间”(grow)。
    • volgroup vg00 --pesize=4096 pv.01:创建卷组(LVM)。
    • logvol /var --vgname=vg00 --name=var --fstype=xfs --size=20480:在卷组中创建逻辑卷。
    • bootloader --location=mbr --boot-drive=sda:安装引导至 MBR,指定启动盘 /dev/sda
    • zerombr:清零 MBR,避免旧引导干扰。
    • 目标盘限定:使用 –only-use=sda 仅使用指定磁盘,避免多盘歧义。
  • 典型片段示例
    • 标准分区 + LVM 的最小可用组合(可按需增减分区与大小):
      zerombr
      clearpart --all --initlabel
      ignoredisk --only-use=sda
      bootloader --location=mbr --boot-drive=sda
      
      part /boot --fstype=xfs --size=1024
      part swap  --fstype=swap --size=2048
      part pv.01 --size=1 --grow
      
      volgroup vg00 --pesize=4096 pv.01
      logvol /    --vgname=vg00 --name=root --fstype=xfs --size=10240
      logvol /var  --vgname=vg00 --name=var  --fstype=xfs --size=20480
      
    • 说明:Kickstart 的 –grow 会将剩余空间分配给指定分区;LVM 场景下通常将 pv.01 设为 grow,再把根或数据逻辑卷设为 grow。

Ubuntu Debian 系列 Preseed 分区要点

  • 自动 LVM(guided)
    • 通过 partman-auto/method=lvm 启用 LVM;设置 partman-auto-lvm/new_vg_name=vg00 指定卷组名;用 partman-auto/guided_size=10GB50% 控制卷组占用磁盘比例;确认写入与覆盖提示即可完成全自动分区。
  • 手工配方(expert_recipe)
    • 通过 partman-auto/expert_recipe 精确描述分区与 LVM,例如:
      d-i partman-auto/method string lvm
      d-i partman-lvm/device_remove_lvm boolean true
      d-i partman-md/device_remove_md boolean true
      d-i partman-lvm/confirm boolean true
      d-i partman-auto-lvm/new_vg_name string vg00
      d-i partman-auto/choose_recipe select boot-root
      
      d-i partman-auto/expert_recipe string \
        boot-root :: \
          256 50 256 ext2 \
            $primary{ } $bootable{ } \
            method{ format } format{ } \
            use_filesystem{ } filesystem{ ext2 } \
            mountpoint{ /boot } \
          . \
          10240 60 10240 ext4 \
            $defaultignore{ } $lvmok{ } \
            lv_name{ root } \
            method{ format } format{ } \
            use_filesystem{ } filesystem{ ext4 } \
            mountpoint{ / } \
          . \
          512 60 512 swap \
            $defaultignore{ } $lvmok{ } \
            lv_name{ swap } \
            method{ swap } format{ } \
          . \
          5120 70 5120 ext4 \
            $defaultignore{ } $lvmok{ } \
            lv_name{ www } \
            method{ format } format{ } \
            use_filesystem{ } filesystem{ ext4 } \
            mountpoint{ /www } \
          .
      d-i partman/choose_partition select Finish partitioning and write changes to disk
      d-i partman-lvm/confirm_nooverwrite boolean true
      d-i partman/confirm_nooverwrite boolean true
      
    • 要点:设置 $lvmok{ } 标记参与 LVM 的分区;用 lv_name 指定逻辑卷名;最后确认写入与“不覆盖”提示。

常见场景与注意事项

  • 多盘与指定盘
    • 建议在 Kickstart 中使用 ignoredisk --only-use=sda 明确目标盘;必要时用 –ondisk=sdb 强制在指定磁盘上创建分区,避免安装器在多盘环境下选错盘。
  • 大容量磁盘与文件系统
    • 当单盘或卷超过 16TB 时,ext4 的默认 32 位寻址会受限,可能出现“只能识别到约 16TB”或格式化异常。推荐方案:
      • 直接使用 XFS(对大容量更友好);
      • 或先按 ext4 装机,再迁移数据后重分区为大容量(停机窗口内操作)。
  • LVM 与灵活扩容
    • 通过 volgroup/logvol 或 Preseed 的 lvmok 配方,将需要后期弹性扩展的逻辑卷(如 //var)设为 grow,便于后续在线扩容。
  • 交换分区策略
    • 可使用 –recommended 自动给出 swap 大小;传统经验可按内存区间设置下限(如 <=4G 至少 4G、4–16G 至少 8G、16–64G 至少 16G、64–256G 至少 32G),容器/内存充裕场景可减小或不配 swap(如 Kubernetes 节点通常禁用 swap)。

0