GRUB2からLVM2論理ボリューム内のISOを起動する

GRUB2からLVM2論理ボリューム内のISOを起動する

tl;dr - 暗号化されていない lmv2 論理ボリュームにある .iso ファイルから起動することは可能ですか? 方法は?

実際にラップトップで実行する前に、VirtualBox VM でこれを設定しようとしています。設定は次のとおりです。

  • 4 つの gpt パーティション
    • gpt1 - 2M ef02 BIOS ブート
    • gpt2 - 5G 暗号化されていない非 LVM、その他のデータ、ISO など用。
    • gpt3 - /boot、iso などのための 5G 暗号化されていない lvm。
    • gpt4 - 残り、lvm、dm-crypt/luks で暗号化、ルート、スワップ、ホームなど用。
  • gpt2には、現在のArchとXubuntuのisoのコピーがあります
  • gpt3では、同じisoの同じコピーを持つlvm2 lvがあります

私は次のことを実行しています:

  • gpt4 では、Arch と Xubuntu のインストールが機能しています (また、他の論理ボリュームに他のディストリビューションを追加したいと考えております)
  • /dev/sda に Arch からインストールされた grub2
  • grub2のconfigfileコマンドを使用すると、両方のディストリビューションのgrub2メニューから切り替えて起動できます。
  • 非 LVM GPT2 の GRUB メニューから ISO を起動できます

私がやりたいのは、gpt3 lvm の iso から起動することです (最終的には、非 lvm gpt2 パーティションがまったく存在しない状態になります)。

私の grub エントリは次のとおりです:

menuentry "Xubuntu ISO" {
  set isofile="/xubuntu-12.04.1-desktop-amd64.iso"
  # from non-lvm
  loopback loop (hd0,gpt2)$isofile
  # from lvm
  #loopback loop (vgboot-iso)$isofile
  linux (loop)/casper/vmlinuz boot=casper iso-scan/filename=$isofile noprompt noeject
  initrd (loop)/casper/initrd.lz
}

2 つのループバック ラインは、同じ ISO の 2 つの異なるコピーを指します。 grub コマンド ラインで、両方のループバック ラインが機能することを確認しました。

非 LVM パーティションの iso から起動すると、すべて正常に動作します。

lvm パーティションの iso から起動すると、起動が開始され、最終的に次のエラーが発生します。

(initramfs) /scripts/casper-premount/20iso_scan: line 46: can't open /dev/sr0: No medium found

アーチエントリの場合:

menuentry "Arch ISO" {
  set isofile="/archlinux-2012.09.07-dual.iso"
  loopback loop (hd0,gpt2)$isofile
  #loopback loop (vgboot-iso)$isofile
  linux (loop)/arch/boot/x86_64/vmlinuz archisolabel=ARCH_201209 img_dev=/dev/sda2 img_loop=$isofile earlymodules=loop
  initrd (loop)/arch/boot/x86_64/archiso.img
}

gpt2 iso からの起動は動作しますが、lvm 起動の場合に "/dev/sda2" を何に変更すればよいかわかりません。


編集:これはできますか?どれでも現在の Linux ディストリビューションの公式 .iso ファイルですか? Fedora ですか? Debian ですか? openSUSE ですか? CentOS ですか?

これは不可能でしょうか?それとも、これまで誰も試そうと思わなかったことでしょうか?


編集2: 私の懸賞金はとっくに期限が切れており、9か月が経過した今、これはどのLinuxディストリビューションでも不可能だと推測しています。この質問は未解決のままにしておきますが、近い将来に実用的な解決策が見つかるとは思えません。

答え1

Fedora 21 ISO を使用して、次の操作を正常に実行できました。

menuentry "Fedora 21 Live M6600" --class fedora {
    insmod part_gpt
    insmod lvm
    insmod ext2
    set vg='m6600'
    set lv='F21Live'
    set root="lvm/${vg}-${lv}"
    search --no-floppy --fs-uuid --set=root --hint=${root} 95e4eec8-c1de-4802-b821-5753de990cbe
    set isofile="/Fedora-Live-Workstation-x86_64-21-5.iso"
    echo "Using ${isofile}..."
    loopback loop $isofile
    linux (loop)/isolinux/vmlinuz0 iso-scan/filename=${isofile} root=live:CDLABEL=Fedora-Live-WS-x86_64-21-5 rootfstype=auto ro rd.live.image quiet rhgb rd.luks=0 rd.md=0 rd.dm=0 rd.auto=1
    initrd (loop)/isolinux/initrd0.img
}

rd.auto=1LinuxにすべてのLVMをロードするように指示し、アイソスキャン検索します。

答え2

に触発されたUbuntu用のこのシンプルなソリューション私は以下を使用しました。これは、Fedora 27 KDE iso と Ubuntu 17.10 iso をロードするために機能します。

ファイルに次の行を追加しました/etc/grub.d/40_custom

