web-dev-qa-db-ja.com

USBのUbuntu ..固定HDDから起動しますか?

USBペンドライブにUbuntu 12.04ミニマルがインストールされています。いくつかのシステムでポータブルOSとして使用しています。

edit the boot parametersなので、メインのUbuntu OSがロードされる前に、Boot from Hard Driveを5秒間押してから、Ubuntuを起動します。

このようにして、ubuntu USBスティックを取り外したり取り外したりせずに、ハードドライブにインストールされているOSから起動するオプションを利用できます。

これを実現するためにブートパラメータを編集するにはどうすればよいですか?

3
Bhavesh Diwan

これは実際には、最初に思われるよりもはるかに複雑なシナリオです。ほとんどすべての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を実行する必要すらありません。

4
Jordan Uggla

1。

uSBからubuntuを起動します。端末を開きます。

2.1ブートハードドライブにエントリを追加する

gksudo gedit /etc/grub.d/40_custom

エントリの下に追加します。 行を削除しないでください。

menuentry "Boot From Hard disk" {
    set root=(hd0,1)
    chainloader +1
}

2.2デフォルトのエントリをブートに変更

gksudo gedit /etc/default/grub

GRUB_DEFAULT=0GRUB_DEFAULT=Xに変更します。ここでXは、起動するエントリ数から1を引いたものです。ブートローダーで3番目のエントリを起動する場合、X2にする必要があります(zeroからのGRUBカウントエントリ)。

それを保存。

2.3デフォルトのOSで起動するようにタイムアウトを変更する

gksudo gedit /etc/default/grub

ここでGRUB_TIMEOUT=30GRUB_TIMEOUT=Xに変更します。ここでXは、デフォルトのOSで起動するまで待機する秒数です。 (3秒に設定しました)

3。

Sudo update-grub

4。

再起動してBoot From Hard diskを選択します

2
Rahul Virpara