任意多个磁盘时的kickstart配置方法

最近工作遇到一个需求:当机器中存在任意多个磁盘时,kickstart配置文件应该如何编写?
我查询了一些资料,得到的结果大多是针对特定数量的磁盘的配置(比如,2个,3个)。 那么假如因为某些原因,在安装系统时,不知道有多少块磁盘,kickstart配置如何编写呢? 或者说,有没有一种kickstart配置方法,能适应任意多个磁盘呢?

带着这个问题,我总结出一种方法,可以适用任意多个磁盘的场景。
先展示一下完整的ks文件内容,其中各个配置的含义不是本文讨论的范围,这里就不赘述了。

#version=DEVEL

url  --url=http://ipxe.server/os/openeuler2203
text
firstboot --enable  
keyboard --vckeymap=us --xlayouts='us'
lang en_US.UTF-8

rootpw --iscrypted $6$NJ5Fs0ISKECuHT.G$vPG.17ll3Sc05Fb6kY1OawQS0sk6ydIzEpIcX/6ekiMG5kEshblqkSkhfbcDTz7DC9xkLqSWtEkSWHTeyseSZ/

services --disabled="chronyd"

timesource --ntp-disable
timezone Asia/Shanghai --utc

%include  /tmp/part
shutdown

%packages
@^minimal-environment
tar
%end

%addon com_redhat_kdump --disable --reserve-mb='auto'

%end


%pre
#!/bin/sh

#set sda 61057.3359375 sdb 476940.023438 sdc 30524.0 mmcblk0boot0 30524.0
set $(list-harddrives)

disk_info=("$@")
let disk_num=$#/2
disk_name=()
disk_size=()

for i in "${!disk_info[@]}"
do
    if (( $i % 2 == 1 )); then
        disk_size+=("${disk_info[i]}")
    else
        if [[ ${disk_info[i]} == mmcblk0* ]]; then
            disk_name+=("${disk_info[i]:0:7}")
        else
            disk_name+=("${disk_info[i]}")
        fi
    fi
done

echo "bootloader --append=\" crashkernel=auto\" --location=mbr --driveorder=${disk_name[0]}" > /tmp/part
disk_names=""
for ((i=0;i< ${disk_num};i++))
do   
    if (( $i ==0 )); then
        disk_names+="${disk_name[$i]}"
    else
        disk_names+=",${disk_name[$i]}"
    fi
done

echo "clearpart --drives=${disk_names} --all --initlabel" >> /tmp/part

disk_size0=`echo ${disk_size[0]} | cut -d "." -f 1`
if [ $disk_size0 -gt 2050000 ]; then
    echo "part biosboot --fstype=biosboot --size=1" >> /tmp/part
fi

echo "ignoredisk --only-use=${disk_names}" >> /tmp/part
echo "part /boot --fstype=\"xfs\" --ondisk=${disk_name[0]} --size=1024" >> /tmp/part

pv=""
for ((i=0;i< ${disk_num};i++))
do
    echo "part pv.${i} --size=1 --ondisk=${disk_name[$i]} --grow" >> /tmp/part
    pv+=" pv.${i}"
done
echo "volgroup openeuler --pesize=32768 $pv" >> /tmp/part
echo "logvol /var  --fstype=\"xfs\"  --size=8192  --name=var --vgname=openeuler" >> /tmp/part
echo "logvol swap  --fstype=\"swap\" --size=100   --recommended --name=swap --vgname=openeuler" >> /tmp/part
echo "logvol /     --fstype=\"xfs\"  --size=20480 --name=root --vgname=openeuler" >> /tmp/part
echo "logvol /data --fstype=\"xfs\"  --size=1   --grow --name=data --vgname=openeuler" >> /tmp/part
%end
%post

%end

其中的关键是:%include 以及 %pre 部分。

%include 部分表明此处插入一段引用,引用的具体内容为,/tmp/part 文件中的内容。
而 %pre 部分就是往/tmp/part 文件中写入有关磁盘划分的配置。%pre部分本质上是一段shell 脚本。但是由于kickstart的执行是在chroot的模式下进行的,有很多限制。所以,如何在有限制的情况下编写这段shell脚本成了问题的关键。

list-harddrives

