USB 中的 Ubuntu..从固定 HDD 启动?

USB 中的 Ubuntu..从固定 HDD 启动?

我的 USB 闪存盘上安装了 Ubuntu 12.04 最小版本;我在多个系统上将其用作便携式操作系统。

我正在考虑edit the boot parameters在主 Ubuntu 操作系统加载之前显示一个选项Boot from Hard Drive5 秒钟,然后启动到 Ubuntu。

这样,我就可以选择启动安装在硬盘上的操作系统,而无需移除或拔下我的 ubuntu USB 驱动器。

我该如何编辑启动参数来实现这一点?

答案1

这实际上是一种比乍一看要复杂得多的情况,因为几乎所有 BIOS 都有一种烦人的倾向,即重新排列驱动器的显示顺序,这样您启动的驱动器就始终是“第一个”驱动器,这也是一些引导加载程序(如 Microsoft 的引导加载程序)所期望的(即,如果您尝试链式加载到 Windows,如果包含 Windows 的驱动器似乎不是 BIOS 列出的“第一个”,则一切将无法正常工作)。从 CD 启动时不会出现此问题,因为 CD 与硬盘驱动器是分开处理的,不会改变顺序。还有一个事实是,可能有多个内部驱动器可供选择,因此在这种情况下,您应该能够选择要从哪个驱动器启动。

此外,Ubuntu 对 grub-mkconfig 进行了更改,这样除非检测到其他操作系统,否则 /etc/default/grub 中的 GRUB_TIMEOUT 设置将被忽略(这样做的目的是,如果您没有其他操作系统,除非您按住 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 秒的超时时间。由于您正在编辑 /boot/grub/custom.cfg 而不是 /etc/grub.d/40_custom,因此您甚至不需要运行 update-grub。

答案2

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是要启动的条目数减一。如果您想要启动引导加载程序中的第三个条目,X则应为2(grub 从中计数条目zero)。

保存。

2.3 更改启动到默认操作系统的超时时间

gksudo gedit /etc/default/grub

更改GRUB_TIMEOUT=30为启动默认操作系统前要等待的秒数。(我将其设置为 3 秒GRUB_TIMEOUT=XX

3.

sudo update-grub

4.

重新启动并选择Boot From Hard disk

相关内容