從 GRUB2 引導 EXT4 映像文件

從 GRUB2 引導 EXT4 映像文件

我的朋友需要一個快速 HDD,所以我給了她我的小 64GB SDD。這個 SSD 上安裝了我的 Linux。我使用 dd 製作分割區的映像(一個分割區上的 boot、root 和 home)。

該分割區現在位於傳統的 500GB EXT4 格式磁碟機上。

有什麼方法可以讓 GRUB 使用我擁有的這個 .img 檔案啟動嗎?我沒有拿回我的 SSD,也懶得經歷從頭開始設定 Linux 安裝的麻煩。我在 GRUB 中遇到對 ISO 映像的環回支援。這個也支援EXT4嗎?我似乎無法找到任何具體的東西,也不想丟掉任何東西。

乾杯。

答案1

即使檔案包含分割表,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
}

編寫您自己的安裝腳本,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}

注意:只有當 kpartx 安裝在 initramfs 中時才有效

相關內容