Загрузка файла образа EXT4 из GRUB2

Загрузка файла образа EXT4 из GRUB2

Моей подруге нужен был быстрый HDD, поэтому я отдал ей свой маленький SDD на 64 ГБ. На этом SSD был установлен мой Linux. Я использовал dd, чтобы сделать образ раздела (boot, root и home на одном разделе).

Этот раздел теперь находится на традиционном диске емкостью 500 ГБ, отформатированном в EXT4.

Есть ли способ заставить GRUB просто загрузиться с помощью этого файла .img, который у меня есть? Я не получу свой SSD обратно, и я не хочу тратить время на установку Linux с нуля. Я наткнулся на поддержку loopback в 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.

Связанный контент