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

news2024/11/18 6:00:38

最近工作遇到一个需求:当机器中存在任意多个磁盘时,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脚本使用。这样你就可以实现,任何你想要的磁盘配置效果了。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

HarmonyOS 数据持久化 Preferences 如何在页面中对数据进行读写

背景介绍 最近在了解并跟着官方文档尝试做一个鸿蒙app 小demo的过程中对在app中保存数据遇到些问题 特此记录下来 这里的数据持久化以 Preferences为例子展开 废话不多说 这里直接上节目(官方提供的文档示例:) 以Stage模型为例 1.明确preferences的类型 import data_prefer…

类 —— 友元、常/静态成员函数

类 类的大小 和结构体大小求法一致。但需注意&#xff0c;普通空类也会占用 1 字节大小&#xff0c;因为普通空类可以实例化对象。 而 抽象空类占 4 字节&#xff08;32 位机中&#xff09;&#xff0c;因为抽象空类中含有虚指针&#xff08;含有虚函数的非抽象空类同理&am…

云原生实战课大纲<2>

我们pod的数据挂载文件可以使用 pv-pvc的方式 1. 创建pv池 2. 在pv池中创建pv&#xff0c;并且设置pv的模式 3. 编写pod 写对应的pvc 申请书 就可以了这就是我们k8s中的pv和pvc 基于pv池创建pv的时候会有容量限制呢么关于配置呢&#xff0c;我们以前会有这种场景 比如说在dock…

试题与研究编辑部试题与研究杂志社试题与研究杂志2023年第36期目录

试题与研究编辑部试题与研究杂志社试题与研究杂志2023年第36期目录 教海纵横 高中生物教学中启发式教学方法的应用 买玲; 1-3 初中文言文教学传承传统文化精神的策略探索 张志静; 4-6《试题与研究》投稿&#xff1a;cn7kantougao163.com 信息化背景下初中地理高效…

Unity中Shader的BRDF解析(一)

文章目录 前言现在我们主要来看Standard的 漫反射 和 镜面反射一、PBS的核心计算BRDF二、Standard的镜面高光颜色三、具体的BRDF计算对于BRDF的具体计算&#xff0c;在下篇文章中&#xff0c;继续解析 四、最终代码.cginc文件Shader文件 前言 在上篇文章中&#xff0c;我们解析…

OpenGL之Mesa3D编译for Ubuntu20.04(三十六)

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 人生格言: 人生从来没有捷径,只有行动才是治疗恐惧和懒惰的唯一良药. 更多原创,欢迎关注:Android…

入金牌投资平台,学先进炒股技术,掌未来宝贵财富

钱是个好东西&#xff0c;它能让人享受到世间的甜&#xff0c;它能让人感受到万众瞩目的荣耀&#xff0c;它能让人得到一切该有的尊敬。可以这么说&#xff0c;没有人不爱钱。可是&#xff0c;君子爱财取之有道。对于正常的人而言&#xff0c;都只希望通过正规的渠道赚到尽可能…

SSL证书是选免费的还是付费的好?

在当今的数字化时代&#xff0c;网络安全已经成为了每个网站和应用程序的重要组成部分。为了保护用户的数据安全&#xff0c;许多网站和应用程序都选择了使用SSL证书。然而&#xff0c;面对市场上的各种SSL证书&#xff0c;用户往往会面临一个问题&#xff1a;SSL证书是选免费的…

抽象类-Java

抽象类 一、父类方法的不确定性二、抽象类介绍三、抽象类细节四、练习题 一、父类方法的不确定性 引入&#xff1a;对于一个动物&#xff0c;不知道它吃什么&#xff0c;比如猫吃鱼&#xff0c;兔子吃萝卜。动物类中的 eat 方法往往由它的子类去具体实现。 class Animal {pub…

前端开发学习 (三) 列表功能

一、列表功能 1、列表功能 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><meta http-equiv"X-UA-Compa…

Buzz库python代码示例

Buzz库来编写一个下载器程序。 php <?php require_once vendor/autoload.php; // 引入Buzz库 use Buzz\Browser; use Buzz\Message\Response; $browser new Browser(); // 设置 $browser->setHttpClient(new HttpClientProxy([ host > , port > , ])…

c++容器详解Vector、deque、list、set、multiset、map、multimap、queue、stcak、Array

容器 数据结构描述实现头文件向量(vector)连续存储的元素<vector>列表(list)由节点组成的双向链表,每个结点包含着一个元素<list>双向队列(deque)连续存储的指向不同元素的指针所组成的数组<deque>集合(set)由节点组成的红黑树,每个节点都包含着一个元素,…

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/

景联文科技加入中国人工智能产业联盟(AIIA)数据委员会

近日&#xff0c;景联文科技加入中国人工智能产业联盟&#xff08;AIIA&#xff09;数据委员会&#xff0c;成为委员会成员单位。 中国人工智能产业发展联盟&#xff08;简称AIIA&#xff09;是在国家发改委、科技部、工信部、网信办指导下&#xff0c;由中国信息通信研究院等单…

colab notebook导出为PDF

目录 方法一&#xff1a;使用浏览器打印功能 方法二&#xff1a;使用nbconvert转换 方法三&#xff1a;在线转换 方法一&#xff1a;使用浏览器打印功能 一般快捷键是CTRLP 然后改变目标打印机为另存为PDF 这样就可以将notebook保存为PDF了 方法二&#xff1a;使用nbconver…

【labelimg使用小技巧】

小技巧 打开labelimg后&#xff0c;在上方的视图中&#xff0c;勾选自动保存&#xff0c;即可每次操作后自行保存&#xff0c;无需确认保存所在文件位置 上述勾选完成后&#xff0c;W为新建标注框&#xff0c;进行命名后&#xff0c;S即为切换下一张图像 如何放大图片呢 &am…

linux查看emmc分区信息(10种方法 )

目录 ## 1 emmc ## 2 uboot查看 ## 3 kernel查看 方法1 方法2 方法3 方法4 方法5 方法6 方法7 方法8 方法9 方法10 ## 1 emmc 我们要说的是&#xff0c;User Data Partition中的再分区 可简化为 ## 2 uboot查看 u-boot> mmc partPartition Map for MMC device…

界面控件DevExpress WPF流程图组件,完美复制Visio UI!(二)

DevExpress WPF Diagram&#xff08;流程图&#xff09;控件帮助用户完美复制Microsoft Visio UI&#xff0c;并将信息丰富且组织良好的图表、流程图和组织图轻松合并到您的下一个WPF项目中。 在上文中&#xff08;点击这里回顾>>&#xff09;&#xff0c;我们为大家介绍…

【unity实战】基于权重的随机事件(附项目源码)

文章目录 前言开始一、简单的使用二、完善各种事件1. 完善生成金币事件2. 完善生成敌人事件敌人3. 完善生成药水事件 最终效果参考源码完结 前言 随机功能和UnityEvent前面其实我们都已经做过了&#xff0c;但是随机UnityEvent事件要怎么使用呢&#xff1f;这里就来举一个例子…