web-dev-qa-db-ja.com

GRUB2からのEXT4イメージファイルの起動

私の友人は高速HDDを必要としていたので、私は彼女に私の小さな64GBSDDを渡しました。このSSDにはLinuxがインストールされていました。 ddを使用してパーティションのイメージを作成しました(1つのパーティションのブート、ルート、ホーム)。

このパーティションは現在、従来の500GBEXT4フォーマットのドライブ上にあります。

私が持っているこの.imgファイルを使用して起動するためにGRUBを取得する方法はありますか?SSDを取り戻せず、設定の手間をわざわざ行うことができませんLinuxインストールを最初からやり直します。ISOイメージのGRUB)でループバックサポートに遭遇しました。これはEXT4もサポートしますか?特定のものを見つけることができないようで、見つかりません。何でもゴミ箱に入れたい。

乾杯。

1
sjjg

ファイルにパーティションテーブルが含まれている場合でも、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にインストールされている場合にのみ機能します

1
alecxs