我正在设置 PXE 服务器来自动部署 KVM 来宾。
KVM 虚拟机管理程序主机:Fedora 29
KVM 来宾:Centos 7
在安装过程中我遇到问题/sbin/dmsquash-live-root: write error: No space left on device,此后一些“超时脚本”启动,安装失败。
环境快速概览:
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";
}
Run Code Online (Sandbox Code Playgroud)
VM实际获取IP地址和TFTP服务器IP地址
[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
Run Code Online (Sandbox Code Playgroud)
启动文件
[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
Run Code Online (Sandbox Code Playgroud)
VM实际上获取了vmlinuz和initrd.img
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
Run Code Online (Sandbox Code Playgroud)
它可以在网络上获得。
<VirtualHost *:80>
DocumentRoot /www/docs/kickstart.corp.example.com
ServerName kickstart.corp.example.com
Options +Indexes
</VirtualHost>
Run Code Online (Sandbox Code Playgroud)

我注意到“SATA link down”消息(参见上面的屏幕截图)和安装 /dev/loop0 的问题,但我不知道如何解释它。
我不知道在哪里进一步挖掘。
至此,guest已经成功启动内核并运行在initramfs环境中。安装程序 initramfs 正在加载一个 squashfs 文件,该文件位于<CentOS DVD root>/LiveOS/squashfs.img. 在这种情况下,我相信它可能会从 CentOS 软件包存储库服务器加载它,http://kickstart.corp.example.com/install/LiveOS/squashfs.img或者甚至可能通过互联网加载它。
(如果后者为真,您可以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?如果虚拟机很小,您可能会耗尽内存。