我正在尝试通过 KVM 使用自动安装。步骤如下:
- 从磁盘加载内核和 initrd
- 它将安装定制的Linux到硬盘上,并自动重启
- 从硬盘启动
因此我使用这个命令来安装我定制的 Linux:
virt-install --name Kernel_Test --ram 16384 --vcpus=8 --os-type=linux --os-variant=rhel6 --vnc --hvm --disk path=/kvm_images//Kernel_Test.qcow2,device=disk,format=qcow2,size=50,bus=sata --boot hd,kernel=/tmp/my_vmlinuz,initrd=/tmp/my_image,kernel_args="append stage2=initrd:" --network bridge=bridge1,model=virtio --network bridge=bridge1,model=virtio --network bridge=bridge0,model=virtio
但是会陷入循环,如下:
- 从内核/initrd 启动 -> 安装完成
- 重新开始
- 从内核/initrd 启动 -> 安装完成
- 重新开始
- (环形)
我尝试使用以下命令剥离内核相关的配置,但没有成功:
virsh dumpxml <VMNAME> >> vmname.xml
(do something to change vmname.xml, strip kernel/initrd boot part)
virsh define vmname.xml
它仍将继续循环,当我dumpxml
再次执行时,它仍然保存内核/initrd 启动配置。
因为我需要自动安装,我怎样才能让 KVM 只从目标内核/initrd 启动一次?我已经--boot hd,
在前面设置了启动顺序kernel= ...
,但它只是跳过它并继续从本地内核/initrd 启动。
答案1
如果存在直接内核启动,则将始终使用它,并且将忽略常规启动顺序。
这最好的处理此问题的方法是不使用直接内核启动来安装系统,而是传递要--location
安装的 Linux 发行版所在的位置(可以是本地磁盘或远程 Web 服务器、FTP 或 NFS 服务器)。这还允许您注入本地 kickstart 或预置文件以实现完全自动化的安装。例如:
--boot hd --location http://mirror.centos.org/centos/7/os/x86_64 --initrd-inject=my_vm.ks --extra-args="ks=file:/my_vm.ks"
如果出于某种原因您无法执行此操作,请--noreboot
在 virt-install 退出后传递并破解 XML。您必须手动重新启动虚拟机。请记住,virt-install 可以退出前安装完成,因此简单地重新启动虚拟机将无法可靠地工作并且可能会中断正在进行的安装。