tl;dr - 是否可以从未加密的 lmv2 逻辑卷中的 .iso 文件启动?如何操作?
在使用笔记本电脑实际操作之前,我尝试在 VirtualBox VM 中进行设置。我的设置如下:
- 4 个 gpt 分区
- gpt1 - 2M ef02 bios 启动
- gpt2——5G未加密的非lvm,用于杂项数据、iso等。
- gpt3 – 5G 未加密的 lvm,用于 /boot、iso 等。
- gpt4-剩余,lvm,用 dm-crypt/luks 加密,用于 root、swap、home 等。
- 在 gpt2 中,我有当前 Arch 和 Xubuntu iso 的副本
- 在 gpt3 中,我有一个 lvm2 lv,里面有相同 iso 的相同副本
我有以下工作:
- 在 gpt4 中,Arch 和 Xubuntu 的正常运行(并且希望在某些时候在其他逻辑卷中添加其他发行版)
- 从 Arch 在 /dev/sda 上安装 grub2
- 使用 grub2 的 configfile 命令,可以从两个发行版的 grub2 菜单切换和启动
- 可以从非 lvm gpt2 的 grub 菜单启动 iso
我想要做的是从 gpt3 lvm 中的 iso 启动(最终甚至根本没有非 lvm gpt2 分区)。
我的 grub 条目是:
menuentry "Xubuntu ISO" {
set isofile="/xubuntu-12.04.1-desktop-amd64.iso"
# from non-lvm
loopback loop (hd0,gpt2)$isofile
# from lvm
#loopback loop (vgboot-iso)$isofile
linux (loop)/casper/vmlinuz boot=casper iso-scan/filename=$isofile noprompt noeject
initrd (loop)/casper/initrd.lz
}
2 个环回线路指向同一个 iso 的两个不同副本。我在 grub 命令行上验证了这 2 个环回线路均有效。
从非 lvm 分区中的 iso 启动时,一切正常。
从 lvm 分区中的 iso 启动时,启动开始,最终出现此错误:
(initramfs) /scripts/casper-premount/20iso_scan: line 46: can't open /dev/sr0: No medium found
对于拱门入口:
menuentry "Arch ISO" {
set isofile="/archlinux-2012.09.07-dual.iso"
loopback loop (hd0,gpt2)$isofile
#loopback loop (vgboot-iso)$isofile
linux (loop)/arch/boot/x86_64/vmlinuz archisolabel=ARCH_201209 img_dev=/dev/sda2 img_loop=$isofile earlymodules=loop
initrd (loop)/arch/boot/x86_64/archiso.img
}
从 gpt2 iso 启动可以,但我不知道该将“/dev/sda2”更改为 lvm 启动。
编辑:这能做到吗?对于任何当前 Linux 发行版的官方 .iso 文件?Fedora?Debian?openSUSE?CentOS?
这不可能吗?还是说之前没人想过要尝试?
编辑 2:我的赏金早已过期,9 个月后,我假设这在任何 Linux 发行版中都不可能实现。我将这个问题保留下来,但我怀疑近期是否会有可行的解决方案。
答案1
使用 Fedora 21 ISO,我刚刚成功尝试了以下操作:
menuentry "Fedora 21 Live M6600" --class fedora {
insmod part_gpt
insmod lvm
insmod ext2
set vg='m6600'
set lv='F21Live'
set root="lvm/${vg}-${lv}"
search --no-floppy --fs-uuid --set=root --hint=${root} 95e4eec8-c1de-4802-b821-5753de990cbe
set isofile="/Fedora-Live-Workstation-x86_64-21-5.iso"
echo "Using ${isofile}..."
loopback loop $isofile
linux (loop)/isolinux/vmlinuz0 iso-scan/filename=${isofile} root=live:CDLABEL=Fedora-Live-WS-x86_64-21-5 rootfstype=auto ro rd.live.image quiet rhgb rd.luks=0 rd.md=0 rd.dm=0 rd.auto=1
initrd (loop)/isolinux/initrd0.img
}
rd.自动=1将告诉 Linux 加载所有 LVM 和等扫描搜索它们。
答案2
灵感来自这个简单的 Ubuntu 解决方案,我使用了以下命令,用于加载 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
您可以直接复制。
答案3
我认为大多数发行版的官方 iso 文件都是不可能的。
您收到的错误:
(initramfs) /scripts/casper-premount/20iso_scan: line 46: can't open /dev/sr0: No medium found
意味着在启动时,您启动的实时系统正在搜索 cd/dvd 驱动器但未找到任何驱动器。
Live CD 未配置为在 LVM 上搜索其源 iso;您也许可以修改映像的启动脚本来执行此操作,但我认为任何当前发行版的官方 .iso 文件都不会这样做。您可以尝试联系您最喜欢的发行版的开发人员以将其集成?
答案4
仅谈一点:
启动时ISO必须挂载,所以必须知道如何找到它。
Grub2 可以使用 insmod... 命令查看 ISO,但是这只不过是让 Grub2 读取 ISO 内部内容、进行循环挂载等而已,但是一旦 ISO 中的 Linux 启动,LVM/LUKS/loop/等就不存在了(没有挂载),ISO 中的启动脚本必须知道如何挂载该 LVM/LUKS/loop;因此,如果该 Linux 没有准备好这样做,就无法从中启动。
没有 LVM、LUKS 等的示例...如果普通的 Linux LiveCD ISO 没有设计为在启动时搜索并循环挂载到 .iso 文件,那么就永远不可能从 Grub2(以 .iso 作为文件)启动它。
对于这种情况,您需要一个硬件 CD/DVD 模拟器(如果在真实硬件上),或者只需将 .iso 安装到虚拟机的虚拟 CD/DVD 单元上。
当然,另一个选择是“编辑”此类 ISO,以在启动时合并一些脚本来搜索和挂载 LVM/LUKS/等。