PXE解决uefi安装centos6黑屏问题
解决pxe安装centos6黑屏
author: 铁乐与猫
date:2021.12.10
背景
主板:supermicr SBI-4129P-T3N
System InformationManufacturer: SupermicroProduct Name: SBI-4129P-T3NVersion: 123456789Serial Number: S264322X9905439UUID: 00000000-0000-0000-0000-AC1F6BC67D0EWake-up Type: Power SwitchSKU Number: 096615D9Family: SMC B11
安装系统后可通过dmidecode命令查到。
这台主板支持的centos6系统是6.9-6.10.
centos7的话则是7.3-7.x。

最开始尝试用pxe的kickstart的方式安装centos6.10,无论是传统方式或uefi方式的引导都失败了,uefi的直接一直黑屏。
传统方式的则是安装完后识别不出磁盘。
最终解决方案如下。
主板配置
首先是主板方面有两个要点:
参考:https://www.intel.cn/content/www/cn/zh/support/articles/000038349/server-products/server-boards.html
1)Boot mode = UEFI
启动模式设为uefi,包括网卡设置等。
2)Video BIOS = Legacy
这是主要的难点之一,之前的尝试就有被坑到了,一般只会尝试统一都用uefi。
注意这个显卡不能关掉,不然ipmiview的远程画面就进不回去了。
这里主要看pci上的显卡配置,如:
高级配置中的PCI配置:PCIe/PCI/PnP Configuration > Onboard Video OPROM 设置成Legacy

pxe grub.cfg 引导菜单
这里因为没有找到官网可查询,是在网上搜索了许多例子,实际尝试了n多遍才试出来的,当然可能不是最优解,之后还会再尝试。
gun倒是有个比较可靠的手册可参考:https://www.gnu.org/software/grub/manual/grub/grub.html#Commands
可以认为是官方手册了,但因为要配合到pxe和kickstart(后面统一简略称为ks)来使用,有些参数实际上还可能有偏差。
这里直接给出最后尝试能成功引导的例子之一:(试错n遍那些就不贴出来了,都是泪)
menuentry 'Install UEFI CentOS 6.10 sda-boot sdb-data for ks 8ub01/02' --class fedora --class gnu-linux --class gnu --class os {linux (tftp)/networkboot/centos6.10/vmlinuz ip=dhcp ks=ftp://<ftp用户>:<ftp用户passwd>@<ftp服务器ip>/ks/centos6_10_ftp_sdaboot_sdbdata_uefi.cfg inst.repo=ftp://<ftp用户>:<ftp用户passwd>@<ftp服务器ip>/centos6.10 nomodeset inst.xdriver=vesa inst.resolution=1024x768 selinux=0 inst.loglevel=debug net.ifnames=0initrd (tftp)/networkboot/centos6.10/initrd.img
}
主要是在linux vmlinuz后加上内核引导参数:
nomodeset inst.xdriver=vesa inst.resolution=1024x768 selinux=0 inst.loglevel=debug
其中这里的inst.xdriver等写法是参考了以下链接:https://forums.centos.org/viewtopic.php?t=72400
最新优化版本如下:
发现主要是linuxefi和initrdefi改成linux和initrd就能适用和手动的一样的参数:
menuentry 'Install UEFI CentOS 6.10 sda-boot sdb-data for ks 8ub01/02 test2' --class fedora --class gnu-linux --class gnu --class os {linux (tftp)/networkboot/centos6.10/vmlinuz ip=dhcp ks=ftp://<ftp用户>:<ftp用户passwd>@<ftp服务器ip>/ks/centos6_10_ftp_sdaboot_sdbdata_uefi.cfg inst.repo=ftp://<ftp用户>:<ftp用户passwd>@<ftp服务器ip>/centos6.10 nomodeset blacklist=ast xdriver=vesa brokenmodules=ast net.ifnames=0 initrd (tftp)/networkboot/centos6.10/initrd.img
}
但同样很坑且要注意的是黑屏会长达近30秒后才开始有正常装系统的画面出现。应该是跳过了闪烁的过度所以需要有耐心。
可以同样用到以下参数:
nomodeset blacklist=ast xdriver=vesa brokenmodules=ast
ks文件
ks文件中也要对grub.conf做一些修改防止重启完后黑屏进不了系统,最主要添加的如下:
bootloader --location=mbr --driveorder=sda --append="nomodeset crashkernel=auto rhgb quiet xdriver=vesa brokenmodules=ast"
其中 --append 中加入了nomodset xdrive=vesa brokenmodules=ast这里就和手动时加的内核是一样的了。
装完系统后,就能在/etc/grub.cfg中体现出来,例:
[root@localhost ~]# cat /etc/grub.conf
# grub.conf generated by anaconda
#
# Note that you do not have to rerun grub after making changes to this file
# NOTICE: You do not have a /boot partition. This means that
# all kernel and initrd paths are relative to /, eg.
# root (hd0,1)
# kernel /boot/vmlinuz-version ro root=/dev/sda2
# initrd /boot/initrd-[generic-]version.img
#boot=/dev/sda1
device (hd0) HD(1,100,c800,3449037f-4749-42ec-bc04-5b9ec3fe0639)
default=0
timeout=5
splashimage=(hd0,1)/boot/grub/splash.xpm.gz
hiddenmenu
title CentOS 6 (2.6.32-754.el6.x86_64)root (hd0,1)kernel /boot/vmlinuz-2.6.32-754.el6.x86_64 ro root=UUID=d50429d1-1c90-486c-908f-acf421760730 nomodeset rd_NO_LUKS KEYBOARDTYPE=pc KEYTABLE=us nomodeset crashkernel=auto rhgb quiet xdriver=vesa brokenmodules=ast LANG=en_US.UTF-8 rd_NO_MD SYSFONT=latarcyrheb-sun16 crashkernel=auto rd_NO_LVM rd_NO_DM rhgb quietinitrd /boot/initramfs-2.6.32-754.el6.x86_64.img
操作实例:
前面三步都准备好了之后就可以开始在ipmiview中操作了。
特别要注意的一点:
引导菜单选中后按回车后需要等待将近或超过30秒黑屏之后,pxe才刷新出开始安装的画面,故这里也需要耐心。
进入pxe的uefi引导菜单
选择带Install UEFI CentOS 6.10 sda-boot sdb-data for ks 8ub01/02的引导菜单。
引导菜单按e进行编辑上面所说的内核参数。
回车并耐心等待近30秒
回车(或在编辑界面的就按ctrl-x开始),这一步其实是最考验耐心,猜测是原本有的过渡画面因为禁用了加载显卡驱动后没有了。
可优化的选择网卡界面
由于引导菜单中没有额外指定使用哪个网卡进行安装,所以会报出下面的让你选择网卡的界面,要想自动选择的话,后续会进行多建几个分别不同网卡进行安装系统的引导菜单就可省略此步骤了。

