hypervisor error(esxi无法引导启动)

本文目录
- esxi无法引导启动
- unable to.open aconnection to the 是什么错误libvirt managemant deamon
- CentOS,RHEL 6.X 为什么不升级内核到 3.X
- 雷电模拟器error1161怎么办
- docker 遇到这个是什么原因引起的,怎么解决
- 虚拟机 ubuntu怎么开libvirtd
- X86的三振出局(triple-fault)
- loading vmware hypervisor 报错fatal error:8(device error)
esxi无法引导启动
故障现象:在 UEFI 模式下, 在主机上安装 ESXi 后重新引导时, 重新引导可能失败。 出现此问题的同时, 还显示一条类似于以下内容的错误消息: 发生异常网络错误。无可用的引导设备 (Unexpected network error. No boot device available)。
原因分析:主机系统无法识别作为引导磁盘在其上安装 ESXi 的磁盘。
解决方法:
1、屏幕上显示错误消息时,按 F11 显示引导选项。
2、选择一个类似于添加引导选项的选项。该选项的文字可能有所不同,具体取决于您的系统。
3、在安装 ESXi 的磁盘上选择文件 \EFI\BOOT\BOOTx64.EFI 。
4、更改引导顺序,以便主机从添加的选项引导。
unable to.open aconnection to the 是什么错误libvirt managemant deamon
虚拟机管理者连接失败
Unable to open a connection to the Xen hypervisor/daemon
Verify that:
- A Xen host kernel was booted
- The Xen service has been started
Details:
Unable to open connection to hypervisor URI ’xen:///’:
libvirt.libvirtError virConnectOpenReadOnly() failed
Traceback (most recent call last):
File "/usr/share/virt-manager/virtManager/connection.py", line 351, in _open_thread
self.vmm = libvirt.openReadOnly(self.uri)
File "/usr/lib/python2.4/site-packages/libvirt.py", line 132, in openReadOnly
if ret is None:raise libvirtError(’virConnectOpenReadOnly() failed’)
libvirtError: virConnectOpenReadOnly() failed
这可能是因为xend服务没有开启。
# service xend start
CentOS,RHEL 6.X 为什么不升级内核到 3.X
确认内核及版本信息
# uname -r
2.6.32-220.el6.x86_64
# cat /etc/centos-release
CentOS release 6.5 (Final)
安装软件
编译安装新内核,依赖于开发环境和开发库
# yum grouplist //查看已经安装的和未安装的软件包组,来判断我们是否安装了相应的开发环境和开发库;
# yum groupinstall "Development Tools" //一般是安装这两个软件包组,这样做会确定你拥有编译时所需的一切工具
# yum install ncurses-devel //你必须这样才能让 make *config 这个指令正确地执行
# yum install qt-devel //如果你没有 X 环境,这一条可以不用
# yum install hmaccalc zlib-devel binutils-devel elfutils-libelf-devel //创建 CentOS-6 内核时需要它们
如果当初安装系统是选择了Software workstation,上面的安装包几乎都已包含。
2. 编译内核
获取并解压内核源码,配置编译项
Linux内核版本有两种:稳定版和开发版 ,Linux内核版本号由3个数字组成:r.x.y
r: 主版本号
x: 次版本号,偶数表示稳定版本;奇数表示开发中版本。
y: 修订版本号 , 表示修改的次数
***隐藏网址***
***隐藏网址***
# tar -xf linux-3.10.58.tar.xz -C /usr/src/
# cd /usr/src/linux-3.10.58/
# cp /boot/config-2.6.32-220.el6.x86_64 .config
我们在系统原有的内核配置文件的基础上建立新的编译选项,所以复制一份到当前目录下,命名为.config。接下来继续配置:
# sh -c ’yes "" | make oldconfig’
HOSTCC scripts/basic/fixdep
HOSTCC scripts/kconfig/conf.o
SHIPPED scripts/kconfig/zconf.tab.c
SHIPPED scripts/kconfig/zconf.lex.c
SHIPPED scripts/kconfig/zconf.hash.c
HOSTCC scripts/kconfig/zconf.tab.o
HOSTLD scripts/kconfig/conf
scripts/kconfig/conf --oldconfig Kconfig
.config:555:warning: symbol value ’m’ invalid for PCCARD_NONSTATIC
.config:2567:warning: symbol value ’m’ invalid for MFD_WM8400
.config:2568:warning: symbol value ’m’ invalid for MFD_WM831X
.config:2569:warning: symbol value ’m’ invalid for MFD_WM8350
.config:2582:warning: symbol value ’m’ invalid for MFD_WM8350_I2C
.config:2584:warning: symbol value ’m’ invalid for AB3100_CORE
.config:3502:warning: symbol value ’m’ invalid for MMC_RICOH_MMC
*
* Restart config...
*
*
* General setup
*
... ...
XZ decompressor tester (XZ_DEC_TEST) (NEW)
Averaging functions (AVERAGE) (NEW) y
CORDIC algorithm (CORDIC) (NEW)
JEDEC DDR data (DDR) (NEW)
#
# configuration written to .config
***隐藏网址***
有的文档里介绍使用make memuconfig,它便是根据需要定制模块,类似界面如下:(在此不需要)
开始编译
# make -j4 bzImage //生成内核文件
# make -j4 modules //编译模块
# make -j4 modules_install //编译安装模块
-j后面的数字是线程数,用于加快编译速度,一般的经验是,逻辑CPU,就填写那个数字,例如有8核,则为-j8。(modules部分耗时30多分钟)
安装
# make install
实际运行到这一步时,出现ERROR: modinfo: could not find module vmware_balloon,但是不影响内核安装,是由于vsphere需要的模块没有编译,要避免这个问题,需要在make之前时修改.config文件,加入
HYPERVISOR_GUEST=yCONFIG_VMWARE_BALLOON=m
(这一部分比较容易出问题,参考下文异常部分)
修改grub引导,重启
安装完成后,需要修改Grub引导顺序,让新安装的内核作为默认内核。
grub.conf文件,
vi /etc/grub.conf
#boot=/dev/sda
default=0
timeout=5
splashimage=(hd0,0)/grub/splash.xpm.gz
hiddenmenu
title CentOS (3.10.58)
root (hd0,0)
...
数一下刚刚新安装的内核在哪个位置,从0开始,然后设置default为那个数字,一般新安装的内核在第一个位置,所以设置default=0。
重启reboot:
boot-with-new-kernel
确认当内核版本
# uname -r
3.10.58
升级内核成功!
3. 异常
编译失败(如缺少依赖包)
可以先清除,再重新编译:
# make mrproper #完成或者安装过程出错,可以清理上次编译的现场
# make clean
在vmware虚拟机上编译,出现类似下面的错误
# make install
sh /usr/src/linux-3.10.58/arch/x86/boot/install.sh 3.10.58 arch/x86/boot/bzImage \
System.map "/boot"
ERROR: modinfo: could not find module vmware_balloon
可以忽略,如果你有强迫症的话,尝试以下办法:
要在vmware上需要安装VMWARE_BALLOON,可直接修改.config文件,但如果vi直接加入CONFIG_VMWARE_BALLOON=m依然是没有效果的,因为它依赖于HYPERVISOR_GUEST=y。如果你不知道这层依赖关系,通过make menuconfig后,Device Drivers -》 MISC devices 下是找不到VMware Balloon Driver的。(手动vi .config修改HYPERVISOR_GUEST后,便可以找到这一项),另外,无论是通过make menuconfig或直接vi .config,最后都要运行sh -c ’yes "" | make oldconfig’一次得到最终的编译配置选项。
然后,考虑到vmware_balloon可能在这个版本里已更名为vmw_balloon,通过下面的方法保险起见:
# cd /lib/modules/3.10.58/kernel/drivers/misc/
# ln -s vmw_balloon.ko vmware_balloon.ko #建立软连接
其实,针对安装docker的内核编译环境,最明智的选择是使用sciurus帮我们配置好的.config文件。
也建议在make bzImage之前,运行脚本check-config.sh检查当前内核运行docker所缺失的模块。
当提示缺少其他module时如NF_NAT_IPV4时,也可以通过上面的方法解决,然后重新编译。
4. 几个重要的Linux内核文件介绍
在网络中,不少服务器采用的是Linux系统。为了进一步提高服务器的性能,可能需要根据特定的硬件及需求重新编译Linux内核。编译Linux内核,需要根据规定的步骤进行,编译内核过程中涉及到几个重要的文件。比如对于RedHat Linux,在/boot目录下有一些与Linux内核有关的文件,进入/boot执行:ls –l。编译过RedHat Linux内核的人对其中的System.map 、vmlinuz、initrd-2.4.7-10.img印象可能比较深刻,因为编译内核过程中涉及到这些文件的建立等操作。那么这几个文件是怎么产生的?又有什么作用呢?
(1)vmlinuz
vmlinuz是可引导的、压缩的内核。“vm”代表“Virtual Memory”。Linux 支持虚拟内存,不像老的操作系统比如DOS有640KB内存的限制。Linux能够使用硬盘空间作为虚拟内存,因此得名“vm”。vmlinuz是可执行的Linux内核,它位于/boot/vmlinuz,它一般是一个软链接。
vmlinuz的建立有两种方式。
一是编译内核时通过“make zImage”创建,然后通过:“cp /usr/src/linux-2.4/arch/i386/linux/boot/zImage /boot/vmlinuz”产生。zImage适用于小内核的情况,它的存在是为了向后的兼容性。
二是内核编译时通过命令make bzImage创建,然后通过:“cp /usr/src/linux-2.4/arch/i386/linux/boot/bzImage /boot/vmlinuz”产生。
bzImage是压缩的内核映像,需要注意,bzImage不是用bzip2压缩的,bzImage中的bz容易引起误解,bz表示“big zImage”。 bzImage中的b是“big”意思。
zImage(vmlinuz)和bzImage(vmlinuz)都是用gzip压缩的。它们不仅是一个压缩文件,而且在这两个文件的开头部分内嵌有gzip解压缩代码。所以你不能用gunzip 或 gzip –dc解包vmlinuz。
内核文件中包含一个微型的gzip用于解压缩内核并引导它。两者的不同之处在于,老的zImage解压缩内核到低端内存(第一个640K),bzImage解压缩内核到高端内存(1M以上)。如果内核比较小,那么可以采用zImage 或bzImage之一,两种方式引导的系统运行时是相同的。大的内核采用bzImage,不能采用zImage。
vmlinux是未压缩的内核,vmlinuz是vmlinux的压缩文件。
(2) initrd-x.x.x.img
initrd是“initial ramdisk”的简写。initrd一般被用来临时的引导硬件到实际内核vmlinuz能够接管并继续引导的状态。比如,使用的是scsi硬盘,而内核vmlinuz中并没有这个scsi硬件的驱动,那么在装入scsi模块之前,内核不能加载根文件系统,但scsi模块存储在根文件系统的/lib/modules下。为了解决这个问题,可以引导一个能够读实际内核的initrd内核并用initrd修正scsi引导问题。initrd-2.4.7-10.img是用gzip压缩的文件,下面来看一看这个文件的内容。
initrd实现加载一些模块和安装文件系统等。
initrd映象文件是使用mkinitrd创建的。mkinitrd实用程序能够创建initrd映象文件。这个命令是RedHat专有的。其它Linux发行版或许有相应的命令。这是个很方便的实用程序。具体情况请看帮助:man mkinitrd
下面的命令创建initrd映象文件:
(3) System.map
System.map是一个特定内核的内核符号表。它是你当前运行的内核的System.map的链接。
内核符号表是怎么创建的呢? System.map是由“nm vmlinux”产生并且不相关的符号被滤出。对于本文中的例子,编译内核时,System.map创建在/usr/src/linux-2.4/System.map。像下面这样:
nm /boot/vmlinux-2.4.7-10 》 System.map
下面几行来自/usr/src/linux-2.4/Makefile:
nm vmlinux | grep -v ’(compiled)|(.o
)|()|(..ng
)|(LASHDI)’ | sort 》 System.map
然后复制到/boot:
cp /usr/src/linux/System.map /boot/System.map-2.4.7-10
在进行程序设计时,会命名一些变量名或函数名之类的符号。Linux内核是一个很复杂的代码块,有许许多多的全局符号。
Linux内核不使用符号名,而是通过变量或函数的地址来识别变量或函数名。比如不是使用size_t BytesRead这样的符号,而是像c0343f20这样引用这个变量。
对于使用计算机的人来说,更喜欢使用那些像size_t BytesRead这样的名字,而不喜欢像c0343f20这样的名字。内核主要是用c写的,所以编译器/连接器允许我们编码时使用符号名,当内核运行时使用地址。
然而,在有的情况下,我们需要知道符号的地址,或者需要知道地址对应的符号。这由符号表来完成,符号表是所有符号连同它们的地址的列表。Linux 符号表使用到2个文件:/proc/ksyms和System.map。
/proc/ksyms是一个“proc file”,在内核引导时创建。实际上,它并不真正的是一个文件,它只不过是内核数据的表示,却给人们是一个磁盘文件的假象,这从它的文件大小是0可以看出来。然而,System.map是存在于你的文件系统上的实际文件。当你编译一个新内核时,各个符号名的地址要发生变化,你的老的System.map具有的是错误的符号信息。每次内核编译时产生一个新的System.map,你应当用新的System.map来取代老的System.map。
虽然内核本身并不真正使用System.map,但其它程序比如klogd, lsof和ps等软件需要一个正确的System.map。如果你使用错误的或没有System.map,klogd的输出将是不可靠的,这对于排除程序故障会带来困难。没有System.map,你可能会面临一些令人烦恼的提示信息。
另外少数驱动需要System.map来解析符号,没有为你当前运行的特定内核创建的System.map它们就不能正常工作。
Linux的内核日志守护进程klogd为了执行名称-地址解析,klogd需要使用System.map。System.map应当放在使用它的软件能够找到它的地方。执行:man klogd可知,如果没有将System.map作为一个变量的位置给klogd,那么它将按照下面的顺序,在三个地方查找System.map:
/boot/System.map
/System.map
/usr/src/linux/System.map
System.map也有版本信息,klogd能够智能地查找正确的映象(map)文件。
雷电模拟器error1161怎么办
有的玩家在使用雷电模拟器的时候出现了error错误,提示1161或1153等错误代码,无法正常启动,这很可能是因为我们的系统中存在与模拟器相冲突的程序,只要将他们都关闭就可以解决问题了。
雷电模拟器error1161怎么办:
1、首先按下快捷键“win+r”打开运行,输入control,这样就可以进入“控制面板”了。
2、将查看方式更改为“小图标”,然后进入“程序和功能”
3、然后在左上角打开“启用或关闭windows功能”。
4、接着在其中找到并取消勾选“hyper-V”。
5、再找到“windows沙盒”“windows虚拟机监控程序平台”“虚拟机平台”全部取消勾选,完成后点击“确定”。
6、关闭完成后,在左下角搜索“cmd”。
7、选择以管理员身份运行命令提示符。
8、在其中输入“bcdedit/sethypervisorlaunchtypeoff”回车确定后即可正常运行雷电模拟器了。
docker 遇到这个是什么原因引起的,怎么解决
在 Windows 上安装Docker是一个相当简单和直接的过程,之前接触Docker是在 Centos 系统下,在 Windows 下并没有尝试过
我司的项目一直在用Docker,我在我司用的电脑也是 Windows10,其他人基本都是 Mac,入职的时候我是按照内部 Wiki建的环境,使用的VirtualBox和vagrant
不过现在有一个新的项目,所以还是尝试一下使用Docker,同时为了在自己笔记本上假期练习或者修改 Bug 方便点,就在自己的电脑上装起来Docker
开始说我的问题吧
1、家庭版安装 Docker for Windows
我的笔记本当初买的时候就家庭版,也没有太关注,看文档直接下载了Docker for Windows,结果安装就GG了,直接提示:
Installation failed:one pre-requisite is not full filled
Docker for Windows requires Windows 10 Pro or Enterpriser version 14393,or Windows server 2016 RTM to run
这是什么原因呢,原因就是Docker可以支持在 Mac、Windows、Linux 上安装,但是在 Windows10 系统中Docker for Windows目前只能在 64 位的 Windows10 专业版、企业版、教育版下才能安装,Win7/Win8/Win10 家庭版需要通过Docker Toolbox来安装,我的电脑是家庭版的,却要安装Docker for Windows
2、在安装了 Hyper-V 的 Windows 上安装 Docker Toolbox
这个是最坑的,可能遇到好几个坑
Docker for Windows是依赖 Hyper-v 的,但是Docker Toolbox是用VirtualBox的,我在上一步的时候已经安装了Hyper-v,还是之前Windows10家庭版的功能中没有Hyper-V的解决方法 文中发的方法添加的Hyper-v
在Windows功能中关闭居然没生效,重启过的,安装Docker Toolbox倒是没有什么大问题
1)但是如果像我一样安装了Hyper-V,可能将无法正常使用,尝试启动Docker QuickStart Terminal,将会出现以下错误消息:
Running pre-create checks...
Error with pre-create check: "This computer is running Hyper-V. VirtualBox won’t boot a 64bits VM when Hyper-V is activated. Either use Hyper-V as a driver, or disable the Hyper-V hypervisor. (To skip this check, use --virtualbox-no-vtx-check)"
Looks like something went wrong in step ´Checking if machine default exists´... Press any key to continue...
这个我的解决方式是直接把Hyepr-v禁用,管理员模式运行 CMD:
//To disable:
bcdedit /set hypervisorlaunchtype off
//To enable:
bcdedit /set hypervisorlaunchtype auto
问题就解决了,当然还有另外一种方式
我们修改启动文件以允许它创建默认的 VM,我们要修改的文件位于C:\Program Files\Docker Toolbox\start.sh,要修改文件,必须在以管理员身份运行的器中打开文件
虚拟机 ubuntu怎么开libvirtd
使用virsh连接到别的服务器时,使用的是tcp连接
virsh -c qemu+tcp://host/system
如果目标服务器没有开启libvirtd的tcp端口监听时,会出现
error: unable to connect to server at ’host:16509’: Connection refused
error: failed to connect to the hypervisor
ubuntu下解决方法
sed -i ’s/#listen_tls = 0/listen_tls = 0/g’ /etc/libvirt/libvirtd.conf
sed -i ’s/#listen_tcp = 1/listen_tcp = 1/g’ /etc/libvirt/libvirtd.conf
sed -i ’s/#auth_tcp = "sasl"/auth_tcp = "none"/g’ /etc/libvirt/libvirtd.conf
vi /etc/default/libvirt-bin
修改为libvirt_opts = "-d -l"
增加-l监听tcp
service libvirt-bin restart
centos下解决方法
sed -i ’s/#listen_tls = 0/listen_tls = 0/g’ /etc/libvirt/libvirtd.conf
sed -i ’s/#listen_tcp = 1/listen_tcp = 1/g’ /etc/libvirt/libvirtd.conf
sed -i ’s/#auth_tcp = "sasl"/auth_tcp = "none"/g’ /etc/libvirt/libvirtd.conf
sed -i ’s/#LIBVIRTD_ARGS="--listen"/LIBVIRTD_ARGS="--listen"/g’ /etc/sysconfig/libvirtd
service libvirtd restart
X86的三振出局(triple-fault)
triple fault从字面含义理解就是三次错误(失误)。
在X86的世界里,triple-fault真的就是三振出局了,因为系统会被shut down。
通常这个错误很不容易触发,因为X86的设计者也知道“再一再二,不能再三再四”。当系统接连出现了两次fault,第三次fault就会导致系统的关机,这个是硬件的行为,软件没法干预,或者说虽然叫fault,但是没有triple-fault的出错处理的机会!
这个triple-fault一般在虚机环境里比较容易发生,通常是因为内存的问题,导致页表挂了,然后page fault再次被触发,第三次就直接把虚机shutdown了。
在虚拟化环境里面进行调试运行软件的好处在于,有hypervisor的存在,CPU的triple-fault会导致一个VMExit到host(需要正确配置VMCS),hypervisor会保留当时虚机的现场,从而便于后期做Post-mortem分析。
下面demo一下怎么故意触发triple-fault,以及在虚拟化环境下triple-fault的VMEXIT都包含哪些信息。
要在guest里面触发一个triple fault,最简单的就是在double-fault handler里面再触发一个fault就可以。
例如,在Linux内核当中进行下面的修改。
dotraplinkage void
do_general_protection(struct pt_regs *regs, long error_code)
{
struct task_struct *tsk;
printk("XXXXXXXXXXX TaoW: %s, %d\n", __func__, __LINE__);
error_code /= 0; /// TaoW: divided by 0, to trigger triple-fault
RCU_LOCKDEP_WARN(!rcu_is_watching(), "entry code didn’t wake RCU");
conditional_sti(regs);
if (v8086_mode(regs)) {
local_irq_enable();
handle_vm86_fault((struct kernel_vm86_regs *) regs, error_code);
return;
}
...
}
我自己的toyvmm hypervisor的VMEXIT里面可以得到
Exit Reason: 0x2 (2)
Exit Qualif: 0
VMexit-interruption-information: 00000000
VMexit-interruption-error-code: 00000000
VMexit-instruction-length: 00000001
EXIT REASON: (launched = 1), 02 EXIT_REASON_TRIPLE_FAULT
guest Interrupt State: 0x0
guest Active State: 0x0
# GUEST_RIP = 0x8a07
# GUEST_RFLAGS = 0x10046
that is it, 说简单也简单。
loading vmware hypervisor 报错fatal error:8(device error)
设备错误。电脑中oadingvmware和hypervisor不是同一款运行系统如果强制运行就会出现设备报错显示fatalerror:8(deviceerror。可以通过重启来解决问题。

更多文章:
root手机会有什么后果(我想开启root权限,那么做之后对手机有什么危害吗)
2026年9月7日 21:00
win7更新和安全在哪里(win7 64位 windows update更新存储文件位置在哪里 啊)
2026年9月7日 18:50
阿里旺旺苹果手机版(苹果iPhone 4手机能用阿里旺旺吗)
2026年9月7日 17:50
启动盘制作完成后怎么放入系统(u盘启动盘制作好了要怎么做才能装系统)
2026年9月7日 13:30
cpu天梯图2022年11月(2022手机cpu性能排行榜天梯图)
2026年9月7日 10:10