%pre 部分,最关键的一句是“set $(list-harddrives)”,这个命令有什么作用呢?要回答这个问题,要先看list-harddrives 返回什么?
根据https://anaconda-installer.readthedocs.io/en/latest/list-harddrives.html 的描述,返回的内容是:
在这里插入图片描述
哈哈,这里就可以获得所有硬盘驱动的信息,有了这些信息,是不是硬盘数量,名称,大小,就全都有了。

通过set的方式,间接的将这些硬盘信息,作为参数,供后面的shell脚本使用。这样你就可以实现,任何你想要的磁盘配置效果了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/194856.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

opencv-医学图像预处理

医学图像预处理通常需要针对特定任务和数据集的特点进行定制。以下是一些常见的医学图像预处理步骤&#xff0c;可以使用OpenCV以及其他相关库来实现&#xff1a; 导入相关的库 import cv2 import matplotlib.pyplot as plt1. 读取图像 image cv2.imread(r"C:\Users\m…

[ CSS ] 内容超出容器后 以...省略

内容超出容器后 以…省略 当前效果 代码 <template><div class"box">有志者&#xff0c;事竟成&#xff0c;破釜沉舟&#xff0c;百二秦关终属楚; 有心人&#xff0c;天不负&#xff0c;卧薪尝胆&#xff0c;三千越甲可吞吴</div> </templa…

ESP32-Web-Server编程- JS 基础 4

ESP32-Web-Server编程- JS 基础 4 概述 HTML 内联事件处理器&#xff0c;你永远不应该使用 HTML 事件处理器属性——因为那些已经过时了&#xff0c;使用它们是不好的做法。 在前端编程中&#xff0c;除了将期望发生的事件写为 JS 文件外&#xff0c;还可以使用一些组件自带…

misc:Banmabanma

题目 下载附件之后&#xff0c;里面是一张图片 身上的条纹很像二维码&#xff0c;扫扫看看 得到flag

【开源】基于Vue+SpringBoot的学校热点新闻推送系统

项目编号&#xff1a; S 047 &#xff0c;文末获取源码。 \color{red}{项目编号&#xff1a;S047&#xff0c;文末获取源码。} 项目编号&#xff1a;S047&#xff0c;文末获取源码。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 新闻类型模块2.2 新闻档案模块2.3 新…

基于单片机体温心率脉搏检测仪系统设计

**单片机设计介绍&#xff0c; 基于单片机体温心率脉搏检测仪系统设计 文章目录 一 概要二、功能设计设计思路 三、 软件设计原理图 五、 程序六、 文章目录 一 概要 基于单片机体温心率脉搏检测仪是一种用于检测人体体温、心率和脉搏等基本生理指标的医疗设备。下面是一个简要…

js闭包的必要条件及创建和消失(生命周期)

>创建闭包的必要条件&#xff1a; 1.函数嵌套 2.内部函数引用外部函数的变量 3.将内部函数作为返回值返回 >闭包是什么&#xff1f; 就是可以访问外部函数&#xff08;作用域&#xff09;中变量的内部函数 > 闭包是什么时候产生的&#xff1f; - 当调用外部函数…

买护眼台灯,中国10个家庭的书桌上7个用书客,这里面有你家吗?

经过疫情后&#xff0c;护眼灯赫然成为灯具中的最大占比&#xff0c;对儿童青少年和家长来说&#xff0c;护眼台灯更是书桌上必不可少的一员&#xff0c;成为了保护视力健康的一大帮手&#xff01;但市场的激烈竞争&#xff0c;低价台灯质量堪忧&#xff1b;高价台灯溢价严重&a…

【C/PTA —— 12.指针1(课外实践)】

C/PTA —— 12.指针1&#xff08;课外实践&#xff09; 一.函数题6-1 删除字符串中数字字符6-2 找最大值及其下标6-3 求两数平方根之和6-4 求一组数中的最大值、最小值和平均值6-5 两个4位正整数的后两位互换6-6 判断回文字符串 二.程序题7-1 求矩阵每行元素的和 一.函数题 6-…

用Python分析了波周杰伦,还做了数据可视化

