很久没来写东西了,玩arch上瘾了,总的来说arch是个很不错的linux发行版,用它比用ubuntu能学到更多Linux底层的知识,加深对linux系统架构的理解。今天很不幸的因为装一下该死的Vista把grub给毁了,幸好前面为了防止这种情况特地看了一下wiki上关于grub修复的文章,哪知实际操作起来按照wiki上写的完全不可以,在无数此尝试后我终于把grub修好了,不敢私藏,把具体的方法写出来和大家共享。欢迎指出错误之处。

在开始前先说说用到的命令的简单说明。首先是mount挂载命令:

# mount -t type device mountpoint

这条命令是将分区挂载到指定的目录,type是分区的格式,可以用的几个格式有:adfs, affs, autofs, cifs, coda, coherent, cramfs, debugfs, devpts, efs, ext, ext2, ext3, ext4, hfs, hfsplus, hpfs, iso9660, jfs, minix, msdos, ncpfs, nfs, nfs4, ntfs, proc, qnx4, ramfs, reiserfs, romfs, smbfs, sysv, tmpfs, udf, ufs, umsdos, usbfs, vfat, xenix, xfs, xiafs, 你需要根据自己分区选择对应的格式。

# mount -o -bind olddir newdir

这条命令可以看出是转换作用目录的。chroot用于改变程序执行时所参考的根目录位置。终端下输入grub命令是进入grub提示符界面。grub下输入root(hdX,Y)是指出linux分区所在位置,一般X是0,Y则是你装的linux根目录所在的分区号,注意这里是所在分区号有点小讲究,需要计算一下,比如我的是根目录是在/dev/sda7的,而硬盘上计数是从0开始的,所以这个第7个分区的分区号就应该是6,就是说Y就应该是6。罗嗦了一点,因为这段东西是按照我自己的理解写的,表达可能有点问题。在grub下setup (hd0)是将grub安装到硬盘的MBR分区(主引导分区)。了解这些之后可以开始修复了。

启动livecd,用root登录,登录之后就可以开始工作了。首先回忆一下你的分区,哪个分区挂载的是哪个目录,这很重要。回忆一下/目录是在哪个分区是什么格式的,装系统的时候有没有为/boot目录另外分区,如果分了又是在哪个分区是什么格式。这里我的电脑上/目录是在sda7,格式是jfs,装系统的时候我为/boot目录分了区,是sda8,分区格式是ext3。向终端中逐条输入下列命令:(#是指管理员权限)

# mount -t jfs /dev/sda7 /mnt
# mount -t ext3 /dev/sda8 /mnt/boot
# mount -t proc /proc /mnt/proc
# mount -t sysfs sys /mnt/sys
# mount -o bind /dev /mnt/dev

说明一下,第一句就是将原来系统的根目录所在分区挂载到livecd的/mnt中,第二句是将原来系统中/boot目录所在分区挂载到livecd的/mnt/boot,这两句的先后顺序不能换。第三句往后直接照抄就行,这几句都是挂载目录,为一会儿的在livecd中使用原来系统做准备。以上命令输完之后输入下一条命令:

# chroot /mnt /bin/bash

输入这条命令之后你之后输入的所有内容都是在原来系统中操作了。现在可以进行正式的grub修复了。在命令行中输入

# grub

进入grub提示符界面,在Grub命令中通过

root (hd0,6)

指出linux分区所在位置,注意这里要把6改成你自己电脑的相应数值!这步之后输入:

setup (hd0)

来安装grub到硬盘的主引导分区。这里的hd0基本不用改。这里我说的是基本,如果你的电脑有两个硬盘请根据你自己的情况来定!到此grub已经重新安装好了,输入:

quit

退出grub提示符,然后输入:

# exit

来结束chroot回到原系统,输入:

# reboot

重启你就能够正常启动你硬盘里原有的系统了!

错误之处还请留言指出,谢谢!