私はこの質問について調査しましたが、明確な答えを見つけることができませんでした...または明確な質問ですらありません。したがって、簡単な例を使用します。
私のコンピュータには** 2つのハードディスクがあります。**
GRUB2のみbuntuへのブート(私の例では、最初のハードディスク上)。
_update-grub
を発行すると検出されません 2番目のハードディスクのオペレーティングシステムですが、存在することはわかっています。
起動時に[〜#〜] bios [〜#〜]と入力し、起動順序をハードディスク2に変更すると、2番目のオペレーティングシステム起動OK。
どうすればGRUB2にエントリを追加2番目のハードディスクから起動できますか?
(実際には、私はこの質問をすることができると思いますなし 2番目のハードディスクのオペレーティングシステムを指定します。そうでない場合は?)
この構成のサンプルマシンのos-prober
の要求に応じて出力を追加します。
luis@threepwood:~$ Sudo os-prober
/dev/sdb1:Windows 7 (loader):Windows:chain
/dev/sdb7:Ubuntu 14.04.3 LTS (14.04):Ubuntu:linux
この特定の例(BIOSでブート順序を変更した)の場合:
sdb
はHDD-1です。sda
はHDD-2です。GRUBを起動している間に、 c コマンドラインモードのキー 、入力
rootnoverify (hd0)
chainloader +1
boot
etvoilà、私は私にGRUBも得ましたが、GRUB 2、もう一度やり直しました
set root=(hd0)
chainloader +1
boot
同じ問題が再び発生し、解決しました;)
とても簡単です。手順に従ってください。
シナリオ例:
/dev/sda1
– CentOS
/dev/sdb1
– Debian
CentOSドライブにアクティブなMBRがあるとしましょう。したがって、起動後にCentOSシステムにアクセスできます。 Debianを追加する必要があります。
アクティブOS(このシナリオではCentOS)でのタスク:
mount /dev/sdb1 /mnt/debian
以下のように、/mnt/debian/boot/grub{2}/grub.cfg
からDebianのmenuentry
セクション全体を切り取ります。
menuentry 'Debian GNU/Linux' --class debian --class gnu-linux ... { ... }
次に、ファイルを作成します:touch /etc/grub.d/11_linux
これはスクリプトなので、必ず実行してください:chmod +x /etc/grub.d/11_linux
追加:
#!/bin/sh
echo "
11_linux
の先頭に、そのセクションを貼り付けます。最後は"
で終わりました。したがって、次のものが必要です。
centos #~> cat /etc/grub.d/11_linux
#!/bin/sh
echo "menuentry 'Debian GNU/Linux' --class debian --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-simple-78026456-ebcc-4eed-b59d-a3f0bdff7353' {
load_video
insmod gzio
if [ x$grub_platform = xxen ]; then insmod xzio; insmod lzopio; fi
insmod part_msdos
insmod ext2
set root='hd0,msdos1'
if [ x$feature_platform_search_hint = xy ]; then
search --no-floppy --fs-uuid --set=root --hint-bios=hd0,msdos1 --hint-efi=hd0,msdos1 --hint-baremetal=ahci0,msdos1 f2de4123-5a98-4568-99dd-e61940b99ab2
else
search --no-floppy --fs-uuid --set=root f2de4123-5a98-4568-99dd-e61940b99ab2
fi
echo 'Loading Linux 3.16.0-4-AMD64 ...'
linux /vmlinuz-3.16.0-4-AMD64 root=/dev/mapper/Thinkpad--vg-root ro quiet
echo 'Loading initial ramdisk ...'
initrd /initrd.img-3.16.0-4-AMD64
}"
grub2-mkconfig -o /boot/grub{2}/grub.cfg
リブート。
出来上がり。
こんにちは私は同じ問題を抱えていました。 os-proberをインストールした後、grub-customizerがos-proberを使用して2番目のHDD上のOSを見つけ、それをブートメニューに追加できることがわかりました。設定ファイルを編集するよりも簡単だと思うかもしれません:)
2番目のhddのエントリーをgrub構成に追加する必要があると思います。
どのOSでもかまいません。
Windows HDDでgrub2のデュアルブックを使用しています。 WindowsとLinuxの両方を検出し、起動するOSを選択するメニューを提供します。
事前設定、チェーンロード、maunalエントリのgrubへの追加については、次のリンクをたどってください。
私は通常grub.cfg
を手動で記述し、update-grub
を使用せず、いわゆるマスターGrub2ブートローダーを使用してどこから起動するかを選択し、各Linuxディストリビューションに独自のルートパーティションに独自のブートローダーをインストールさせます、そのためLinuxは、私のマスターgrub2ブートローダーに触れずに、独自のブートローダーを編集できます。
そして、他のディスクMBRにジャンプするには、通常のOSのgrub.cfg
に次のような種類のエントリがあり、最初のディスクのようにディスクを見る必要がない場合:
menuentry "Boot from second disk" {
chainloader (hd1)+1
}
menuentry "Boot from third disk" {
chainloader (hd2)+1
}
menuentry "Boot from fourth disk" {
chainloader (hd3)+1
}
したがって、MBRを必要な他のディスクにロードするだけです。
ただし、他のディスクを最初のディスクと同じように表示したいいくつかのトリッキーなLinux(および一部のWindows)では、次のようになります。
menuentry "Boot from second disk and see it as first disk" {
set root=(hd1)
drivemap -s hd0 hd1
chainloader +1
}
menuentry "Boot from third disk and see it as first disk" {
set root=(hd2)
drivemap -s hd0 hd2
chainloader +1
}
menuentry "Boot from fourth disk and see it as first disk" {
set root=(hd3)
drivemap -s hd0 hd3
chainloader +1
}
すべてが詳細に説明されています:
(hd#)はディスクを表し、#はゼロから始まります
drivemapはドライブの交換を行うので、どのディスクも最初のディスク、または任意の数として見ることができます(2つのディスクで見られる順序で交換します)
チェーンローダー(hd#)+ 1がディスクのMBRにジャンプする
チェーンローダー+1は(ルート)に格納されているものの最初のセクターにジャンプします
set root = ...(root)が持つものを設定します。
(root)は変数のようなもので、lessを入力するために使用できます
grub.cfg
ファイルの完全なドキュメントについては、公式Webページを参照してください。