在成功重建 Fedora ISO(用于 USB 记忆棒)后,添加了一个 kickstart 文件(https://serverfault.com/questions/548405/),现在我在查找 USB 介质上的 kickstart 文件时遇到了问题。
当从 CDROM 完成此操作时,您可以通过在启动中添加此参数来轻松启动:
linux ks=cdrom
这将启动 kickstart(假设 kickstart 文件名为 ks.cfg 并且位于磁盘的根目录中)。
现在,显然这对于 USB 驱动器来说会有所不同,所以根据我的研究,我假设这一行可以完成这项工作:
linux ks=hd:sdb1:/ks.cfg
显然这不起作用。我收到一条错误消息,提示我该驱动器已安装,无法重新安装。
编辑:实际错误信息:
mount: /dev/sdb1 is already mounted or /run/install/tmpmnt0 busy
Warning: Can't get kickstart from /dev/sdb1:/ks.cfg
为了测试语法是否正确,我将 kickstart 文件放在另一个 USB 记忆棒上,并加载相同的命令从新位置获取 ks.cfg:
linux ks=hd:sdc1:/ks.cfg
这确实有效(前提是 USB 驱动器按顺序安装,启动 -> sdb1,启动 -> sdc1)。安装将启动并完成安装,没有任何问题。显然,必须使用 2 个 U 盘有点令人沮丧且不可靠。
有没有解决的办法?
答案1
我尝试了所有方法,但只有这个方法有效:将 ks.cfg 放入 initrd 中。因此,以下步骤提取 initrd,在其中添加 ks.cfg,然后重新创建它。已使用 CentOS7 测试
首先将原始 .iso 映像安装到您的电脑上,并将其内容复制到 tmp/ 下
然后,
#Keep the original file
cp -ai tmp/isolinux/initrd.img initrd.img.orig
mkdir irmod
cd irmod
#Extract initrd in irmod/
xz -d < ../tmp/isolinux/initrd.img | cpio --extract --make-directories --no-absolute-filenames
#Add the ks.cfg in there
cp ../tmp/ks.cfg .
# Recreate the initrd.img inside isolinux/
find . | cpio -H newc --create | xz --format=lzma --compress --stdout > ../tmp/isolinux/initrd.img
#cleanup
cd ..
rm -r irmod
# Add ks=file:/ks.cfg to the boot parameters in isolinux.cfg. you can do it by hand, this is an example for our own isolinux.cfg
sed -s -i 's|ks=.*ks\.cfg ksdevice=link|ks=file:/k1.cfg|' ../tmp/isolinux/isolinux.cfg ../isolinux.cfg
然后照常创建图像:
cd tmp/
imgname="inaccess-centos7-ks1-v1.iso"
xorriso -as mkisofs -R -J -V "CentOS 7 x86_64" -o "../${imgname}" \
-b isolinux/isolinux.bin -c isolinux/boot.cat -no-emul-boot -boot-load-size 4 \
-boot-info-table -isohybrid-mbr /usr/share/syslinux/isohdpfx.bin .
cd ..
答案2
我可以通过执行以下操作来解决这个问题:
- 将 kickstart 文件放在目录顶部
isolinux
,并确保其名称为ks.cfg
我的
isolinux.cfg
文件如下所示:label linux menu label ^Install CentOS 7 kernel vmlinuz append initrd=initrd.img inst.ks=hd:LABEL=CentOS\x207\x20x86_64:/isolinux/ks.cfg inst.stage2=hd:LABEL=CentOS\x207\x20x86_64 quiet
引用时使用驱动器标签ks.cfg
可以使生成的 iso 映像更易于移植。(它可以变成可启动的 USB 驱动器)
答案3
我最喜欢的方法是使用 UUID,因为它很稳定。
我使用两个 pendrive,第一个装有 CentOS,第二个装有 kickstart。在第二个 pendrive 上保存 kickstart 后,我在 linux 中使用 blkid 命令检查其 UUID:/dev/sdg1:UUID="885E:0BD1" TYPE="vfat"
然后我在安装页面使用它:ks=hd:UUID=885E:0BD1:/ks.cfg
真的行!
答案4
现在,USB 上有一个与 ISO 映像大小相同的分区。只需使用剩余空间在 USB 上创建另一个分区,对其进行格式化,然后将 kickstart 文件放在那里即可。
UPD:尝试fdisk
,因为parted
这种情况下似乎不起作用。
UPD1:必须使用 xorriso 重新创建 iso