基于PXE自动配置RAID方法
haoteby 2025-05-21 13:47 32 浏览
实现原理:
我们要在内存中运行一个小的内核系统,并检测到raid,然后对raid进行配置,我们使用了基于centos6.5的内核和initrd.img(initrd.img本身是一个小的内存中运行的系统),但这个小系统本身带的工具太少,需要我们加入MegaCli64命令,以及用到的shell命令,定制一个符合我们要求的小系统,并重新打包。
由于我们需要在正式安装前配置raid,所以我们利用ks文件中的%pre执行一些检测和配置工作,然后直接重启就OK了。
1. 环境准备
a. 正常安装的centos6.5一台
b. 下载并安装megacli工具
ftp://rpmfind.net/linux/Mandriva/devel/cooker/x86_64/media/non-free/release/megacli-8.02.21-1-mdv2012.0.x86_64.rpm
c. 安装后在目录/opt/MegaRAID/MegaCli/三个文件
libstorelibir-2.so.14.07-0 MegaCli MegaCli64
2. 小系统制作
a. 复制解压initrd.img
mount centos6.5.iso /mnt -o loop
mkdir /root/test
cp /mnt/isolinux/initrd.img /root/test/
cd /root/test
xz -dc initrd.img | cpio –id
解压后如下所示:
上述是在ubuntu系统中解压的,最好是在centos中进行,方便后面加入命令
b. 加入自定义的包
cp -r /opt ./ #加入MegaCli64工具
此时,Megacli64工具还不能用,因为在小系统中默认很多依赖包都没有
我们通过ldd查看MegaCLi64依赖的包(有几个缺少的),如下:
root@ubuntu:~/test# ldd opt/MegaRAID/MegaCli/MegaCli64
linux-vdso.so.1 => (0x00007ffdaffd1000)
libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f21f5f26000)
libncurses.so.5 => /lib/x86_64-linux-gnu/libncurses.so.5 (0x00007f21f5d03000)
libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f21f5aff000)
libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007f21f57fb000)
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f21f54f5000)
libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007f21f52df000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f21f4f1a000)
/lib64/ld-linux-x86-64.so.2 (0x00007f21f6144000)
libtinfo.so.5 => /lib/x86_64-linux-gnu/libtinfo.so.5 (0x00007f21f4cf1000)
这时我们要从正常安装的centos6.5的系统中复制上述包到小系统的相应目录中。
c. 加入特定的shell命令
由于刚解压的小系统中缺少很多shell命令,所以也需要加入里面,以curl为例
首先,在正常安装的centos6.5系统中找到curl命令(/usr/bin/curl),将该命令复制到小系统中的目录中,即/root/test/usr/bin/,并给预执行权限
chmod +x /root/test/usr/bin/curl
根据上述方法我们依次加了head、cp、wc、uniq等命令
d. 打包小系统
find . |cpio -o -H newc>initrd
lzma initrd initrd.lzma
mv initrd.lzma initrd.img
然后将打包好的initrd.img放入PXE的启动文件所在目录中,这里是放在了
/var/lib/tftpboot/centos6u5/目录中
3. 配置ks文件
langen_US
keyboardus
timezoneAsia/Shanghai
rootpw--iscrypted $1$bzMRSch3$e2iTZ.7IuuONNJcXLq2jy1
selinux--disabled
reboot
#text
cmdline
install
zerombryes
auth --useshadow --enablemd5
firewall--enabled --port=22:tcp
skipx
url --urlhttp://10.1.15.250/Centos6u5/
clearpart--all --initlabel
bootloader--location=mbr
autopart
logging--host=10.1.15.250 --level=debug
%packages
@core
%pre --interpreter /bin/sh --log=/root/my-pre-log
exportPATH=$PATH:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
echo"-------------------"
ln -s -T /mnt/runtime/opt /opt
mkdir /newroot
mount tmpfs /newroot -t tmpfs
cp -a /mnt/runtime/* /newroot/
ls /mnt/runtime/
mount /proc /newroot/proc -o bind
mount /dev /newroot/dev -o bind
mount /sys /newroot/sys -o bind
# chroot to runipmitool/hpasmcli/omreport
chroot /newroot
/opt/MegaRAID/MegaCli/MegaCli64-DiscardPreservedCache -Lall -aALL
/opt/MegaRAID/MegaCli/MegaCli64 -CfgForeign-Clear -aALL
/opt/MegaRAID/MegaCli/MegaCli64-CfgLdDel -LALL -Force -aALL
/opt/MegaRAID/MegaCli/MegaCli64-CfgClr -aALL
id=`/opt/MegaRAID/MegaCli/MegaCli64 -cfgdsply -aALL |grep 'Enclosure Device ID' |uniq | awk '{print $4}'`
/opt/MegaRAID/MegaCli/MegaCli64-CfgSpanAdd -r10 -Array0[32:0,32:1] -Array1[32:2,32:3] -Array2[32:4,32:5]-Array3[32:6,32:7] -strpsz512 -a0 ||sleep 60
/opt/MegaRAID/MegaCli/MegaCli64-LDSetProp WB -LALL -aALL
/opt/MegaRAID/MegaCli/MegaCli64-LDSetProp ADRA -LALL -aALL
echo"---------------------"
reboot
大功告成!!!!PXE测试!!!
说明:
基于ubuntu的系统使用了debain-installer,其中最关键的检测和安装过程由一个大的二进制程序main-menu进行,无法进行hook,所以本场景不适用;
Rhel/Centos6.2之前的initrd.img打包方式不同,请注意,由于dell x20 、浪潮、联想最新的服务器最低只支持6.5,所以建议使用高版本系统制作配置raid的系统。
4. Raid缓存参数说明
建议设置:
WriteBack,ReadAdaptive, Direct, No Write Cache if bad BBU
写回(默认),自适应读(需要修改),读请求不缓存(默认),电池有问题时自动切到非写回模式(默认)
自适应读修改的命令:
/opt/MegaRAID/MegaCli/MegaCli64-LDSetProp ADRA -LALL -aALL
- 上一篇:恶意代码常见的编程方式
- 下一篇:Python操作系统资源管理与监控
相关推荐
- 别争了,Access数据库才是真正的低代码开发平台
-
Access数据库是微软公司搞出来的“奇葩”产品。...
- Access开发轻松一键将 Access 全库表格导出为 Excel
-
hi,大家好呀!在日常工作中,Access常常是我们忠实的数据管家,默默守护着项目信息、客户列表或是库存记录。它结构清晰,录入便捷,对于许多中小型应用场景来说,无疑是个得力助手。然而,当我们需要对这...
- 跟我学:从零开始用Access设计一套完整的系统(一)
-
序言:Access是一款强大而灵活的数据库软件,可以设计和开发各种类型和规模的数据库应用程序。本文旨在为您提供从零开始设计Access数据库系统的详细指导,并通过实际案例演示如何在Access中设计和...
- 问卷调查管理程序 Access数据库 功能介绍和VBA代码分享
-
o本系统包含主要功能有:问卷管理,题目管理,问卷填写,调查结果统计,数据汇总导出o数据库系统包含:表,查询,窗体,VBA代码...
- 非绑定记录窗体查看管理数据 Access数据库功能模块 VBA代码编程
-
模块Public成绩IDnumAsLong学生成绩管理PrivateSubCommand更新_Click()DoCmd.SetWarnings(False)...
- ACCESS中的DLookUp函数是如何运算的?
-
一、DLookUp函数介绍1.DLookUp函数的用途:可以用于从指定集合(一个域)中获取符合条件的特定字段的值。2.DLookUp函数的格式为:DLookUp(expr,domain,...
- Excel常用技能分享与探讨(5-宏与VBA简介 VBA之用户窗体-一)
-
用户窗体(UserForm)是VBA中创建交互式界面的核心工具,可用于数据录入、设置参数或展示信息。...
- 【每日任务计划管理系统】Access数据库管理系统 VBA代码分享
-
窗体系统主页文本框,组合框,按钮,子窗体OptionCompareDatabase...
- VBA高效开发:用用户窗体打造个性化数据录入工具
-
在日常办公中,Excel的数据录入是否总让你陷入这些困境?手动输入易错、格式混乱难追溯、重复操作耗时费力。今天,我们将突破常规,利用VBA的用户窗体(UserForm)构建一套“智能校验、流程清晰、...
- VBA编程(基于Access)第1课:VBA的作用和学习方法
-
VBA,英文全称VisualBasicforApplications,直接翻译过来叫做“可以直接使用的VB语言”。...
- Access数据库宏与VBA代码的使用(精品一)
-
Access数据库的宏相当于实现某一功能的一系列命令和操作,我们无需写代码,系统已经将主体代码集成一块,我们只需要做一些简单的操作即可,而VBA代码则是实实在在的代码写到程序里面,我们可以自己编写,也...
- 【每日任务管理系统】(2) VB 管理系统 代码 Visual Basic access数据库
-
窗体全部任务DimdhAsLong'存储高度差DimdwAsLong'存储宽度差...
- VBA连接access数据库开发软件(vba调用数据库连接)
-
VBA连接access数据库开发小软件虽然VBA(包括VB)已不再流行,但是在某些场合还是比较方便的,尤其对非编程专业人员。灵活使用VBA,可以很十分方便的处理excel,access数据,提高工作效...
- 九章云极发布全新AI智算云平台:支持秒级生成百万级Token
-
6月16日,在在九章云极智能计算科技论坛上,九章云极宣布推出全新AI智算云平台“九章智算云AlayaNeWCloud2.0”,该平台基于Serverless技术架构与强化学习技术(RL)的深度融合...
- 浅谈基于大数据技术下的“云旅游”平台运营策略研究
-
云旅游体验平台是利用大数据和虚拟技术,构建虚拟旅游环境,能够改变旅游企业的营销模式和旅游者的消费模式。本文从云旅平台多维度数据信息的获取与分析,平台体验质量反馈信息数据构建,云旅游平台服务功能设计方案...