本案例中的歌词数据来自中文歌词数据库。 这个数据库提供了华语歌手的歌曲及歌词信息&#xff0c;数据以 JSON 格式存储。 为了尽量完整地呈现从原始数据到可视化的过程&#xff0c;接下来我们会先简单讲解数据的预处理过程&#xff0c;即如何将 JSON 数据转化为Excel 格式&a…

activate jrebel JRebel激活过程

1.下载反向代理 地址&#xff1a;https://pan.baidu.com/s/1wklvDtyrSBXE4I6lKCxXBg?pwdidos 下载完后双击运行 2.在idea中如下步骤点击&#xff1a;File ——> Setting... ——> JRebel ——> Activate now 填入Team URL 1.http://127.0.0.1:8888/uuid //这个…

chatglm3 vllm部署推理;api访问使用

用fastchat部署暂时有各种问题,参考:https://github.com/lm-sys/FastChat/pull/2622 本篇用vllm运行测试可以使用 1、vllm运行 python -m vllm.entrypoints.api_server --model /***/chatglm/chatglm3-6b/

汽车功能安全ISO26262

一、功能安全基本概念及功能安全管理 什么是功能安全 相关标准&#xff1a; 现状&#xff1a; 功能安全的目的和范围&#xff1a; 总体框架&#xff1a; 基本定义&#xff1a;

【刷题笔记】H指数||数组||二分查找的变体

H指数 1 题目描述 https://leetcode.cn/problems/h-index/ 给你一个整数数组 citations &#xff0c;其中 citations[i] 表示研究者的第 i 篇论文被引用的次数。计算并返回该研究者的 h 指数。 根据维基百科上 h 指数的定义&#xff1a;h 代表“高引用次数” &#xff0c;一…

招募引流模式是实体门店吸引顾客的一种有效策略

在如今激烈的市场竞争和庞大的客户需求中&#xff0c;应该采取什么样的方式来应对&#xff0c;才能找到自己的一席之地。招募引流模式是实体门店吸引顾客的一种有效策略&#xff0c;通常招募体验官或合作伙伴&#xff0c;让他们协助门店进行推广活动&#xff0c;达到增加客流量…

【代码】微电网两阶段鲁棒优化经济调度方法(完美复现)matlab-yalmip-cplex/gurobi

程序名称&#xff1a;两阶段鲁棒优化—微电网两阶段鲁棒优化经济调度方法_刘一欣 实现平台&#xff1a;matlab-yalmip-cplex/gurobi 简介&#xff1a;针对微电网内可再生能源和负荷的不确定性&#xff0c;建立了 min-max-min 结构的两阶段鲁棒优化模型&#xff0c;可得到最恶…

图解Redis适用场景

Redis以其速度而闻名。 1 业务数据缓存 1.1 通用数据缓存 string&#xff0c;int&#xff0c;list&#xff0c;map。Redis 最常见的用例是缓存对象以加速 Web 应用程序。 此用例中&#xff0c;Redis 将频繁请求的数据存储在内存。允许 Web 服务器快速返回频繁访问的数据。这…

selenium已知一个元素定位同级别的另一个元素

1.需求与实际情况 看下图来举例 &#xff08;1&#xff09;需求 想点击test22&#xff08;即序号-第9行&#xff09;这一行中右边的“复制”这一按钮 &#xff08;2&#xff09;实际情况 只能通过id或者class定位到文件名这一列的元素&#xff0c;而操作这一列的元素是不…

C++ : 友元(未完结)

不能从外部访问类的私有数据成员和方法&#xff0c;但这条规则不适用于友元类和友元函数。要声明友元 类或友元函数&#xff0c;可使用关键字 friend&#xff0c;通过让函数成为类的友元&#xff0c;可以赋予该函数与类的成员函数 同的访问权限。 生活中你的家有客厅 (Public)…

使用最小花费爬楼梯(力扣LeetCode)动态规划

使用最小花费爬楼梯 题目描述 给你一个整数数组 cost &#xff0c;其中 cost[i] 是从楼梯第 i 个台阶向上爬需要支付的费用。一旦你支付此费用&#xff0c;即可选择向上爬一个或者两个台阶。 你可以选择从下标为 0 或下标为 1 的台阶开始爬楼梯。 请你计算并返回达到楼梯顶…