我的朋友需要一个快速 HDD,所以我给了她我的小型 64GB SDD。这个 SSD 上安装了我的 Linux。我使用 dd 制作分区的映像(一个分区上的 boot、root 和 home)。
该分区现在位于传统的 500GB EXT4 格式化驱动器上。
有什么方法可以让 GRUB 使用我拥有的这个 .img 文件启动吗?我没有拿回我的 SSD,也懒得经历从头开始安装 Linux 的麻烦。我在 GRUB 中遇到过对 ISO 映像的环回支持。这个也支持EXT4吗?我似乎无法找到任何具体的东西,也不想扔掉任何东西。
干杯。
即使文件包含分区表,grub2 也可以同时启动,其中 (hd0,1) 是文件的位置,(loop,1) 是文件内的分区。然而,这只会启动 initramfs,文件并没有真正挂载。
/etc/grub.d/40_custom
menuentry "My bootable disk image" {
set isofile="hdd_ext4.img"
loopback loop (hd0,1)/${isofile}
linux (loop,1)/boot/vmlinuz-3.16.0-4-amd64 root=/dev/sda1 loop=/${isofile} ro
initrd (loop,1)/boot/initrd.img-3.16.0-4-amd64
}
Run Code Online (Sandbox Code Playgroud)
编写您自己的安装脚本,chmod a+x 并复制到 local-premount 文件夹中。使用 initramfs-tools 创建您自己的“initrd.img-3.16.0-4-amd64”并将其复制到映像文件中。无需硬编码,只需使用脚本内 grub 条目 ${ROOT} 和 ${loop} 中的变量即可。
/etc/initramfs-tools/scripts/local-premount
#!/bin/sh
modprobe loop
modprobe ext4
# mount /dev/sda1 (file location)
mkdir /host
mount -n -t ext4 -o rw,data=ordered ${ROOT} /host
# kpartx add partition devmappings for hdd_ext4.img
loop_pt=$(kpartx -av /host${loop} 2>&1 | grep loop | cut -f3 -d" ")
# mount hdd_ext4.img (image file)
mount -n -t ext4 -o loop,rw,data=ordered /dev/mapper/${loop_pt} ${rootmnt}
Run Code Online (Sandbox Code Playgroud)
注意:只有当 kpartx 安装在 initramfs 中时这才有效
| 归档时间: |
|
| 查看次数: |
11801 次 |
| 最近记录: |