気の向くままに辿るIT/ICT/IoT
システム開発

Red Hat系OSをUSBメモリ/GRUB2/GPTでマルチブート

ウェブ造ホーム前へ次へ
USBメモリでCentOS、Fedoraをマルチブートするには?

Red Hat系OSをUSBメモリ/GRUB2/GPTでマルチブート

Red Hat系OSをUSBメモリ/GRUB2/GPTでマルチブート

 必然か、偶然か、USBメモリ/GRUB2/GPTでマルチブートを試みるとRed Hat系CentOS、Fedoraにおいては、共にISOディスクイメージをファイル展開する方法でできました。

 試行錯誤しましたが、共にISOブートは、できなかった一方、Debian系は、あっさりISOブートができたことからして構成に起因する必然?それともこれも偶然?(後述の通り、少なくともFedoraについてはISOブートできることが判明。)

 尚、後述の通り、CentOSとFedoraだけなら基本パーティション1つ、データ保存用に1つ、GRUBを専用パーティションに入れるにしても3つあればよく、MBRパーティションでも充分であり、結果GPT対応のGRUB2でなくともGRUB LegacyでもOKです。

 そもそも今回は、インストーラを中心にCentOS/Fedora、Debian/Ubuntu、FreeBSD/NetBSD/OpenBSD、更にレスキューツールとしてClonezilla、GpartedのLive版をマルチブート構成としたLive USBにしてみようということで始めたのですが、結果的に単独で基本パーティションを要したのがFreeBSDとNetBSDのみ[訂正・追記:2016/08/09]FreeBSDのみでGRUB用とデータ保存用にパーティションを確保しても4つで事足りる為、MBRパーティションでも、よってGRUB LegacyでもOKでした。

CentOS

menuentry 'CentOS-6.4-i386-minimal' {
    set root=(hd0,gpt3)
# この方が無難 => set root=(hd0,3)
    set directory="/CentOS-6.4-i386-minimal/iso"
    linux $directory/isolinux/vmlinuz root=UUID=XXXXX ro nomodeset
    initrd $directory/isolinux/initrd.img
#    linux16 $directory/isolinux/vmlinuz root=UUID=XXXXX ro nomodeset
#    initrd16 $directory/isolinux/initrd.img
}
menuentry ' ' { echo }

 CentOSの最小構成のISOは、当該パーティション内にCentOS用のディレクトリを用意した上、マウントして全てのファイルをコピーすることで同一パーティション内にある他のOSやツールともCentOSをUSBメモリ/GRUB2/GPTといった環境下でマルチブートすることができました。

 起動画面は、昔ながらのテキストベースのグラフィカル風対話式メニューで始まります。

 CentOSでは、linux16/initrd16でもlinux/initrdでも何れも上手くいったのでlinux16/initrd16の方はコメントアウトしてあります。

 CentOSのGRUB2設定は、かなり試行錯誤しましたが、原因はnomodesetの指定をしていないことでした。。。

 少なくとも検証した中では、CentOSに限ってですが、カーネルパラメータとしてnomodesetを入れないと一部を残し、ブートメッセージが文字化けしたような状態になったり、肝心のメニューが表示される寸前と思われるところで画面が真っ黒なまま、何も起こりませんでした(起動はしていたのでしょうが、画面設定ミスで単に表示されていなかっただけだと思われます)。

 多方面においてドキュメントの充実ぶりが半端ではなく、いつも感心させられるArch Linux Wikiによれば、「カーネルパラメータ nomodesetは、KMS/Kernel Mode Settingを無効にする為にあり、KMSとはユーザースペースではなくカーネル空間でディスプレイの解像度・色深度を設定する方法である」旨、「ブランクスクリーンの原因にも成り得る」旨の説明があり、やはり、今回はこれが原因のようです。

Fedora

menuentry 'Fedora-20-i386-netinst' {
    set root=(hd0,gpt3)
# この方が無難 => set root=(hd0,3)
    set directory="/Fedora-20-i386-netinst/iso"
    linux $directory/isolinux/vmlinuz root=UUID=XXXXX ro quiet liveimg live_dir=$directory/LiveOS
    initrd $directory/isolinux/initrd.img
}
menuentry ' ' { echo }

 Fedoraのインターネット経由でのインストールを前提とするネットワークインストール用ISOは、ディスクイメージのloopbackでは、うまくいきませんでしたが(後述のように実はできたが)、当該パーティション内にFedora用のディレクトリを用意した上、マウントして全てのファイルをコピーすることで同一パーティション内にある他のOSやツールともFedoraをUSBメモリ/GRUB2/GPTといった環境下でマルチブートすることができました。

$ sudo blkid デバイス名

 UUIDは、root権限でblkid デバイス名(/dev/sda5)などとすれば確認することができます。

 起動画面は、Fedoraの標準的なメニューでstartを選択すると言語選択メニューから始まるインストーラが起動します。

 ちなみにmenuentry ' ' { echo }は、とりあえず空行を入れたくてなんとなく書いてみたら期待通りでしたが、他にちゃんとしたやり方があるのかどうかは調べてません。

menuentry 'Fedora-Workstation-netinst-i386-23' {
    set root=(hd0,gpt3)
# この方が無難 => set root=(hd0,3)
    set directory="/Fedora-Workstation-netinst-i386-23"
    set iso_file=$directory/Fedora-Workstation-netinst-i386-23.iso
    loopback loop $iso_file
    (loop)/isolinux/vmlinuz inst.stage2=hd:UUID="..." noeject iso-scan/filename=$iso_file
    initrd (loop)/isolinux/initrd.img
}

 後になってFedora 23のネットワークインストーラーを仕込むことになり、名前を変えただけでは、先の方法でうまくいかなかったので改めて調べてみるとBoot fedora 20 from isoを発見、少なくともFeodraでもISOブートできることがわかりました。

 インストーラーではなく、HDDなどにインストールしたFedoraをGRUB 2で起動するケースの一例については、GRUB 2でインストールしたFedoraを起動を参照。

備考

$ sudo blkid xxx.iso

 ISOブートする場合に使うUUIDは、Linuxの場合、root権限でblkid iso_file(xxx.iso)などとすれば確認することができます。

 尚、blkid デバイス名のように/dev以下のデバイスを指定することもできます。

ウェブ造ホーム前へ次へ