USBペンドライブにUbuntu 12.04ミニマルがインストールされています。いくつかのシステムでポータブルOSとして使用しています。
edit the boot parameters
なので、メインのUbuntu OSがロードされる前に、Boot from Hard Drive
を5秒間押してから、Ubuntuを起動します。
このようにして、ubuntu USBスティックを取り外したり取り外したりせずに、ハードドライブにインストールされているOSから起動するオプションを利用できます。
これを実現するためにブートパラメータを編集するにはどうすればよいですか?
これは実際には、最初に思われるよりもはるかに複雑なシナリオです。ほとんどすべてのBIOSは、起動したドライブが常に「最初の」ドライブになるようにドライブの提示方法を並べ替えるという厄介な傾向があるためです。一部のブートローダー(Microsoftなど)が期待するもの(つまり、Windowsを含むドライブがBIOSにリストされている「最初」ではないように見える場合にWindowsにチェーンロードしようとすると、正しく動作しません)。 CDはハードドライブとは別に扱われ、順序を変更しないため、CDから起動するときにこの問題は発生しません。また、選択できる内蔵ドライブが複数ある場合があるため、その場合は、どのドライブから起動するかを選択できるはずです。
このUbuntuに追加するには、grub-mkconfigを変更して、別のOSが検出されない限り、/ etc/default/grubのGRUB_TIMEOUT設定が無視されるようにします(別のOSがない場合、コンピューターを起動する必要があるという考えです) Shiftキーを押さない限り、grubメニューを待たないことで、より速くなります)。以下の解決策はこれらの問題のすべてを処理し、何が行われているのかが明らかである十分なコメントがあれば幸いです。
gksudo gedit /boot/grub/custom.cfg
を実行し、以下をコピーしてそれに貼り付けます。
# Set grub's timeout to 5 secons. By setting it here we are overriding any
# settings for the timeout in /etc/default/grub. This is to be sure that we get
# a five second timeout even if Ubuntu's grub-mkconfig thinks it's the only
# Operating System and disables showing of the menu.
timeout=5
insmod regexp
# Grab just the drive portion of $prefix, to determine what drive we booted
# from.
# The third parameter in the following command is a regular expression which
# says to capture just the "hdX" portion of a prefix like
# "(hd1,msdos5)/boot/grub". Note that the parentheses in the regular expression
# denote what needs to be captured (like in Perl and most other regular
# expression engines), they're not the parentheses that denote a device in grub.
regexp --set=current_drive '(hd.)' "$prefix"
# Loop through all drives (but not partitions)
for drive in *; do
# If the drive is the same as the one we're booted from just continue on to
# the next without creating a menu entry for it.
if [ "$drive" = "(${current_drive})" ]; then
continue
fi
# Make a menu entry with the device name of the drive in the title
menuentry "Chainload $drive" "$drive" {
drive="$2"
root="$drive"
# Swap the drive currently designated as (hd0) with the drive we want to
# chainload. Thus the drive we are about to chainload will appear to be the
# first drive to the bootloader we chainload.
drivemap -s "(hd0)" "$drive"
chainloader +1
}
done
その後、ファイルを保存するだけで完了です。
起動時に、チェーンロードに使用できる他のドライブがある場合は、それらのメニューエントリが表示されます(ない場合は表示されません)。デフォルトのメニューエントリは変更されません。つまり、Ubuntuはデフォルトで起動する必要があり、その前に5秒のタイムアウトが発生します。 /etc/grub.d/40_customではなく/boot/grub/custom.cfgを編集しているので、update-grubを実行する必要すらありません。
uSBからubuntuを起動します。端末を開きます。
gksudo gedit /etc/grub.d/40_custom
エントリの下に追加します。 行を削除しないでください。
menuentry "Boot From Hard disk" {
set root=(hd0,1)
chainloader +1
}
gksudo gedit /etc/default/grub
GRUB_DEFAULT=0
をGRUB_DEFAULT=X
に変更します。ここでX
は、起動するエントリ数から1を引いたものです。ブートローダーで3番目のエントリを起動する場合、X
は2
にする必要があります(zero
からのGRUBカウントエントリ)。
それを保存。
gksudo gedit /etc/default/grub
ここでGRUB_TIMEOUT=30
をGRUB_TIMEOUT=X
に変更します。ここでX
は、デフォルトのOSで起動するまで待機する秒数です。 (3秒に設定しました)
Sudo update-grub
再起動してBoot From Hard disk
を選択します