无法使用 PXE“写入错误:设备上没有剩余空间”启动 VM,并最终进入 dracut 环境

无法使用 PXE“写入错误:设备上没有剩余空间”启动 VM,并最终进入 dracut 环境

我正在设置 PXE 服务器来自动部署 KVM 来宾。

KVM 虚拟机管理程序主机:Fedora 29

KVM 来宾:Centos 7

在安装过程中我遇到一个问题/sbin/dmsquash-live-root:写入错误:设备上没有剩余空间在此之后,一些“超时脚本”将启动,并出现以下安装失败。

环境快速概览:

  1. DHCP服务器没问题

dhcpd配置文件

subnet 172.31.0.0 netmask 255.255.255.0 {
 range 172.31.0.51 172.31.0.120;
 default-lease-time 1800;
 max-lease-time 3600;
 next-server 172.31.0.32;
 filename "pxelinux/pxelinux.0"; 
 option routers 172.31.0.1;
 option subnet-mask 255.255.255.0;
 option broadcast-address 172.31.0.255;
 option domain-name-servers 172.31.0.2;
 option domain-name "corp.example.com";
}

VM实际获取IP地址和TFTP服务器IP地址

  1. TFTP服务器也可以
[root@kickstart ~]# ll /var/lib/tftpboot/pxelinux/
total 57872
-rw-r--r--. 1 root root 52584760 Apr 29 17:07 initrd.img
-rw-r--r--. 1 root root    26759 Apr 29 17:02 pxelinux.0
drwxr-xr-x. 2 root root       21 May  1 13:48 pxelinux.cfg
-rwxr-xr-x. 1 root root  6639904 Apr 29 17:07 vmlinuz

启动文件

[root@kickstart ~]# cat /var/lib/tftpboot/pxelinux/pxelinux.cfg/default
default Linux
prompt 1
timeout 10
display boot.msg
label Linux
        menu label ^Install Centos MA MAN
        menu default
        kernel vmlinuz
        append initrd=initrd.img ks=http://kickstart.corp.example.com/anaconda/anaconda-ks.cfg

VM实际上获取了vmlinuz和initrd.img

  1. 我相信 anaconda-ks.cfg 非常标准
ignoredisk --only-use=sda
keyboard 'us'
rootpw --iscrypted $1$tg.NYz9t$GnRVNLuQdB6mperFmUdwL.
lang en_US
halt
timezone America/New_York
text
network  --bootproto=dhcp --device=eth0
network  --hostname=test1.corp.example.com
url --url="http://kickstart.corp.example.com/install" # Apache server
auth  --useshadow  --passalgo=sha512
firewall --enabled --port=ssh
selinux --enforcing
skipx
bootloader --location=mbr --boot-drive=sda
autopart --type=lvm
clearpart --none --initlabel
  1. 安装源是Apache服务器

它可以在网络上获得。

<VirtualHost *:80>
DocumentRoot /www/docs/kickstart.corp.example.com
ServerName kickstart.corp.example.com
Options +Indexes
</VirtualHost>

安装冻结的点

我注意到“SATA link down”消息(参见上面的屏幕截图)和安装 /dev/loop0 的问题,但我不知道如何解释它。

我不知道在哪里进一步挖掘。

答案1

至此,guest已经成功启动内核并运行在initramfs环境中。安装程序 initramfs 正在加载一个 squashfs 文件,该文件位于<CentOS DVD root>/LiveOS/squashfs.img.在这种情况下,我相信它可能会从http://kickstart.corp.example.com/install/LiveOS/squashfs.imgCentOS 软件包存储库服务器加载它,或者甚至可能通过互联网加载它。

(如果后者为真,您可以inst.stage2=http://kickstart.corp.example.com/install向该append行添加一个引导选项/var/lib/tftpboot/pxelinux/pxelinux.cfg/default,以强制从本地源加载它。)

由于根文件系统尚未挂载,因此会将其加载到 RAM 磁盘中。此时,安装程​​序 UI 尚未启动,并且根本没有触及本地磁盘,尽管内核已检测到本地磁盘/dev/vda存在。

在我手头的旧 CentOS 7 ISO 映像上,squashfs.img文件大小为 352 MiB。最新版本可能会比这个大一些;curl封装在记录的消息中的(实际执行下载的工具)的输出dracut-initqueue表明您的 ramsquashfs.img大小为 432 MiB,并且下载在大约 75% 时中止,因为没有足够的空间(在 ramdisk 中,我假设)。

由于squashfs.img下载不完整,安装会失败,然后RAM磁盘仍然是100%满,导致No space left on device错误消息。

您的来宾虚拟机分配了多少 RAM?如果虚拟机很小,您可能会耗尽内存。

答案2

我相信该错误是由于 kickstart 文件指向标记为“sda”的虚拟驱动器而导致的,而该虚拟驱动器实际上称为“vda”。您可以在您发布的输出的中间位置看到“vda”,它的大小约为 21GB。

ignoredisk --only-use=vda 

bootloader --location=mbr --boot-drive=vda 

clearpart --all --initlabel --drives=vda

在 anaconda-ks.cfg 文件中进行这些更改,然后就可以开始了。请注意,我的清晰部分命令是 --all,而您的命令设置为 --none。

相关内容