GRUB2からLVMにあるブートISOファイル

GRUB2からLVMにあるブートISOファイル

LVMパーティションのLive isoファイル(特にKali Linux)からgrubを介して起動しようとしています。

isoファイルからカーネルとinitrdをロードしましたが、ルートパーティションをマウントする方法がわかりません。これが現在 grub.cfg にあるものです。

menuentry "Kali Live ISO" --class gnu-linux {
  insmod lvm
  insmod ext2
  set root="lvm/Fedora-root"
  search --no-floppy --fs-uuid --set=root --hint=${root} 29e2f518-5fad-49c9-90ef-966b0c033c5e
  set isofile="/ISO/kali-linux-2019.1a-amd64.iso"
  loopback loop $isofile
  linux (loop)/live/vmlinuz boot=live iso-scan/filename=${isofile} noconfig=sudo username=root hostname=kali
  initrd (loop)/live/initrd.img
}

上記のuuidは、ISOファイルを含むパーティションのuuid番号ですblkid。ここでは止まりました。

答え1

Frost Schutzが述べたように、live-media=/dev/mapper/Fedora-root findiso=ISO/kali-linux-2019.1a-amd64.isoこのカーネルのコマンドライン引数に追加すると機能します。新しいメニュー項目の仕組みは次のとおりです。

menuentry "Kali Live ISO - findiso" --class gnu-linux {
  insmod lvm
  insmod ext2
  set root="lvm/Fedora-root"
  search --no-floppy --fs-uuid --set=root --hint=${root} 29e2f518-5fad-49c9-90ef-966b0c033c5e
  set isofile="/ISO/kali-linux-2019.1a-amd64.iso"
  loopback loop $isofile
  linux (loop)/live/vmlinuz boot=live live-media=/dev/mapper/Fedora-root findiso=ISO/kali-linux-2019.1a-amd64.iso noconfig=sudo username=root hostname=kali
  initrd (loop)/live/initrd.img
}

kali initramfsはパラメータをサポートしていないことがわかりましたiso-scan/filename=

答え2

誤解が原因で問題が発生する可能性があります。

Grubは本質的にISOを起動できません。

はい(制限内)、Grubは暗号化されたデバイスを復号化し、RAIDとLVMを理解し、大容量ファイルシステムをマウントし、ISOをループマウントすることもできます。しかし、これらすべての素晴らしい機能の目的は1つだけです。

カーネルとinitrdをロードします。

結局のところ、Grubはまだブートローダーです。

カーネルとinitrdをロードできるようになると、Grubがどのようなプロセスを経なければならないかは問題ではありません。結果は、これら2つのファイルを暗号化されていない単純なパーティションに直接コピーするのとまったく同じです/boot

mount -o loop kali-linux-2019.1a-amd64.iso /mnt/iso
cp /mnt/iso/live/{vmlinuz,initrd.img} /boot/kali

その後、次のように起動します。

menuentry "Kali Live ISO" {
    linux kali/vmlinuz ...parameters...
    initrd kali/initrd.img
}

上記と同じです。ただし、両方のファイル(vmlinuzとinitrd.img)を対応するISOファイルからインポートします。


本当に同じです。とにかく、Grubはこれら2つのファイルだけを望んでいます。 Grubの高度な機能に頼らずにカーネルとinitrdをロードできるブートローダを使用してISOを起動できます(より便利かもしれません)。

したがって、Grubはカーネルをロードし、カーネルパラメータとinitrdを渡すだけです。カーネルがロードされると、LVM、ループ、およびISOはありません。 Grubが行ったすべての作業は消え、カーネル自体に置き換えられました。


それでは、ISOはどのように始まりますか?

それは自然に始まります。そのため、ISOのファイル名をカーネル引数として渡して、探すべきファイルを知る必要があります。さて、デフォルトのファイル名がISO initramfsにハードコードされている場合でも、これはオプションです。

その後、ISOのinitramfsには、すべてのストレージデバイスを通過し、すべてのファイルシステムをマウントし、ファイルを検索するいくつかのコードがあります。ファイルが見つかったら、ループにインストールします。

それがうまくいく方法です。これを実装するのはGrubではなくISO自体であり、これが実装されている場合(存在する場合はそれ以外の場合は機能しません)、LVM論理ボリュームでこのファイルを見つけることをサポートする場合もあれば、サポートしていない場合もあります。 RAIDと暗号化をサポートします。


特にKaliの場合、これが可能かどうかわかりません。 Kaliのinitramfsコードを少し読んでみましたが、iso-scan/filename=まったくないようです。代わりに存在し、パスのfindiso=前にプレフィックスを付けるか、別々に指定すると、LVMサポートが有効になる可能性があります。/dev/mapper/live-media=

しかし、実際に自分で試したことはなく、initramfsは解読するのが難しいので、直接実験/調査するか、Kaliコミュニティにこの質問をインポートする必要があります。

または、ISOファイルをよりアクセスしやすい場所(通常のパーティション)に配置します。

答え3

Grub 2.00を使用して論理ボリュームからISOを起動できることを確認しました。私の場合、LVMタイプの単一パーティションMBR(フルディスク)がありました。私は2つのLV(ブートとiso)しか持っていません。残念ながら、キャスパー(Ubuntuのlivecdメカニズム)の容量が不足しているため、initramfsからファイルを回復しました(しかしisoは変更していません)。

Kaliの場合はい、最後の解決策が機能し、より簡単です。

関連情報