使用 lvm 从 ISO 启动 Grub

使用 lvm 从 ISO 启动 Grub

在从 ISO 映像进行的简单启动过程中,以下语句可以正常运行:

menuentry "Ubuntu.iso" {
set isofile="/iso/ubuntu.iso"
loopback loop (hd0,3)$isofile
linux (loop)/casper/vmlinuz.efi boot=casper iso-scan/filename=$isofile      noeject noprompt --
initrd (loop)/casper/initrd.lz
}

其中hd0是第一个硬盘, 3 是分区号。

我希望知道如何进入 lvm 环境

loopback loop (hd0,3)$isofile   ----> (hd0,???)

blkid 命令的结果是

/dev/sda1: UUID="28f0906e-d285-42dd-b3cd-18ef27b9261e" TYPE="ext2" 
/dev/sda5: UUID="Nx2a6F-O11u-sZxe-HDvm-6a2u-zdUf-suvn46" TYPE="LVM2_member" 
/dev/mapper/sal06--vg-root: UUID="2adef9b5-66de-4ffc-9c04-b33199815a35" TYPE="ext4" 
/dev/mapper/sal06--vg-swap_1: UUID="95938380-8ee5-42c9-ad1b-eee1338870db" TYPE="swap"

我的 iso 在/dev/mapper/sal06--vg-root

答案1

最后我找到了方法

只需在 /etc/default/grub 中添加以下行

GRUB_PRELOAD_MODULES="lvm"

然后,在 /etc/grub.d/40_custom 中

menuentry "Ubuntu.iso" {
set isofile="/iso/ubuntu.iso"
search --no-floppy --fs-uuid --set=root <your LV uuid here >
loopback loop ($root)$isofile
linux (loop)/casper/vmlinuz.efi boot=casper iso-scan/filename=$isofile          noeject noprompt --
initrd (loop)/casper/initrd.lz

}

完成了,我在这里制作了一个视频

https://youtu.be/5MCWFStgkQU

答案2

受到您的解决方案和有点复杂的解决方案的启发我在这里找到,我使用了以下命令,用于加载 Fedora 27 KDE iso 和 Ubuntu 17.10 iso。

我刚刚在文件中添加了以下几行/etc/grub.d/40_custom

menuentry "Live Fedora KDE 27" --class fedora {
  insmod part_msdos
  insmod lvm
  set iso_path="/erik/Downloads/transmission/Fedora-KDE-Live-x86_64-27/Fedora-KDE-Live-x86_64-27-1.6.iso"
  search --no-floppy --fs-uuid --set=root 6340d364-fc09-44d1-914f-b902a6394a55
  loopback loop ($root)$iso_path
  linux (loop)/isolinux/vmlinuz iso-scan/filename=${iso_path} root=live:CDLABEL=Fedora-KDE-Live-27-1-6 rootfstype=auto rd.live.image quiet
  initrd (loop)/isolinux/initrd.img
}

menuentry "Ubuntu 17.10.1" --class ubuntu {
  insmod part_msdos
  insmod lvm
  set iso_path="/erik/Downloads/transmission/ubuntu-17.10.1-desktop-amd64.iso"
  search --no-floppy --fs-uuid --set=root 6340d364-fc09-44d1-914f-b902a6394a55
  loopback loop ($root)$iso_path
  linux (loop)/casper/vmlinuz.efi  file=/cdrom/preseed/ubuntu.seed boot=casper iso-scan/filename=${iso_path} quiet splash ---
  initrd (loop)/casper/initrd.lz
}

解释

  • 以 开头的行set iso_path定义了 iso 文件在逻辑卷上的路径。当我启动系统时,它位于/home/erik/Downloads/transmission/Fedora-KDE-Live-x86_64-27/Fedora-KDE-Live-x86_64-27-1.6.iso",但这/home是已安装的逻辑卷,因此我省略了这一行,并以 开头/erik/Downloads/…
  • 以 开头的行search末尾有一个奇怪的字母数字变量(即所谓的 UUID),以 开头6340。我从命令中获取了这个数字

    sudo blkid
    

    这让我和其他人得到了以下一行

    /dev/mapper/fedora_pluto-home: UUID="6340d364-fc09-44d1-914f-b902a6394a55" TYPE="ext4"
    
  • 然后,如果你想启动其他 iso 文件,另一个重要的事情是那些以linux和开头的行initrd。我通过打开 iso 文件使用file-roller(用于提取压缩档案的 GUI)或mc(控制台文件管理器)。

    • Fedora 及类似产品:进入目录/isolinux,你会发现一个名为的文件isolinux.cfg。我在那里发现了一些以 开头的行label,下面是以下重要的行

      kernel vmlinuz
      append initrd=initrd.img root=live:CDLABEL=Fedora-KDE-Live-27-1-6 rd.live.image quiet
      

      您将使用它来填充我的 grub2 的最后两行menuentry

    • Ubuntu 及类似版本:在那里,您将进入目录/boot/grub,在其中找到一个名为的文件grub.cfg。在这里,您将找到一些以开头的行menuentry,在它们下面是以下重要的行

      linux   /casper/vmlinuz.efi  file=/cdrom/preseed/ubuntu.seed boot=casper quiet splash ---
      initrd  /casper/initrd.lz
      

      您可以直接复制。

相关内容