从Linux ISO文件启动计算机
查看ISO文件中Linux内核文件的路径
挂载ISO文件
sudo mount -t iso9660 -o ro /home/lujun9972/Downloads/KNOPPIX_V7.2.iso /mnt
查看ISO文件内容
ls /mnt/boot/isolinux
balder.img boot.cat boot.msg f2 f3 german.kbd grub.exe isolinux.bin isolinux.cfg linux logo.16 memdisk memtest minirt.gz
其中linux文件就是Linux内核,minirt.gz文件是initrd镜像。
GRUB中的磁盘命名方式
GRUB的磁盘命名方式类似 (hd0,1) 这样的,这里的0表示是第一块磁盘(从0开始编号),后面的1表示第一个分区(从1开始编号),它相当于Linux中的/dev/sda1。
注意,磁盘编号是从0开始的,所以 /dev/sdb1 对应的是 (hd1,1) , /dev/sdc2 对应的是 (hd2,2) ,以此类推。如果不确定 ISO 文件在哪个分区,可以在 GRUB 启动菜单中按 c 进入命令行,用 ls 命令逐个探测分区内容来确认。
还需要特别注意的是,GRUB 中的文件路径是相对于分区根目录的,而不是相对于 Linux 系统的根目录。比如,如果你的 /home 是一个独立分区(挂载在 /dev/sdb1 上),那么 Linux 中的路径 /home/lujun9972/Downloads/xxx.iso 在 GRUB 中对应的路径是 /lujun9972/Downloads/xxx.iso (去掉了 /home 前缀),因为 GRUB 直接访问的是 /dev/sdb1 分区本身的根目录。
配置GRUB2启动项
不同发行版的启动参数差异较大,下面分别以 Ubuntu 和 KNOPPIX 为例说明。
Ubuntu 示例
Ubuntu 使用 casper 组件来支持从 ISO 启动,内核和 initrd 文件位于 ISO 的 /casper/ 目录下。
编辑 /etc/grub.d/40_custom,加入下面内容
menuentry "Ubuntu ISO" {
set isofile="/home/lujun9972/Downloads/ubuntu-20.04.iso"
loopback loop (hd1,1)$isofile
linux (loop)/casper/vmlinuz boot=casper iso-scan/filename=${isofile} quiet splash
initrd (loop)/casper/initrd
}
KNOPPIX 示例
KNOPPIX 的内核和 initrd 文件位于 ISO 的 /boot/isolinux/ 目录下,使用 bootfrom 参数指定 ISO 所在的设备和路径。
编辑 /etc/grub.d/40_custom,加入下面内容
menuentry "KNOPPIX V7.2 ISO" {
set isofile="/lujun9972/Downloads/KNOPPIX_V7.2.iso"
loopback loop (hd1,1)$isofile
linux (loop)/boot/isolinux/linux bootfrom=/dev/sdb1${isofile}
initrd (loop)/boot/isolinux/minirt.gz
}
注意 bootfrom=/dev/sda1 中的设备名需要根据实际情况修改,比如 NVMe 磁盘会是 /dev/nvme0n1p1 。
最后运行
sudo grub-mkconfig -o /boot/grub/grub.cfg
更新GRUB配置
