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


8

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

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

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

私は次の作業をしています:

  • gpt4では、ArchとXubuntuの機能しているインストール(そして、ある時点で他の論理ボリュームに他のディストリビューションを追加したい)
  • Archから/ dev / sdaにインストールされた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?

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


EDIT2:私の報奨金は期限切れになって久しく、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 = 1は、すべてのLVMをロードし、それらをiso-scanで検索するようにLinuxに指示します。


で始まる行のUUIDsearchは、isoファイルを含む論理ボリュームの1つですよね?それを得るために、あなたはしなければなりませんsudo blkid
erik

これはもっと簡単にできるでしょう。LVMからFedoraとUbuntuをブートするための私の答えを見てください。
erik

1

この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ファイルは論理ボリューム上にあります。私は私のシステムを起動すると、それがである/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ファイルを起動する場合のもう1つの重要なことは、linuxおよびで始まる行ですinitrd。(圧縮されたアーカイブを抽出するためのGUI)または(コンソールファイルマネージャー)を使用てisoファイル開くことで取得しました。file-rollermc

    • 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
      

      コピーできます。


0

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

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

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

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

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


それはある可能性、私はFedoraの27とUbuntu 17.10からブート私の簡単な答えを参照してください。
エリック、

0

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

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

insmod lvm

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

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

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

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はまだ見つかりません...


私はあなたの提案を試しましたが、あなたが言ったように、isoはまだ見つかりません。
snapshoe 2013年

0

ちょうどそれのポイント:

起動時にISOは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をマウントするだけです。

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.