例:出现以上的界面时,因为我们进pxe的时候是mac地址0e结尾的,所以这次选择eth0即可。
接下来如果没有踩坑(ks文件正确的话)就是全程全自动不再有交互的了。
其它开始创建分区等全自动不需要交互的就不贴出来了。
原理
intel最新的内核己将视频模式设置移到内核中。因此,视频卡上所有硬件、特定时钟速率和寄存器的编程均发生在内核,而不是服务器启动时的驱动程序。这使得高分辨率引导屏幕和从启动到登录屏幕的无闪烁过渡成为可能。遗憾的是,在某些卡上这不能正常工作,最终出现黑屏。添加"nomodeset"参数会指示内核在驱动程序加载之前不要加载视频驱动程序,而是使用 BIOS 模式。
参考
intel官方给出的bug修复方案(也是针对手动的):https://www.intel.cn/content/www/cn/zh/support/articles/000038349/server-products/server-boards.html
相关文章:
PXE解决uefi安装centos6黑屏问题
解决pxe安装centos6黑屏 author: 铁乐与猫 date:2021.12.10 背景 主板:supermicr SBI-4129P-T3N System InformationManufacturer: SupermicroProduct Name: SBI-4129P-T3NVersion: 123456789Serial Number: S264322X9905439UUID: 00000000-0000-0000-0000-AC1…...
Feign 调用为何POST不支持同时传入多个SpringQueryMap对象,但是GET方法就支持?
Feign 调用为何POST不支持同时传入多个SpringQueryMap对象,但是GET方法就支持? 1.1 问题背景1.2 原因分析1.3 修复方案1.3.1 修复方案一 切换使用GET方法,可以试用多个SpringQueryMap注解 (测试实际不行)1.3.2 修复方案…...
RISC-V 特权级架构
特权级别 级别的数值越大,特权级越高,掌控硬件的能力越强,在CPU硬件层面,M模式必须存在,其它模式可以不存在 执行环境调用 ecall ,这是一种很特殊的陷入类的指令, 相邻两特权级软件之间的接口正…...
目录启示:PHP 与命名空间的声明
文章目录 参考环境命名空间概念版本支持影响范围 全局命名空间概念魔术常量 \_\_NAMESPACE\_\_声明全局命名空间 声明命名空间为空间命名命名规则核心命名空间 子命名空间的声明在同一文件中定义多个命名空间无括号命名空间声明有括号命名空间声明禁止混合使用推荐使用有括号命…...
D. Divide and Equalize--Codeforces Round 903 (Div. 3)
D. Divide and Equalize 题意:让一组数中的一个数除以一个因子,一个数除以一个因子,假如经过若干次操作后能够使数组所有数相等,那么输出YES,否则输出NO。 分析:乘除因子,那么实际上就是因子的…...
保姆式教程:MAC安装Android studio(包括安装JDK,Android SDK),解决gradle下载慢的问题
文章目录 参考文章安装JDK并配置环境变量安装JDK配置JDK相关的环境变量 Android studio 安装下载Android studiogradle下载慢解决方法 安装Android SDK选择jdk版本安装SDK并配置环境变量 参考文章 原文链接 原文链接 安装JDK并配置环境变量 安装JDK 下载地址 下载后双击安装…...
Ps:选区的布尔运算
选区的布尔 Boolean运算指的是选区之间的相加(并集)、相减(差集)以及相交(交集),从而形成一个新的选区。 ◆ ◆ ◆ 使用工具选项栏 在 Ps 中,几乎所有的选区工具的工具选项栏上都有…...
PyTorch 深度学习之卷积神经网络(基础篇)Basic CNN(九)
0. Revision: Fully connected Neural Network 全连接 1. Convolution Neural Network 保留空间信息 1.1 Convolution Convolution-Single Input Channel 单通道 数乘 3 input Channels 3通道 N input Channels N input Channels and M output channel M 个卷积核 1.2 conv…...
torch实现Gated PixelCNN
文章目录 PixelCNNGated PixelCNN PixelCNN import torch import torch.nn as nn import torch.nn.functional as F# Pixel CNNclass MaskConv2d(nn.Module):def __init__(self, conv_type, *args, **kwags):super().__init__()assert conv_type in (A, B)self.conv nn.Conv2…...
破局「二次创业」:合思的新解法
在新的水温下,寻找更为良性的发展正在成为企业的必答题。对此,合思给出的不仅是一份更“省”的答题方法。也更是从认知层到行动层,最后到工具层的一张授人以渔的“渔网”。 作者|思杭 编辑|皮爷 出品|产业家 今年4月初,广州…...
第五章:TCP和UDP基本原理
TCP和UDP基本原理 一、TCP/IP传输层的作用二、 端口1.范围2. 服务端3. 客户端4. 常见知名端口号4.1 TCP 80 HTTP4.2 TCP 20 21 FTP4.3 TCP 23 TELNET4.4 TCP 25 SMTP4.5 UDP 53 DNS4.6 TCP 443 HTTPS 三、 TCP原理1. TCP头部封装格式1.1 Source Port 源端口1.2 Destination Por…...
算法:动态规划的入门理解
文章目录 算法原理题目解析第n个泰波那契数列三步问题使用最小花费爬楼梯 从本篇开始总结的是动态规划的一些内容,动态规划是算法中非常重要的一个版块,因此也是学习算法中的一个重点,在学习动态规划前应当要把动态规划的基础知识学习一下 算…...
最新版nacos 2.2.3服务注册与发现版本依赖问题
最新版nacos的注册服务时配置文件写的是对的,但就是在nacos web页面无法看见服务,此时你需要注意你的依赖是否正确 spring: application:name: orderservicecloud:nacos:discovery:server-addr: 122.51.115.127:8848父工程依赖:现在最新的s…...
2023年中国合同能源管理行业研究报告
第一章 行业概况 1.1 定义及分类 合同能源管理 (Energy Performance Contracting, EPC) 是当前能源行业中一个重要的概念,它构建了一个桥梁,将节能服务公司 (Energy Management Company, EMCo) 与用能单位紧密联系在一起。通过特定的契约形式ÿ…...
php以半小时为单位,输出指定的时间范围
//可预订小时范围$hour [];for ($i$startHour*3600;$i<$endHour*3600;$i1800){//以半小时为单位输出$startHourItem date(H:i,strtotime(date(Y-m-d))$i);//小时开始$endHourItem date(H:i,strtotime(date(Y-m-d))$i1800);//当前时间再加半小时$hourItemStr $startHourI…...
Electron应用的 asar 打包 解压
前言: .asar文件是一种归档文件格式,通常用于封装Electron应用程序的资源。Electron是一个使得开发者能够使用Web技术构建跨平台桌面应用程序的框架。为了提高性能和简化部署,Electron应用程序的资源通常会被打包到一个.asar文件中。 安装 as…...
蓝桥等考Python组别十七级003
第一部分:选择题 1、Python L17 (15分) 运行下面程序,输出的结果是( )。 def func(x, y): return (x + y) // 3 print(func(7, 5)) 2468正确答案:B 2、Python L17 (15</...
Redis概述和与SpringBoot的整合
Redis是一种高性能的键值对存储数据库,它支持多种数据结构,包括字符串、哈希、列表、集合和有序集合等。Redis具有快速、可靠、灵活和可扩展等特点,也被广泛应用于缓存、队列和排行榜等场景。 SpringBoot是一种基于Spring框架的快速开发脚手…...
Python 中的 round() 函数:实现精确的数值舍入操作
round(x, n) 函数用于对数值 x 进行舍入操作,并指定保留的小数位数为 n。它的工作原理如下: 如果 x 的小数位数小于等于 n,则直接返回 x 本身。例如,round(3.1415, 2) 将返回 3.14。 如果 x 的小数位数大于 n,则按照四…...
在springboot中如何开启Bean数据校验
①:添加JSR303规范坐标与Hibernate校验框架对应坐标 <dependency><groupId>javax.validation</groupId><artifactId>validation-api</artifactId> </dependency><dependency><groupId>org.hibernate.validator<…...
调用支付宝接口响应40004 SYSTEM_ERROR问题排查
在对接支付宝API的时候,遇到了一些问题,记录一下排查过程。 Body:{"datadigital_fincloud_generalsaas_face_certify_initialize_response":{"msg":"Business Failed","code":"40004","sub_msg…...
LeetCode - 394. 字符串解码
题目 394. 字符串解码 - 力扣(LeetCode) 思路 使用两个栈:一个存储重复次数,一个存储字符串 遍历输入字符串: 数字处理:遇到数字时,累积计算重复次数左括号处理:保存当前状态&a…...
江苏艾立泰跨国资源接力:废料变黄金的绿色供应链革命
在华东塑料包装行业面临限塑令深度调整的背景下,江苏艾立泰以一场跨国资源接力的创新实践,重新定义了绿色供应链的边界。 跨国回收网络:废料变黄金的全球棋局 艾立泰在欧洲、东南亚建立再生塑料回收点,将海外废弃包装箱通过标准…...
LLM基础1_语言模型如何处理文本
基于GitHub项目:https://github.com/datawhalechina/llms-from-scratch-cn 工具介绍 tiktoken:OpenAI开发的专业"分词器" torch:Facebook开发的强力计算引擎,相当于超级计算器 理解词嵌入:给词语画"…...
selenium学习实战【Python爬虫】
selenium学习实战【Python爬虫】 文章目录 selenium学习实战【Python爬虫】一、声明二、学习目标三、安装依赖3.1 安装selenium库3.2 安装浏览器驱动3.2.1 查看Edge版本3.2.2 驱动安装 四、代码讲解4.1 配置浏览器4.2 加载更多4.3 寻找内容4.4 完整代码 五、报告文件爬取5.1 提…...
tree 树组件大数据卡顿问题优化
问题背景 项目中有用到树组件用来做文件目录,但是由于这个树组件的节点越来越多,导致页面在滚动这个树组件的时候浏览器就很容易卡死。这种问题基本上都是因为dom节点太多,导致的浏览器卡顿,这里很明显就需要用到虚拟列表的技术&…...
视频行为标注工具BehaviLabel(源码+使用介绍+Windows.Exe版本)
前言: 最近在做行为检测相关的模型,用的是时空图卷积网络(STGCN),但原有kinetic-400数据集数据质量较低,需要进行细粒度的标注,同时粗略搜了下已有开源工具基本都集中于图像分割这块,…...
Aspose.PDF 限制绕过方案:Java 字节码技术实战分享(仅供学习)
Aspose.PDF 限制绕过方案:Java 字节码技术实战分享(仅供学习) 一、Aspose.PDF 简介二、说明(⚠️仅供学习与研究使用)三、技术流程总览四、准备工作1. 下载 Jar 包2. Maven 项目依赖配置 五、字节码修改实现代码&#…...
QT3D学习笔记——圆台、圆锥
类名作用Qt3DWindow3D渲染窗口容器QEntity场景中的实体(对象或容器)QCamera控制观察视角QPointLight点光源QConeMesh圆锥几何网格QTransform控制实体的位置/旋转/缩放QPhongMaterialPhong光照材质(定义颜色、反光等)QFirstPersonC…...
【C++进阶篇】智能指针
C内存管理终极指南:智能指针从入门到源码剖析 一. 智能指针1.1 auto_ptr1.2 unique_ptr1.3 shared_ptr1.4 make_shared 二. 原理三. shared_ptr循环引用问题三. 线程安全问题四. 内存泄漏4.1 什么是内存泄漏4.2 危害4.3 避免内存泄漏 五. 最后 一. 智能指针 智能指…...
