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<…...
装饰模式(Decorator Pattern)重构java邮件发奖系统实战
前言 现在我们有个如下的需求,设计一个邮件发奖的小系统, 需求 1.数据验证 → 2. 敏感信息加密 → 3. 日志记录 → 4. 实际发送邮件 装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其…...
Swift 协议扩展精进之路:解决 CoreData 托管实体子类的类型不匹配问题(下)
概述 在 Swift 开发语言中,各位秃头小码农们可以充分利用语法本身所带来的便利去劈荆斩棘。我们还可以恣意利用泛型、协议关联类型和协议扩展来进一步简化和优化我们复杂的代码需求。 不过,在涉及到多个子类派生于基类进行多态模拟的场景下,…...
家政维修平台实战20:权限设计
目录 1 获取工人信息2 搭建工人入口3 权限判断总结 目前我们已经搭建好了基础的用户体系,主要是分成几个表,用户表我们是记录用户的基础信息,包括手机、昵称、头像。而工人和员工各有各的表。那么就有一个问题,不同的角色…...
srs linux
下载编译运行 git clone https:///ossrs/srs.git ./configure --h265on make 编译完成后即可启动SRS # 启动 ./objs/srs -c conf/srs.conf # 查看日志 tail -n 30 -f ./objs/srs.log 开放端口 默认RTMP接收推流端口是1935,SRS管理页面端口是8080,可…...
Java入门学习详细版(一)
大家好,Java 学习是一个系统学习的过程,核心原则就是“理论 实践 坚持”,并且需循序渐进,不可过于着急,本篇文章推出的这份详细入门学习资料将带大家从零基础开始,逐步掌握 Java 的核心概念和编程技能。 …...
Map相关知识
数据结构 二叉树 二叉树,顾名思义,每个节点最多有两个“叉”,也就是两个子节点,分别是左子 节点和右子节点。不过,二叉树并不要求每个节点都有两个子节点,有的节点只 有左子节点,有的节点只有…...
Android 之 kotlin 语言学习笔记三(Kotlin-Java 互操作)
参考官方文档:https://developer.android.google.cn/kotlin/interop?hlzh-cn 一、Java(供 Kotlin 使用) 1、不得使用硬关键字 不要使用 Kotlin 的任何硬关键字作为方法的名称 或字段。允许使用 Kotlin 的软关键字、修饰符关键字和特殊标识…...
Element Plus 表单(el-form)中关于正整数输入的校验规则
目录 1 单个正整数输入1.1 模板1.2 校验规则 2 两个正整数输入(联动)2.1 模板2.2 校验规则2.3 CSS 1 单个正整数输入 1.1 模板 <el-formref"formRef":model"formData":rules"formRules"label-width"150px"…...
MySQL账号权限管理指南:安全创建账户与精细授权技巧
在MySQL数据库管理中,合理创建用户账号并分配精确权限是保障数据安全的核心环节。直接使用root账号进行所有操作不仅危险且难以审计操作行为。今天我们来全面解析MySQL账号创建与权限分配的专业方法。 一、为何需要创建独立账号? 最小权限原则…...
JVM 内存结构 详解
内存结构 运行时数据区: Java虚拟机在运行Java程序过程中管理的内存区域。 程序计数器: 线程私有,程序控制流的指示器,分支、循环、跳转、异常处理、线程恢复等基础功能都依赖这个计数器完成。 每个线程都有一个程序计数…...
