删除Linux与恢复grub

启动讨论 grub/grub2/syslinux/grub4dos/Lilo
lisir
帖子: 1187
注册时间: 2006-04-29 14:54
来自: 山东
联系:

删除Linux与恢复grub

#1

帖子 lisir » 2007-07-24 18:49

说明:
收到一个网友的短信,告知按这个帖子出了问题,很令我惭愧。抱歉。
我要说明的一点是,我对Linux并不是很熟悉,我写的帖子多是自己应用中的积累。而Linux应用环境很复杂,各种情况都 有,我不可能全面掌握。如果想彻底解决问题,还是知其然又知其所以然的好。否则其它人无法解决你的问题,除非与你的应用环境相同。
而我在使用Linux时并没有将/boot单独分区,这点与该网友不同,以致该网友在使用find /boot/grub/stage1时发生Error 15: File not found错误。按starboys网友说的“如果boot分区是单独分的上面的/boot/grub/stage1应该改成/grub/stage1。”这里是需要注意的。
而我之所以没有采用连按Tab方式列出可用分区,是因为当时我认为对新手来说,确认是哪个分区并不容易,特别是划分了多个Linux分区的情况下。却没想到单独划分/boot区会导致原命令出现错误。很抱歉。
参见:viewtopic.php?t=90831


删除Linux与恢复grub,这是我等新手常遇到的两个问题,感觉Linux不好,想退出,就要删除Linux,覆盖Grub;而装了Windows与Linux双系统的用户,又会在重装Windows时把Grub覆盖掉,需要恢复Grub。这是后路,我们在做事之前需要先考虑好的。

删除Linux,覆盖Grub,还原成XP自带的启动引导,这个很简单,只要你有Windows XP盘(非Ghost),用它启动,至选择安装位置的地方退出重启就可以。或者用它启动故障修复台,运行fixboot或者fixmbr都可以。

而恢复Grub,其实也很简单的:用Live CD(对于Ubuntu来说就是Desktop CD或者DVD)启动,打开终端(Applications──>Accessory──>Terminal),执行以下代码:

代码: 全选

sudo grub                               
find /boot/grub/stage1
root (hdX,Y)
setup (hdX)
quit
注意:其中的X、Y是执行find /boot/grub/stage1命令后系统提示的。,比如:

代码: 全选

grub> find /boot/grub/menu.lst
 (hd0,7)
注意:这里的grub>是执行sudo grub命令后进入grub环境得到的提示符,不用输入。这时,X就是0,Y就是7。

下面详细解释一下这几条命令:


