我正在设置 PXE 服务器来自动部署 KVM 来宾。
KVM 虚拟机管理程序主机:Fedora 29
KVM 来宾:Centos 7
在安装过程中我遇到一个问题/sbin/dmsquash-live-root:写入错误:设备上没有剩余空间在此之后,一些“超时脚本”将启动,并出现以下安装失败。
环境快速概览:
- 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地址
- 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
- 我相信 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
- 安装源是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.img
CentOS 软件包存储库服务器加载它,或者甚至可能通过互联网加载它。
(如果后者为真,您可以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。