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ファイルを起動したい場合にもう一つ重要なことは、とで始まる行です
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 の最後の 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 などを検索してマウントするスクリプトを組み込むことです。