sudo grub 以root用户身份启动grub,否则会出错,错误见后文
find /boot/grub/stage1 寻找/boot所在分区,其实换用find /boot/grub/menu.lst也一样。
这一步也可以跳过,在执行root (hdX,时连按两下Tab列出可用分区,自己确定是哪个分区。
如果是将/boot单独分区,详见说明。

root (hdX,Y) 设置硬盘hdX的根文件系统(root Device),实际就是设置/boot所在的分区
setup (hdX) 自动安装GRUB到硬盘hdX。
quit 退出GRUB
root、setup命令后都有空格,如果没有会出错误。
如果不以root用户身份会出现什么样的错误呢?
ubuntu@ubuntu:~$grub

[ Minimal BASH-like line editing is supported. For
the first word, TAB lists possible command
completions. Anywhere else TAB lists the possible
completions of a device/filename. ]

grub> find /boot/grub/stage1

Error 15: File not found

grub> find /boot/grub/menu.lst

Error 15: File not found

grub> root(hd0,7)

Error 27: Unrecognized command

grub> root (hd0,7)

Error 21: Selected disk does not exist
grub> setup (hd0)

Error 12: Invalid device requested
一个成功例子:
ubuntu@ubuntu:~$ sudo grub
[ Minimal BASH-like line editing is supported. For
the first word, TAB lists possible command
completions. Anywhere else TAB lists the possible
completions of a device/filename. ]

grub> find /boot/grub/menu.lst
(hd0,7)

grub> root (hd0,7)

grub> setup (hd0)
Checking if "/boot/grub/stage1" exists... yes
Checking if "/boot/grub/stage2" exists... yes
Checking if "/boot/grub/e2fs_stage1_5" exists... yes
Running "embed /boot/grub/e2fs_stage1_5 (hd0)"... 15 sectors are embedded.
succeeded
Running "install /boot/grub/stage1 (hd0) (hd0)1+15 p (hd0,7)/boot/grub/stage2 /boot/grub/menu.lst"... succeeded
Done.
grub>quit
这是最简单的方法,也有其它几个寻找/boot分区的方法,但稍麻烦点:
在终端使用ls /dev/sd*和ls /hd*命令来查找系统的外部设置,用sudo mkdir命令来建立挂载目录,用sudo mount命令挂载,再用ls命令查看是否/boot所在的分区。

也可以用sudo fdisk -l来找到启动分区(这里不涉及将/boot单独分区的情况,因为那种我没有实验过,不太清楚),如:
ubuntu@ubuntu:~$ sudo fdisk -l

Disk /dev/sda: 160.0 GB, 160041885696 bytes
255 heads, 63 sectors/track, 19457 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

Device Boot Start End Blocks Id System
/dev/sda1 * 1 2295 18434556 7 HPFS/NTFS
/dev/sda2 2296 19456 137845732+ f W95 Ext'd (LBA)
/dev/sda5 2296 4845 20482843+ 7 HPFS/NTFS
/dev/sda6 4846 8669 30716248+ 7 HPFS/NTFS
/dev/sda7 8670 16557 63360328+ 7 HPFS/NTFS
/dev/sda8 * 16558 17361 6458098+ 83 Linux
/dev/sda9 17362 19393 16322008+ 83 Linux
/dev/sda10 19394 19456 506016 82 Linux swap / Solaris
就知道启动分区是/dev/sda8

有人可能会有疑问,在Linux系统中是用sda8来表示这个启动分区,而GRUB中则是用(hd0,7)表示,这是因为在新版的Ubuntu中系统将串口硬盘和并口硬盘都识别为sd,a表示第一硬盘,8表示第4个逻辑分区(1──4被分配给主分区,扩展分区里的逻辑分区从5开始计算)。而Grub中则是用统一用hd代表硬盘,硬盘号与分区号都是从0开始计算的。
这部分是凭记忆写的,可能不准确,请参考wiki。

PS:
看到有的帖子说Alterate CD可以在boot后输入linux rescue来启动救援盘,后面的操作则一样。我因手头没有Alterate CD无法验证。DVD虽说集成了Alterate CD与Desktop CD,但无法在以字符界面安装时启动救援盘。

感谢雕雕补充:
雕啸长空 写了: 补充一点,上面讲的是在/boot下面的东西都还完好的,但如果RP不行,/boot都玩完了,可以试一下下面的:
生成/etc/mtab

代码: 全选

sudo grep -v rootfs /proc/mounts >sudo tee /etc/mtab
安装grub到mbr

代码: 全选

grub-install --no-floppy /dev/hda
然后就自己搞定menu.lst了.
[/color]
ps:将雕的命令按viewtopic.php?t=67897修改了一下。
顺便鄙视一下Linux/Windows双料菜鸟。
再鄙视一下自己,其实这都是网上流传的已有的,只是这次恰好在实验Vista时用上了实证了一下。
上次由 lisir 在 2007-11-24 18:20,总共编辑 4 次。
学会看置顶帖、精华帖。
学会使用搜索。
常见问题解答和发帖需知
头像
Nile
帖子: 990
注册时间: 2006-07-15 11:20
来自: 枫叶刀市

#2

帖子 Nile » 2007-07-24 18:59

lz辛苦,支持一下。
Thinkpad T400
Conan304
帖子: 299
注册时间: 2006-12-15 16:11
来自: KM

#3

帖子 Conan304 » 2007-08-04 10:19

弱弱的问问,有什么工具可以备份grub,如果出意外的时候可以还原啊。
头像
skyx
论坛版主
帖子: 9202
注册时间: 2006-12-23 13:46
来自: Azores Islands
联系:

#4

帖子 skyx » 2007-08-04 11:35

在windows的磁盘管理中删除linux分区的注意事项,可看我的签名档。
no security measure is worth anything if an attacker has physical access to the machine
带头大哥777
帖子: 13
注册时间: 2007-07-27 22:12

#5

帖子 带头大哥777 » 2007-08-04 12:23

lz辛苦,支持
appless
帖子: 35
注册时间: 2005-09-07 14:03

#6

帖子 appless » 2007-08-04 14:04

这样不是更方便,dos引导盘启动,fdisk /mbr
然后restart到windows,在磁盘管理中删除linux不久行了
头像
anway
帖子: 403
注册时间: 2007-07-22 12:13

#7

帖子 anway » 2007-08-04 17:11

好东东,感谢分享! :) :)
头像
skyx
论坛版主
帖子: 9202
注册时间: 2006-12-23 13:46
来自: Azores Islands
联系:

#8

帖子 skyx » 2007-08-04 18:08

appless 写了:这样不是更方便,dos引导盘启动,fdisk /mbr
然后restart到windows,在磁盘管理中删除linux不久行了


有时直接从windows磁盘管理中删除会出问题的:
有可能会出现windows的逻辑分区丢失!请看下我的签名档!
no security measure is worth anything if an attacker has physical access to the machine
头像
vanciki
帖子: 212
注册时间: 2007-06-27 16:35
来自: 深圳
联系:

#9

帖子 vanciki » 2007-08-04 23:11

好详细啊
头像
huyang163
帖子: 71
注册时间: 2007-08-03 17:06

#10

帖子 huyang163 » 2007-08-07 21:49

刚学,还不清楚
头像
iamgreat
帖子: 106
注册时间: 2007-08-07 13:42

#11

帖子 iamgreat » 2007-08-14 18:16

学习,多谢LZ啊
uoleon
帖子: 1
注册时间: 2007-03-19 16:46

#12

帖子 uoleon » 2007-08-14 22:00

学习一下,多谢lz
头像
iridiumcao
帖子: 245
注册时间: 2007-01-18 18:05
来自: Shanghai
联系:

#13

帖子 iridiumcao » 2007-08-14 22:04

此文有用,收藏了!
谢谢搂猪的翔实的总结。
Dell Inspiron 1501
Xubuntu&Lubuntu 11.10

Ade, Gnome3, Ade, Unity!

随心所欲不逾矩
yaoabin
帖子: 21
注册时间: 2007-06-13 17:34

#14

帖子 yaoabin » 2007-08-25 17:07

skyx 写了:在windows的磁盘管理中删除linux分区的注意事项,可看我的签名档。
你的签名档在哪?
lisir
帖子: 1187
注册时间: 2006-04-29 14:54
来自: 山东
联系:

#15

帖子 lisir » 2007-08-25 19:11

他指的应该是viewtopic.php?t=58659
1.6分区小贴士
学会看置顶帖、精华帖。
学会使用搜索。
常见问题解答和发帖需知
回复