如何使用GRUB2直接从硬盘启动Debian 9 ISO文件

本教程将向您展示如何使用GRUB2引导装载程序直接从硬盘引导Debian 9 ISO文件,因此您不必创建活动CD或活动USB。 如今,创建Linux live USB超级容易,您可以使用图形工具或从命令行进行操作。 但是,如果您周围没有USB闪存驱动器,或者要将Debian安装到USB闪存驱动器,该怎么办?

抢救GRUB

GRUB2引导加载程序能够直接从硬盘驱动器引导Linux ISO映像文件。 GRUB2支持许多文件系统,包括但不限于ext4,HFS +和NTFS,这意味着您可以将ISO文件放在这些文件系统中的任何一个上。 GRUB 2还可以直接从LVM和RAID设备读取文件。 GRUB2还具有网络支持。 您可以使用TFTP协议从网络加载OS映像。

在本教程中,我们将仅讨论从本地硬盘启动ISO文件。 要使用此功能,您需要拥有一个带有GRUB2的Linux发行版作为您的计算机上已安装的引导加载程序。

如何使用GRUB2直接从硬盘启动Debian 9 ISO文件

首先,启动计算机并启动现有的Linux发行版。 下载Debian 9 ISO。 您可以使用netinstall ISO或live CD ISO。 您还需要下载 hd-media/initrd.gzhd-media/vmlinuz 从这个页面

  • 初始化文件 是最初的虚拟磁盘。
  • vmlinuz 是Linux内核。

如果要使用图形化安装程序来允许您使用鼠标单击,请下载 hd-media/gtk/initrd.gzhd-media/gtk/vmlinuz 代替。 将这三个文件放入同一目录。 接下来,打开一个终端窗口并编辑 /etc/grub.d/40_custom 使用文本编辑器(例如nano)保存文件。

sudo nano /etc/grub.d/40_custom

在此文件中,我们可以将自定义条目添加到GRUB引导菜单。 在这种情况下,我们想添加一个条目来引导Debian 9 ISO文件。 以下是一个示例。

menuentry "Debian 9.4 net-install.iso" {
        insmod ext2
        set root="(hd0,2)"
        linux /linuxbabe/vmlinuz
        initrd /linuxbabe/initrd.gz
}

说明:

  • 菜单项:此项将显示在GRUB2引导菜单上。 您可以随意命名。
  • 插入 命令插入一个模块。 由于这三个文件存储在我的主分区中,因此 ext2 模块是必需的。 如果这些文件位于NTFS分区上,则需要 insmod ntfs 代替。
  • 命令将第一个硬盘驱动器的第二个分区设置为根目录。 (我的主分区是我的第一个硬盘驱动器的第二个分区。)
  • linux 命令从指定路径加载Linux内核。 vmlinuz 表示支持虚拟内存的压缩Linux内核可执行文件。 字母“ z”表示已压缩。
  • initrd 命令从指定路径加载初始虚拟磁盘。 它只能在 linux 命令已运行。 初始虚拟磁盘是安装到RAM的最小根文件系统。

请注意,GRUB不会将IDE与SCSI区分开。 在Linux中, /dev/hda 指的是第一个IDE硬盘驱动器, /dev/sda 指第一个SCSI或SATA硬盘驱动器。 如果您使用NMVe SSD,则其名称可能为 /dev/nvme0n1/dev/nvme1n1 等等。 但是在GRUB中,第一个硬盘驱动器始终称为 hd0,无论接口类型如何。 还要注意,GRUB中的分区号从1开始,而不是0。

要检查分区号,可以运行 lsblk 要么 sudo parted -l 终端窗口中的命令。 您还可以在Gparted分区编辑器中看到它,可以通过发出以下命令来安装它。

sudo apt install gparted

在我的电脑上 vmlinuzinitrd.gz 和Debian ISO映像存储在/home/linuxbabe/ 目录,但是我有一个单独的主分区,并且在GRUB配置文件中将其设置为root,因此路径应以 /linuxbabe,不是 /home/linuxbabe/

保存并关闭文件。 然后使用以下命令更新GRUB引导菜单:

sudo grub-mkconfig -o /boot/grub/grub.cfg

在Fedora上,要运行的命令是:

sudo grub2-mkconfig -o /boot/grub2/grub.cfg

在基于Debian的Linux发行版上,您可以使用以下命令来更新GRUB引导菜单。

sudo update-grub

您可以从输出中看到GRUB添加了新的菜单项。 (较新版本的GRUB不会显示此消息。)

Debian开机iso grub2

现在重新启动计算机。 在GRUB引导菜单上,您可以看到刚刚添加的菜单项。 请注意,您可能需要按右Shift键才能在计算机重新启动时调出GRUB引导菜单。

从硬盘启动debian iso

选择它,然后按Enter。 Linux内核(vmlinuz)和初始RAM磁盘(intird.gz)将被加载到内存中。 然后,将从Debian ISO映像加载其他安装程序组件。

避免常见的陷阱

您可能已使用以下代码从硬盘启动Ubuntu ISO,现在尝试对Debian 9 ISO使用相同的语法。

menuentry "ubuntu-16.04-desktop-amd64.iso" {
   set isofile="/home/username/Downloads/ubuntu-16.04-desktop-amd64.iso"
   loopback loop (hd0,1)/$isofile
   linux (loop)/casper/vmlinuz.efi boot=casper iso-scan/filename=$isofile quiet noeject nopromt spalsh --
   initrd (loop)/casper/initrd.lz
}

它不会工作。 如果使用此语法,则在引导Debian ISO后会出现以下错误。

No common CD-ROM drive was detected.

要么

No medium found containing a live file system.

原因是Ubuntu方法在ISO映像中使用Linux内核和初始ramdisk,但是您必须使用 hd-media/vmlinuzhd-media/initrd.gz 为了从硬盘启动Debian安装程序。 Debian ISO映像是Debian安装程序所需的CD-ROM /介质。

其他一些技巧

如果这三个文件位于磁盘分区的顶级目录中,则在指定指向以下文件的路径时,请不要遗漏开头的斜杠 vmlinuzintird.gz。 换句话说,您需要

linux /vmlinuz
initrd /initrd.gz

而不是

linux vmlinuz
initrd initrd.gz

如果这三个文件位于MBR磁盘的扩展分区上,则分区号从5开始,而不是1。例如,扩展分区内的第一个逻辑分区将被编号为5;而扩展分区中的第一个逻辑分区将被编号为5。 扩展分区内的第二个逻辑分区将编号为6。

如果计算机内部有SATA磁盘和NVMe SSD,则SATA磁盘是第一个,NVMe SSD是第二个。 USB驱动器和NVMe SSD也是如此。

我希望本教程可以帮助您使用GRUB2引导程序从硬盘引导Debian 9 ISO映像。 与往常一样,如果您发现这篇文章很有用,请订阅我们的免费新闻通讯以获取更多提示和技巧。

Sidebar