重新安装

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

安装之分割区来挂载。


Grub2中文指南5---重装或移除Grub2


o   


若未辨识出分割区,找找看有合适的大小或名称的。


o   


一旦挂载后,用户应该会看到

Ubuntu

系统目录例如

/boot


           


从选单中的「
应用程序」,「附属应用程序」,「终端机」来启动终端机。


           


执行如底下说明的

grub-setup -d

指令。这样会重新安装

GRUB 2

档案到挂载分割区的适当位置以及指定装置的

MBR

中。


           


 


 .       


参考「
位置」中的位置列来决定挂载点。将指令中的

XXXX


UUID

取代,若分割区并不是挂载在

/media

之下,则用正确的位置取代

/media/XXXX
。选定的位置可能是一个

UUID
,或是一个名称标签,若用户有自行建立的话(参考注意事项)。


a.      


若位置窗口的样式和图片里的不一样,按下左边的铅笔图标来更改样式。(译者注:这里的图片是旧版

Ubuntu

的样式,在

10.04

以后请按

Ctrl-L

来更改。)

 Grub2中文指南5---重装或移除Grub2


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


§ 


选择正确的装置(
sdasdb

等),一般而言就是

Ubuntu

安装的那个装置


§ 



/boot/grub

中建立

stage1
/stage2

档案并写入至主启动扇区(
MBR)。


           


重开机。


若使用者在重新启动时收到一个「
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(主题)