web-dev-qa-db-ja.com

GRUB2から、LVM2論理ボリュームでISOを起動します

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

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

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

私は次のように働いています:

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

私がやりたいのは、gpt3 lvmのisoから起動することです(そして、最終的には、非lvm gpt2パーティションさえもありません)。

私のグラブエントリは次のとおりです。

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

Archエントリの場合:

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」を何に変更すればよいかわかりません。


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

これは不可能ですか?それとも、これまで誰も試したことがなかったものですか?


EDIT2:私の報奨金は期限切れになってからずっと経ち、9か月後、これはLinuxディストリビューションでは不可能だと思います。質問は開いたままにしておきますが、近い将来いつでも実用的な解決策があるかどうかは疑わしいです。

8
snapshoe

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 = 1 LinuxにすべてのLVMをロードするように指示し、iso-scanそれらを検索します。

1
nxxy

buntuのこの単純なソリューション に触発されて、Fedora 27 KDEisoとUbuntu17.10isoをロードするために機能する以下を使用しました。

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

    Sudo blkid
    

    それは私に、他の人に沿って、次の行を与えました

    /dev/mapper/Fedora_pluto-home: UUID="6340d364-fc09-44d1-914f-b902a6394a55" TYPE="ext4"
    
  • 次に、他のISOファイルを起動する場合のもう1つの重要な点は、linuxおよびinitrdで始まる行です。 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 menuentryの最後の2行を埋めます。

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

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

      コピーするだけです。

1
erik

その上でのポイント:

起動時のISOはISOをマウントする必要があるため、その検索方法を知っている必要があります。

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

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

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

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

0
Anonimo

あなたはこれを試すことができます:

Menuentryの先頭にこれを追加します。

insmod lvm

次に、LVMパーティションを次のように指定します。

set lvmpart=lvm/<lvm_group_name>-<lvm_logical_partition_name>

したがって、XubuntuISOエントリは次のようになります。

menuentry "Xubuntu ISO" {
  insmod lvm
  set lvmpart=lvm/<lvm_group_name>-<lvm_logical_partition_name>
  set isofile="/xubuntu-12.04.1-desktop-AMD64.iso"
  loopback loop $lvmpart$isofile
  linux (loop)/casper/vmlinuz boot=casper iso-scan/filename=$isofile noprompt noeject
  initrd (loop)/casper/initrd.lz
}

必要に応じて修正してください。

これにより、GRUBはlvm2ボリュームを認識し、その中のISOファイルを読み取ることができるようになります。ただし、おそらくISOはまだ見つかりません...

0

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

あなたが得ているエラー:

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

つまり、起動時に、起動しているライブシステムがcd/dvdドライブを検索していて、何も見つかりません。

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

0
alphatiger