重新安装 GRUB 2
有时使用者可能需要移动或是重新安装
GRUB 2。当用户遇到空白屏幕上只有
GRUB
字样,没有提示符号,也没有办法输入指令的时候,就需要重新安装
GRUB 2。这通常发生在开机装置的
MBR
区被修改的时候,例如在安装
Ubuntu
之后才安装
Windows。此外,若用户完全无法开机进入操作系统,甚至无法使用救援模式,那么也许必须要重新完全安装
GRUB 2。
由
LiveCD
重新安装
若您无法从
GRUB 2
开机,请参考开机问题及救援模式小节。若需要重新安装,则依照这些程序进行。这里有提出两个方案;两者皆需要从
LiveCD
开机(Ubuntu
9.10, Karmic Koala
或更新版本)。若第一个方案没有作用,就进行第二方案,这会比较复杂且包含更多选项及指令。
最简易方案
-
从
LiveCD
复制
GRUB 2
档案
这是一个从故障的
GRUB 2
系统复原的快速及简单方法。会使用终端机来输入指令,而用户必须知道被安装之系统上的装置名称/分割区(sda1,
sdb5
等等)。有问题的分割区将会从
LiveCD
来定位及挂载。相关档案接下来会由
LiveCD
来复制到合适的地点及
MBR
中。跟之后的方法比起来,这样需要最少的步骤和较少的指令输入。
1.
2.
3.
sudo fdisk -l
若使用者无法确定分割区,可以找一个拥有合适的大小或是格式的。
执行
sudo blkid
也许能提供更多的信息来协助找到适合的分割区,特别是若分割区有名称标记。装置/磁盘是由
sdX
来指定,X
即为指定的装置。sda
是第一个装置,sdb
是第二个,依此类推。绝大多数的使用者之
MBR
会被安装在
sda,系统中的第一个磁盘。分割区是由
Y
指定。第一个分割区是
1
,第二个是
2。注意到装置和分割区的计算法是不同的。
4.
sudo mount /dev/sdXY
/mnt
范例:sudo
mount /dev/sda1
注意:若使用者有单独的
/boot
分割区,必须要挂载到
/mnt/boot
注意:若使用者有单独的
/home
分割区,必须挂载到
/mnt/home。加密的
home
分割区应能正常作业。
5.
sudo grub-install
--root-directory=/mnt/ /dev/sdX
范例:sudo
grub-install --root-directory=/mnt/ /dev/sda
6.
7.
8.
方案
2 -
从已安装的分割区复制
GRUB 2
档案
这是一个快速且简单的方法来回复系统损坏的
GRUB 2
档案。有问题的分割区将会从
LiveCD
来定位及挂载。相关档案接下来会由受损系统的
/boot/grub
目录复制到适当的位置以及
MBR
中。这样需要较少的步骤及较少的指令输入,跟之后的
CHROOT
方案比较起来。拥有分散系统分割区的用户,例如单独的
/boot
分割区,或其他特殊情况,使用
CHROOT
方案应该会有比较好的结果。
1.
2.
a.
o
o
a.
b.
c.
sudo grub-setup -d
/media/XXXX/boot/grub /dev/sda
范例:
sudo
grub-setup -d
/media/7848138a-41a0-4eba-8aed-d1b625ac8759/boot/grub
/dev/sda
d.
sudo grub-setup -d
/media/XXXXX/boot/grub -m /media/XXXXX/boot/grub/device.map
/dev/sda
范例:
sudo
grub-setup -d
/media/7848138a-41a0-4eba-8aed-d1b625ac8759/boot/grub -m
/media/7848138a-41a0-4eba-8aed-d1b625ac8759/boot/grub/device.map
/dev/sda
e.
f.
Ubuntu 9.10
引进一个新的应用程序,能够简单的指定标签给现存的分割区。从选单中的「系统」,「管理」中执行磁盘公用程序来使用。
方案
3 - CHROOT
此方案安装会使用
chroot
指令来存取受损系统的档案。一旦执行了
chroot
指令,LiveCD
会将损坏系统的
/
(根目录)当作是目前自己所使用的。在
chroot
环境中执行的指令会影响受损系统的文件系统,而不是
LiveCD
的。
1.
2.
3.
sudo
fdisk -l
o
df
-Th
找到正确的磁盘容量及
ext3
或
ext4
格式。
4.
o
sudo mount /dev/sdXX /mnt #范例:sudo mount /dev/sda1 /mnt
5.
o
o
6.
sudo
mount --bind /dev /mnt/dev
sudo
mount --bind /dev/pts /mnt/dev/pts
sudo
mount --bind /proc /mnt/proc
sudo
mount --bind /sys /mnt/sys
7.
sudo
chroot /mnt
8.
update-grub
9.
o
grub-install /dev/sdX
10.
sudo
grub-install --recheck /dev/sdX
11.
12.
sudo
umount /mnt/dev/pts
sudo
umount /mnt/dev
sudo
umount /mnt/proc
sudo
umount /mnt/sys
o
sudo
umount /mnt/boot
13.
sudo
umount /mnt/usr
14.
sudo
umount /mnt
15.
sudo
reboot
复原后指令
一旦用户可以开机至正常作业的系统,可试着查明为何系统之前开机失败。以下指令也许对找到及/或修复问题有所帮助。
·
·
o
·
·
o
·
·
o
·
·
o
更改或移动
GRUB 2
更改
GRUB 2
安装装置或启动文件的指令的方式是以
root
身份执行
grub-install。此指令允许用户藉由设定根(ROOT)目录、预载模块、执行特定配置文件案或其他方式来修改安装。当执行时,grub-install
可能会执行一或多个其他指令,例如
grub-probe、grub-mkimage
和
grub-setup。这里是当执行
grub-install
时一些需要考虑的:
·
·
·
·
·
移除 GRUB 2
回复至传统
GRUB
若使用者选择回复至传统
GRUB(0.97),以下步骤将移除
GRUB 2
并安装
GRUB。
命令行模式提供较清楚干净的移除和重新安装。然而
Synaptic
也可以做到新增和移除套件,某些步骤依然要进入终端机来达成。
1.
2.
o
o
o
3.
o
o
o
4.
o
5.
a.
§
§
b.
§
§
若使用者在重新启动时收到一个「Unrecognized device string Error 11」错误讯息,参考解决 Unrecognized device string Error 11 小节,有关如何编辑选单和使系统可开机的指令。
外接磁盘安装及「grub-pc」更新
Launchpad
Bug 496435
安装
Ubuntu
在外接磁盘上可能会导致问题产生,因为
grub-install
某些状况下会使用装置名称(例如
sda, sdb)而不是
UUID。若在连接到其他机器的时候进行
grub-pc
更新,那么可能会将更新写入至错误的装置并使得计算机无法开机。
有一个暂时解决方案在上面的错误回报连结中有提供。
外接磁盘安装及
MBR
选择
Launchpad
Bug 414996
当安装
Ubuntu
至
USB
磁盘中时,GRUB
2
有可能会写入至硬盘的
MBR
中,或是分开至硬盘及
USB
磁盘中(而不是全部在
USB
磁盘中)。这样可能会使得主磁盘无法开机。
暂时解决方案:在安装过程的最后一个步骤,有一个「进阶(Advanced)」按钮,可以允许用户选择安装的位置。更多细节请参考错误回报。
开机分割区所在的逻辑卷册(Logical
Volume)位于包含一份系统快照(snapshot)的卷册群组内(Volume
Group)
Launchpad
Bug 563895
当您的开机分割区(放置
/boot)是
LV,请确认不要有任何的
LVM
快照在包含的
VG
中。在重新启动时会让您的系统无法开机,进入「grub
rescue>」环境中并显示以下讯息:「error:
no such disk.」
grub-rescue
接口在这里无法帮助您,因为所有的模块(特别是
lvm)皆无法存取。您必须从其他安装媒体中开机并手动移除与
boot
分割区在同一个
VG
里所有的快照。
若您的服务器在远程数据中心,这个问题会超级麻烦,因为问题的原因无法简单的查到,且修复系统可能会很困难。
虽然此问题会在即将到来的
Maverick Meerkat 10.10
版本中修复,然而目前的
Lucid Lynx LTS 10.04
却是有受到影响的。
一个暂时解决方法是将
Ubuntu
的
/boot
安装在一个分开的非
LVM
分割区中,如果您常常使用
LVM
的快照功能的话。
讽刺的是如果您是个细心的人,会在更新前(或是可能的重新启动前)制作一份
LVM
快照,反而会引发这个
bug。
由序列式控制台(Serial
Console)开机
若您想要
GRUB
透过序列式连线作业,您需要去掉在
/etc/default/grub
档案中
GRUB_TERMINAL
的批注,并设定为
serial(取代预设的
console)。默认的序列式控制台设定将会作业在第一个串行端口(ttyS0),以
9600 bit/s
传输速率及
8 data bits,1
stop bit,无同位检查。
若您想使用其他串行端口,或是您的控制台使用不同的设定,您必须加入一行
GRUB_SERIAL_COMMAND
来为
serial
指令指定额外的参数。GRUB
2
使用的
serial
指令与传统
GRUB
对应的部份语法相同(文件在这里)。例如,一个
4800 bit/s
序列联机使用
7 data bits,1
stop bit
和偶数校验:
GRUB_SERIAL_COMMAND="serial --unit=0 --speed=4800 --word=7
--parity=even --stop=1"
连结
以下皆为英文参考文件连结。
GrubHowTo
Grub
2 (Ubuntu Wiki)
外部连结
GNU
GRUB
GNU
GRUB 2 Manual
Illustrated
Dual Boot HomePage
Mac
OS X (XNU) Support
Mac
OS X Boot Snow Leopard
http://grub.gibbit.com/Theme_format(主题)