私の友人は高速HDDを必要としていたので、私は彼女に私の小さな64GBSDDを渡しました。このSSDにはLinuxがインストールされていました。 ddを使用してパーティションのイメージを作成しました(1つのパーティションのブート、ルート、ホーム)。
このパーティションは現在、従来の500GBEXT4フォーマットのドライブ上にあります。
私が持っているこの.imgファイルを使用して起動するためにGRUBを取得する方法はありますか?SSDを取り戻せず、設定の手間をわざわざ行うことができませんLinuxインストールを最初からやり直します。ISOイメージのGRUB)でループバックサポートに遭遇しました。これは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
}
独自のマウントスクリプト、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にインストールされている場合にのみ機能します