我的 USB 闪存盘上安装了 Ubuntu 12.04 最小版本;我在多个系统上将其用作便携式操作系统。
我正在考虑edit the boot parameters
在主 Ubuntu 操作系统加载之前显示一个选项Boot from Hard Drive
5 秒钟,然后启动到 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=0
为GRUB_DEFAULT=X
此处X
是要启动的条目数减一。如果您想要启动引导加载程序中的第三个条目,X
则应为2
(grub 从中计数条目zero
)。
保存。
2.3 更改启动到默认操作系统的超时时间
gksudo gedit /etc/default/grub
更改GRUB_TIMEOUT=30
为启动默认操作系统前要等待的秒数。(我将其设置为 3 秒GRUB_TIMEOUT=X
)X
3.
sudo update-grub
4.
重新启动并选择Boot From Hard disk