通过 Cobbler 管理磁盘分区的实践指南
一、总体思路与关键点
二、RHEL/CentOS 的 Kickstart 示例
# 清盘并初始化卷标
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
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
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
三、Ubuntu 的 preseed 示例
# 磁盘与分区
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
四、大容量磁盘与 LVM 的注意事项
五、安装后处理与数据盘自动化
%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