重新安装
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.
开机进入
LiveCD
桌面(Ubuntu
9.10
或更新版)。
2.
从选单中选择应用程序,附属应用程序,终端机来启动终端机。
3.
确认
Ubuntu
安装之分割区。fdisk
的选项「-l」是一个小写的「L」。
sudo fdisk -l
若使用者无法确定分割区,可以找一个拥有合适的大小或是格式的。
执行
sudo blkid
也许能提供更多的信息来协助找到适合的分割区,特别是若分割区有名称标记。装置/磁盘是由
sdX
来指定,X
即为指定的装置。sda
是第一个装置,sdb
是第二个,依此类推。绝大多数的使用者之
MBR
会被安装在
sda,系统中的第一个磁盘。分割区是由
Y
指定。第一个分割区是
1
,第二个是
2。注意到装置和分割区的计算法是不同的。
4.
挂载包含
Ubuntu
安装的分割区。
sudo mount /dev/sdXY
/mnt
范例:sudo
mount /dev/sda1
注意:若使用者有单独的
/boot
分割区,必须要挂载到
/mnt/boot
注意:若使用者有单独的
/home
分割区,必须挂载到
/mnt/home。加密的
home
分割区应能正常作业。
5.
执行下面所列出的
grub-install
指令。这样将会在挂载的分割区上的适当位置重新安装
GRUB 2
档案,以及指定装置上的
MBR。
sudo grub-install
–root-directory=/mnt/ /dev/sdX
范例:sudo
grub-install –root-directory=/mnt/ /dev/sda
6.
重新启动
7.
用
sudo update-grub
指令更新
GRUB 2
选单
8.
若用户想知道为何系统会失败,参考底下的回复后指令小节。
方案
2 –
从已安装的分割区复制
GRUB 2
档案
这是一个快速且简单的方法来回复系统损坏的
GRUB 2
档案。有问题的分割区将会从
LiveCD
来定位及挂载。相关档案接下来会由受损系统的
/boot/grub
目录复制到适当的位置以及
MBR
中。这样需要较少的步骤及较少的指令输入,跟之后的
CHROOT
方案比较起来。拥有分散系统分割区的用户,例如单独的
/boot
分割区,或其他特殊情况,使用
CHROOT
方案应该会有比较好的结果。
1.
开机进入
LiveCD
桌面(Ubuntu
9.10
或更新版)。
2.
挂载您
Ubuntu
安装所在的分割区。
a.
从「位置」选单,点选您的
Ubuntu
安装之分割区来挂载。
o
若未辨识出分割区,找找看有合适的大小或名称的。
o
一旦挂载后,用户应该会看到
Ubuntu
系统目录例如
/boot。
从选单中的「应用程序」,「附属应用程序」,「终端机」来启动终端机。
执行如底下说明的
grub-setup -d
指令。这样会重新安装
GRUB 2
档案到挂载分割区的适当位置以及指定装置的
MBR
中。
.
参考「位置」中的位置列来决定挂载点。将指令中的
XXXX
以
UUID
取代,若分割区并不是挂载在
/media
之下,则用正确的位置取代
/media/XXXX。选定的位置可能是一个
UUID,或是一个名称标签,若用户有自行建立的话(参考注意事项)。
a.
若位置窗口的样式和图片里的不一样,按下左边的铅笔图标来更改样式。(译者注:这里的图片是旧版
Ubuntu
的样式,在
10.04
以后请按
Ctrl-L
来更改。)
b.
以鼠标选取
UUID/位置来复制内容。在终端机中按下鼠标中键来贴上。若使用键盘的话,按
CTRL-C
来复制位置并使用
CTRL-SHIFT-V
来贴上至终端机中。
c.
装置/磁盘是由
sdX
来指定,X
即是指定的装置。sda
是第一个装置,sdb
是第二个装置,余类推。大部分使用者的
MBR
应该都是安装在
sda
中,即是系统中的第一个装置。
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.
若使用者收到一个「error:
Cannot open /boot/grub/device.map」讯息,加上一个
-m
选项以及
device.map
的路径至指令中,如下:
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.
使用
grub-setup
尚有其他的选项可使用。在终端机中,输入
grub-setup –help
即可列出一份所有选项的说明文件。
f.
也许您会重复收到「error:
Cannot open /boot/grub/device.map」讯息。如果持续发生,试着重新启动。使用
UUID
方法实际上应该会有作用,但会不正确的丢出一个错误讯息。使用名称卷标似乎不会发生这样重复出现错误讯息的问题。
重新启动
使用
sudo update-grub
来更新
GRUB 2
选单
若用户想要查明为何系统开机失败,参考以下的回复后指令小节。
Ubuntu 9.10
引进一个新的应用程序,能够简单的指定标签给现存的分割区。从选单中的「系统」,「管理」中执行磁盘公用程序来使用。
方案
3 – CHROOT
此方案安装会使用
chroot
指令来存取受损系统的档案。一旦执行了
chroot
指令,LiveCD
会将损坏系统的
/
(根目录)当作是目前自己所使用的。在
chroot
环境中执行的指令会影响受损系统的文件系统,而不是
LiveCD
的。
1.
开机进入
LiveCD
桌面(Ubuntu
9.10
或更新版)。注意此
LiveCD
必须要与您现在欲修复系统的版本相同
–
无论
32-bit
或是
64-bit(否则
chroot
会失败)。
2.
开启终端机
–
应用程序,附属应用程序,终端机。
3.
确认您的标准系统分割区
–
(选项是小写的「L」)
sudo
fdisk -l
o
若您不确定,执行
df
-Th
找到正确的磁盘容量及
ext3
或
ext4
格式。
4.
挂载您的标准系统分割区
o
用正确的分割区替换:sda1,
sdb5
等等。
sudo mount /dev/sdXX /mnt
#范例:sudo
mount /dev/sda1 /mnt
5.
若您有独立的
/boot
分割区:
o
sdYY
是
/boot
分割区的位置(例如
sdb3)
o
sudo mount /dev/sdYY /mnt/boot
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.
Chroot
至您的标准系统装置:
sudo
chroot /mnt
8.
若系统中没有
/boot/grub/grub.cfg
或其内容不正确,使用以下指令重建
update-grub
9.
重新安装
GRUB 2:
o
以正确装置替换
– sda, sdb,
等等。不要指定分割区号码。
grub-install /dev/sdX
10.
验证安装(使用正确的装置,例如
sda。不要指定分割区):
sudo
grub-install –recheck /dev/sdX
11.
退出
chroot:按下键盘之
CTRL-D
12.
卸除虚拟文件系统:
sudo
umount /mnt/dev/pts
sudo
umount /mnt/dev
sudo
umount /mnt/proc
sudo
umount /mnt/sys
o
若您有挂载独立的
/boot
分割区:
sudo
umount /mnt/boot
13.
卸除
LiveCD
的
/usr
目录:
sudo
umount /mnt/usr
14.
卸除最后的装置:
sudo
umount /mnt
15.
重新启动。
sudo
reboot
复原后指令
一旦用户可以开机至正常作业的系统,可试着查明为何系统之前开机失败。以下指令也许对找到及/或修复问题有所帮助。
·
重新整理
/boot/grub/grub.cfg
中可用的装置和设定
·
o
sudo update-grub
·
查询启动加载程序位置。
·
o
grub-probe -t device /boot/grub
·
安装
GRUB 2
至
sdX
分割区的
MBR
中(sda,
sdb
等等。)
·
o
sudo grub-install /dev/sdX
·
重新验证安装。(sda,
sdb
等等。)
·
o
sudo grub-install –recheck /dev/sdX
更改或移动
GRUB 2
更改
GRUB 2
安装装置或启动文件的指令的方式是以
root
身份执行
grub-install。此指令允许用户藉由设定根(ROOT)目录、预载模块、执行特定配置文件案或其他方式来修改安装。当执行时,grub-install
可能会执行一或多个其他指令,例如
grub-probe、grub-mkimage
和
grub-setup。这里是当执行
grub-install
时一些需要考虑的:
·
在一般情况下应该使用
grub-install
指令而不是
grub-setup。当需要的时候
grub-install
会呼叫
grub-setup。
·
此指令应指定一装置,当执行时将会安装
GRUB
需要的档案至指定的装置上。(例如:sudo
grub-install /dev/sda)
·
若用户试图在执行此指令时指定一个分割区,(例如:sudo
grub-install /dev/sda6)会发出一个警告讯息。指定一个分割区是不被建议采用的而被列在阻挡清单(blocklists)中,阻挡清单是开发者认为不可靠的部份。然而还是有复写此建议的选项,若用户依然想要如此做的话。
·
grub-install
可用选项列表可在终端机中执行
grub-install –help
来显示。
·
grub-install
之联机帮助文件(man
page)目前尚不会显示所有可用的选项。
移除
GRUB 2
回复至传统
GRUB
若使用者选择回复至传统
GRUB(0.97),以下步骤将移除
GRUB 2
并安装
GRUB。
命令行模式提供较清楚干净的移除和重新安装。然而
Synaptic
也可以做到新增和移除套件,某些步骤依然要进入终端机来达成。
1.
开启终端机:应用程序(Applications),附属应用程序(Accessories),终端机(Terminal)。
2.
选用:备份
GRUB 2
目录和档案。
o
sudo cp /etc/default/grub /etc/default/grub.old
o
sudo cp -R /etc/grub.d /etc/grub.d.old
o
sudo cp -R /boot/grub /boot/grub.old
3.
移除
GRUB 2
o
sudo apt-get purge grub2 grub-pc
o
此时在其他启动加载程序安装前,系统将无法开机。
o
当套件移除后,许多档案依然会留在「/boot/grub」下
4.
安装
GRUB 0.97
o
sudo apt-get install grub
5.
当
grub
安装后,使用者依然需要执行以下两个指令来建立
menu.lst
和
stage1/stage2
档案。
a.
sudo update-grub
§
产生
menu.lst
§
提示时选择「Yes」。
b.
sudo grub-install /dev/sdX
§
选择正确的装置(sda、sdb
等),一般而言就是
Ubuntu
安装的那个装置
§
在
/boot/grub
中建立
stage1/stage2
档案并写入至主启动扇区(MBR)。
重开机。
若使用者在重新启动时收到一个「Unrecognized
device string Error 11」错误讯息,参考解决
Unrecognized device string Error 11
小节,有关如何编辑选单和使系统可开机的指令。
外接磁盘安装及「grub-pc」更新
安装
Ubuntu
在外接磁盘上可能会导致问题产生,因为
grub-install
某些状况下会使用装置名称(例如
sda, sdb)而不是
UUID。若在连接到其他机器的时候进行
grub-pc
更新,那么可能会将更新写入至错误的装置并使得计算机无法开机。
有一个暂时解决方案在上面的错误回报连结中有提供。
外接磁盘安装及
MBR
选择
当安装
Ubuntu
至
USB
磁盘中时,GRUB
2
有可能会写入至硬盘的
MBR
中,或是分开至硬盘及
USB
磁盘中(而不是全部在
USB
磁盘中)。这样可能会使得主磁盘无法开机。
暂时解决方案:在安装过程的最后一个步骤,有一个「进阶(Advanced)」按钮,可以允许用户选择安装的位置。更多细节请参考错误回报。
开机分割区所在的逻辑卷册(Logical
Volume)位于包含一份系统快照(snapshot)的卷册群组内(Volume
Group)
当您的开机分割区(放置
/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(主题)
最新评论