menuentry "Live Fedora KDE 27" --class fedora {
  insmod part_msdos
  insmod lvm
  set iso_path="/erik/Downloads/transmission/Fedora-KDE-Live-x86_64-27/Fedora-KDE-Live-x86_64-27-1.6.iso"
  search --no-floppy --fs-uuid --set=root 6340d364-fc09-44d1-914f-b902a6394a55
  loopback loop ($root)$iso_path
  linux (loop)/isolinux/vmlinuz iso-scan/filename=${iso_path} root=live:CDLABEL=Fedora-KDE-Live-27-1-6 rootfstype=auto rd.live.image quiet
  initrd (loop)/isolinux/initrd.img
}

menuentry "Ubuntu 17.10.1" --class ubuntu {
  insmod part_msdos
  insmod lvm
  set iso_path="/erik/Downloads/transmission/ubuntu-17.10.1-desktop-amd64.iso"
  search --no-floppy --fs-uuid --set=root 6340d364-fc09-44d1-914f-b902a6394a55
  loopback loop ($root)$iso_path
  linux (loop)/casper/vmlinuz.efi  file=/cdrom/preseed/ubuntu.seed boot=casper iso-scan/filename=${iso_path} quiet splash ---
  initrd (loop)/casper/initrd.lz
}

説明

  • で始まる行はset iso_path、論理ボリューム上のISOファイルのパスを定義します。システムを起動すると、ISOファイルは にあります/home/erik/Downloads/transmission/Fedora-KDE-Live-x86_64-27/Fedora-KDE-Live-x86_64-27-1.6.iso"が、/homeマウントされた論理ボリュームなので、これを省略してパスを で始めます。/erik/Downloads/…
  • で始まる行のsearch最後には、 で始まる奇妙な英数字の変数(いわゆるUUID)があります6340。この番号はコマンドから取得しました。

    sudo blkid
    

    それは私に、そして他の人々に、次のような考えを与えた。

    /dev/mapper/fedora_pluto-home: UUID="6340d364-fc09-44d1-914f-b902a6394a55" TYPE="ext4"
    
  • それから、他のISOファイルを起動したい場合にもう一つ重要なことは、とで始まる行ですlinuxinitrd私は次のようにして取得しました。isoファイルを開くfile-roller(圧縮アーカイブを解凍するための GUI) またはmc(コンソール ファイル マネージャー)を使用します。

    • Fedora および類似のもの:ディレクトリに移動すると/isolinux、 というファイルがありますisolinux.cfg。そこで で始まる行がいくつか見つかりlabel、その下に次の重要な行があります。

      kernel vmlinuz
      append initrd=initrd.img root=live:CDLABEL=Fedora-KDE-Live-27-1-6 rd.live.image quiet
      

      これは、 grub2 の最後の 2 行を埋めるために使用しますmenuentry

    • Ubuntu および類似のもの:ディレクトリに移動すると/boot/grub、 というファイルがありますgrub.cfg。ここに で始まる行がいくつかありmenuentry、その下に次の重要な行があります。

      linux   /casper/vmlinuz.efi  file=/cdrom/preseed/ubuntu.seed boot=casper quiet splash ---
      initrd  /casper/initrd.lz
      

      それをコピーするだけです。

答え3

ほとんどのディストリビューションの公式 ISO ファイルでは不可能だと思います。

発生しているエラー:

 (initramfs) /scripts/casper-premount/20iso_scan: line 46: can't open /dev/sr0: No medium found

起動時に、起動しているライブ システムが CD/DVD ドライブを検索していますが、見つからないことを意味します。

ライブ CD は、LVM 上のソース ISO を検索するように構成されていません。イメージのブート スクリプトを変更して検索することはできるかもしれませんが、現在のディストリビューションの公式 .iso ファイルではそれが実行されていないと思います。お気に入りのディストリビューションの開発者に連絡して、統合してもらうようにしてみてはいかがでしょうか。

答え4

ちょっとポイントを述べておきます:

起動時に ISO をマウントする必要があるため、ISO を見つける方法を知っておく必要があります。

Grub2 は insmod... コマンドで ISO を見ることができますが、これは Grub2 に ISO 内部の読み取り、ループ マウントなどを行わせることしかできません。しかし、ISO 内の Linux が起動するとすぐに LVM / LUKS / loop などがなくなり (マウントされず)、ISO 内のブート スクリプトはその LVM / LUKS / loop をマウントする方法を知っている必要があります。そのため、その Linux がマウントする準備ができていない場合、そこからブートすることはできません。

LVM、LUKS などを使用しないサンプル...通常の Linux LiveCD ISO が起動中にループを検索して .iso ファイルにマウントするように設計されていない場合、Grub2 (.iso をファイルとして使用) から起動することはできません。

このような場合には、ハードウェア CD/DVD エミュレーター (実際のハードウェアの場合) が必要になります。または、仮想マシンの仮想 CD/DVD ユニットに .iso をマウントするだけです。

もちろん、もう 1 つのオプションは、そのような ISO を「編集」して、起動時に LVM / LUKS などを検索してマウントするスクリプトを組み込むことです。

関連情報