Kickstart自动化安装过程中自动选择较小的磁盘安装操作系统
需求
在实际生成操作过程中,一般会遇到物理服务器存在多块盘的情况。
安装过程中,磁盘的标签是随机分配的,并不是空间较小的盘,就会使用较小的磁盘标签
而需求往往需要将操作系统安装到较小的盘中作为系统盘
问题分析
- 需要判断出当前物理机存在磁盘的数量
- 需要选举出较小的磁盘
- 指定较小磁盘的磁盘标签进行自动化安装
处理办法
- Linux提供了
list-harddrives
变量,用于保存当前机器的磁盘情况- 该变量的格式为:
echo $(list-harddrives)
磁盘标签1 磁盘1大小 磁盘标签2 磁盘2大小 ...
- 可以使kickstart提供的
%per
脚本输出最小的磁盘的标签,用于获取指定的磁盘%per
脚本:- kickstart中用于在安装操作系统前执行的脚本
- 此处脚本执行过程中,是在
chroot
环境下,部分命令和参数无法使用,需要注意
- 同时将创建磁盘和vg的命令输出到临时文件中
- 使用kickstart的include功能执行命令
- 案例如下:
# 假设 list-harddrives 命令的输出是这样的:sda 20480 sdb 10240
output=$(list-harddrives)
# 初始化最小磁盘大小和名称
min_size=999999999999
min_disk=""
# 遍历输出中的每个磁盘信息
# 使用 set -- $output 将输出分割为位置参数
set -- $output
while (( "$#" )); do
disk=$1
shift
size=$1
size_int=${size%.*}
shift
# 比较大小,更新最小磁盘信息
if (( size_int < min_size )); then
min_size=$size_int
min_disk=$disk
fi
done
# 选举出最小的磁盘标签
# 将最小磁盘标签引用到以下的命令中
# 将命令输出到/tmp/part中
echo "ignoredisk --only-use=${min_disk}" >> /tmp/part
# Partition clearing information
echo "clearpart --all --initlabel" >> /tmp/part
# Disk partitioning information
echo "part /boot --fstype="xfs" --ondisk=${min_disk} --size=1024" >> /tmp/part
echo "part /boot/efi --fstype="efi" --ondisk=${min_disk} --size=600 --fsoptions="umask=0077,shortname=winnt"" >> /tmp/part
echo "part pv.119 --fstype="lvmpv" --ondisk=${min_disk} --size=1 --grow" >> /tmp/part
echo "volgroup vg00 --pesize=4096 pv.119" >> /tmp/part
echo "logvol swap --fstype="swap" --size=32768 --name=lvswap --vgname=vg00" >> /tmp/part
echo "logvol / --fstype="xfs" --size=71676 --name=lvroot --vgname=vg00" >> /tmp/part
echo "logvol /home --fstype="xfs" --size=61440 --name=lvhome --vgname=vg00" >> /tmp/part
echo "logvol /usr --fstype="xfs" --size=71676 --name=lvusr --vgname=vg00" >> /tmp/part
echo "logvol /var --fstype="xfs" --size=153596 --name=lvvar --vgname=vg00" >> /tmp/part
%end
# 将临时文件中的命令包含到kickstart配置中
# include diskinfo
zerombr
%include /tmp/part