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<…...
论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(二)
HoST框架核心实现方法详解 - 论文深度解读(第二部分) 《Learning Humanoid Standing-up Control across Diverse Postures》 系列文章: 论文深度解读 + 算法与代码分析(二) 作者机构: 上海AI Lab, 上海交通大学, 香港大学, 浙江大学, 香港中文大学 论文主题: 人形机器人…...
(二)TensorRT-LLM | 模型导出(v0.20.0rc3)
0. 概述 上一节 对安装和使用有个基本介绍。根据这个 issue 的描述,后续 TensorRT-LLM 团队可能更专注于更新和维护 pytorch backend。但 tensorrt backend 作为先前一直开发的工作,其中包含了大量可以学习的地方。本文主要看看它导出模型的部分&#x…...
Spring Boot面试题精选汇总
🤟致敬读者 🟩感谢阅读🟦笑口常开🟪生日快乐⬛早点睡觉 📘博主相关 🟧博主信息🟨博客首页🟫专栏推荐🟥活动信息 文章目录 Spring Boot面试题精选汇总⚙️ **一、核心概…...
css的定位(position)详解:相对定位 绝对定位 固定定位
在 CSS 中,元素的定位通过 position 属性控制,共有 5 种定位模式:static(静态定位)、relative(相对定位)、absolute(绝对定位)、fixed(固定定位)和…...
c#开发AI模型对话
AI模型 前面已经介绍了一般AI模型本地部署,直接调用现成的模型数据。这里主要讲述讲接口集成到我们自己的程序中使用方式。 微软提供了ML.NET来开发和使用AI模型,但是目前国内可能使用不多,至少实践例子很少看见。开发训练模型就不介绍了&am…...
初学 pytest 记录
安装 pip install pytest用例可以是函数也可以是类中的方法 def test_func():print()class TestAdd: # def __init__(self): 在 pytest 中不可以使用__init__方法 # self.cc 12345 pytest.mark.api def test_str(self):res add(1, 2)assert res 12def test_int(self):r…...
安宝特方案丨船舶智造的“AR+AI+作业标准化管理解决方案”(装配)
船舶制造装配管理现状:装配工作依赖人工经验,装配工人凭借长期实践积累的操作技巧完成零部件组装。企业通常制定了装配作业指导书,但在实际执行中,工人对指导书的理解和遵循程度参差不齐。 船舶装配过程中的挑战与需求 挑战 (1…...
【Redis】笔记|第8节|大厂高并发缓存架构实战与优化
缓存架构 代码结构 代码详情 功能点: 多级缓存,先查本地缓存,再查Redis,最后才查数据库热点数据重建逻辑使用分布式锁,二次查询更新缓存采用读写锁提升性能采用Redis的发布订阅机制通知所有实例更新本地缓存适用读多…...
AI+无人机如何守护濒危物种?YOLOv8实现95%精准识别
【导读】 野生动物监测在理解和保护生态系统中发挥着至关重要的作用。然而,传统的野生动物观察方法往往耗时耗力、成本高昂且范围有限。无人机的出现为野生动物监测提供了有前景的替代方案,能够实现大范围覆盖并远程采集数据。尽管具备这些优势…...
怎么开发一个网络协议模块(C语言框架)之(六) ——通用对象池总结(核心)
+---------------------------+ | operEntryTbl[] | ← 操作对象池 (对象数组) +---------------------------+ | 0 | 1 | 2 | ... | N-1 | +---------------------------+↓ 初始化时全部加入 +------------------------+ +-------------------------+ | …...
