GRUB2에서 EXT4 이미지 파일 부팅

GRUB2에서 EXT4 이미지 파일 부팅

내 친구는 빠른 HDD가 필요해서 작은 64GB SDD를 선물했습니다. 이 SSD에는 Linux가 설치되어 있었습니다. 저는 dd를 사용하여 파티션(한 파티션에 부팅, 루트, 홈) 이미지를 만들었습니다.

이 파티션은 이제 기존의 500GB EXT4 형식 드라이브에 있습니다.

내가 가지고 있는 이 .img 파일을 사용하여 GRUB을 부팅할 수 있는 방법이 있나요? SSD를 다시 돌려받을 수 없고 처음부터 Linux 설치를 설정하는 번거로움을 겪을 필요가 없습니다. ISO 이미지에 대한 GRUB의 루프백 지원을 발견했습니다. 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에 설치된 경우에만 작동합니다.

관련 정보