从 syslinux 启动 ISO 分区时出错

从 syslinux 启动 ISO 分区时出错

我的分区表如下:
/dev/sda
- /dev/sda1 Arch Linux (200G)
- /dev/sda2 Swap (16G)
- /dev/sda3 Recovery (1G)
- /dev/sda4 Extended
- - /dev/sda5 Arch_201212 (256M)
- Free Space (15G)

我曾经将dd最新的 arch-linux 安装 ISO 写入 /dev/sda5。如果我挂载该分区,所有文件都在那里。恢复分区仅包含 syslinux 加载程序,用于启动 /dev/sda4 之后的各个分区。

当我加载该条目时,它显示:

正在启动...
isolinux.bin 丢失或损坏

然后它尝试使用 PXE/网络适配器进行启动,但显然失败了。

虽然不是丢失。它位于 [ /dev/sda5 ]/isolinux/isolinux.bin

这是我的syslinux.cfg/dev/sda3

默认 arch-recovery
PROMPT 0
TIMEOUT 100
UI menu.c32
菜单标题恢复分区
菜单颜色边框 30;44 #40ffffff #a0000000 std
菜单颜色标题 1;36;44 #9033ccff #a0000000 std
菜单颜色选择 7;37;40 #e0ffffff #20ffffff 全部
菜单颜色取消选择 37;44 #50ffffff #a0000000 std
菜单颜色帮助 37;40 #c0ffffff #a0000000 std
菜单颜色 timeout_msg 37;40 #80ffffff #00000000 std
菜单颜色超时 1;37;40 #c0ffffff #00000000 std
菜单颜色 msg07 37;40 #90ffffff #a0000000 std
菜单颜色 tabmsg 31;40 #30ffffff #00000000 std
标签 arch-recovery
菜单标签 Arch Linux Live CD
COM32 chain.c32
APPEND hd0 5
标签 hdt
菜单标签 HDT(硬件检测工具)
COM32 hdt.c32
标签 reboot
菜单标签 重新启动
COM32 reboot.c32
标签 off
菜单标签 关机
COMBOOT poweroff.com

答案1

使用 Knoppix 的示例。

  • 创建挂载点以使用环回挂载 ISO:

    mkdir /mnt/LiveISO
    
  • 挂载映像:

    mount -t iso9660 -o loop,ro /DOWNLOADS/Knoppix-3.7-en.iso /mnt/LiveISO
    
  • 在您要从中启动的设备上创建一个目录:

    mkdir /mnt/hda4/KNOPPIX
    
  • 将已挂载映像的内容复制到该目录:

    cp /mnt/LiveISO/KNOPPIX/* /mnt/hda4/KNOPPIX/
    
  • 将内核和 initrd 文件复制到您的启动设备:

    cp /mnt/LiveISO/boot/* /boot
    
  • 蛴螬:

    title KNOPPIX  
    root (hd0,0)  
    kernel /linux26 ramdisk_size=100000 fromhd=/dev/hda4  
    initrd /minirt26.gz  
    savedefault  
    boot
    
  • Lilo:

    image=/boot/linux26  
    initrd=/boot/minirt26.gz  
    label=KNOPPIX  
    append="ramdisk_size=100000 fromhd=/dev/hda4"
    

基本思路是将 iso 的内容复制到一个分区。然后,在当前的 linux 操作系统中,将 iso 中的内核和 initrd 映像复制到当前的启动目录。最后,编辑 LILO,使其指向刚刚复制的内核和 initrd 映像,并确保添加“fromhd”行,以便“livecd”知道其余 knoppix 文件的位置。我知道类似的说明也适用于 kanotix(这很有意义,因为它是基于 knoppix 的)。其他 iso(例如非 livecd)的唯一可能问题是它们可能没有像 knoppix 发行版那样的“fromhd”选项。

在此处找到:从硬盘启动 ISO 映像?

答案2

我希望对原始问题给出一个明确的答案,这里重述为“为什么在 dd_bitcopied_isoimage 到 /dev/sda5 之后,isolinux.bin 丢失或损坏了?”(没有不回答就无法解决的替代命题!)

isolinux.bin 是 isofs_image 的引导加载程序。当使用 mkisofs(或任何克隆,如 genisoimage、wodim 等)或较新的 xorriso 创建 isoimage 时,该 isofsimage 上的 isolinux.bin 的物理位置被硬编码到主 mbr 或 isohybrid-mbr 中,以便在启动时 BIOS 或类似固件可以访问它。

dd isoimage保持/dev/sda 该精确位置以便能够启动。

dd isoimage保持/dev/sda5相对于mbr 所在的位置/dev/sda5不变!!! 只需尝试:/dev/sda

qemu-system-x_YYYY  /dev/sda5  

去理解它!

相关内容