转载请注明出处:http://hi.baidu.com/vzomik/blog/item/0c6ca6f11c23971eb07ec516.html
该文章是对
(点这里查看)的补充与改进,以下某些内容的前题是你已经安装了 Grub2 在你的电脑上,
本文并没有提及如何下载安装 Grub2,毕竟这么简单,你懂的,可 Google “GRUB 2 安装及配置笔记”。
我们按照题目的顺序,先来说说 Grub2 如何安装到 U 盘:
第一步,创建一个挂载点用于挂载 U 盘,并且挂载它:
sudo mkdir -p /media/u
sudo mount /dev/sdb1 /media/u
第二步,当然是安装了,是不是很快?其实不快了,毕竟还是这么简单,你也懂的:
sudo grub-install --root-directory=/media/u /dev/sdb
附注:在基于 Ubuntu 10.04 的 Mint 9 下,笔者发现其实 grub-install 是一个脚本,
if 判断后调用 grub-install.real 脚本,网上资料有部分过时,请勿尽信,有调查才有发方权,
比如其没有调用 grub-mkdevicemap 命令,因为我没有在 /boot/grub 下找到 device.map 文件,
我是在手动执行 grub-mkdevicemap 命令后,才发现该目录下有 device.map 文件的。
第三步,可选的一步,如果你不想敲命令,或者想用一个 U 盘启动 N 个系统,Just Do it!
在 /media/u/boot/grub/ 目录下新建一个 grub.cfg 纯文本文件,
参考 /boot/grub/grub.cfg 并写入相应内容到 /media/u/boot/grub/grub.cfg。
按照题目的顺序,再来说说 Grub2 如何修复硬盘 MBR,当然你要先用 LiveCD 引导到桌面:
第一步,创建一个挂载点用于挂载 / 分区,并挂载它:
sudo mkdir -p /mnt/root
sudo mount /dev/sda1 /mnt/root
附注:/dev/sda1 是我的 / 分区,如果你的 /boot 是在另外的分区如 /dev/sda2,参考以下命令:
sudo mkdir -p /mnt/root/boot
sudo mount /dev/sda2 /mnt/root/boot
再注:挂载其他分区或设备,听说 /dev 很重要,不能漏掉?反正我没有漏掉就是了~
如果 /dev,/bin,/usr 等等之类的,也是在另外的分区,参考以上命令挂载到 /mnt/root/ 下。
第二步,改变根分区,这时具有根权限,更新配置文件:
sudo chroot /mnt/root
update-grub
第三步,安装 Grub2 到硬盘 /dev/sda 的 MBR 上:
grub-install /dev/sda
三注:update-grub 是一个脚本文件,调用 grub-mkconfig 脚本,请自行查看。
至于 chroot 命令,这里不重点解释说明,需要了解的可以自行 Google。
第四步,反挂载已经挂载的分区设备,不过我们还是直接重启好了,这样快很多,哈!
按照题目的顺序,最后来说说如何用 Grub2 与 ISO 重装系统,也可用刚才制作的 Grub2 U 盘:
重启电脑,在 BIOS 自检完成后,按着左 Shift 键进入 Grub2 的界面,按 C 进入命令行,参考以下命令:
grub> root (hd0,3)
grub> loopback loop (hd0,3)/reset/mint/linuxmint-9-gnome-dvd-i386.iso
grub> linux (loop)/casper/vmlinuz boot=casper iso-scan/filename=/reset/mint/linuxmint-9-gnome-dvd-i386.iso
grub> initrd (loop)/casper/initrd.lz
grub> boot
附注:
grub> 是指提示符,不用输入,loopback 后的 loop 不是固定的,用 lo 也可以,不过要把下面的 (loop) 改为 (lo)。
(hd0,3)/reset/mint/linuxmint-9-gnome-dvd-i386.iso 是我的 ISO 镜像在硬盘上的位置,必须要自行修改。
linux 后的 (loop) 是上面的 loopback 后 loop 的对应挂载设备,下面的 initrd 后的 (loop) 也是一样。
(loop)/casper/vmlinuz 是在光盘中的启动所需的内核文件,下面的 /casper/initrd.lz 文件是用于引导初始化的。
boot=casper 是 Ubuntu 系列的 LiveCD 启动参数,其他系统一般不是这个,需自行修改 boot= 之后的内容。
iso-scan/filename= 后是 ISO 所在的绝对路径,第一个命令要理解。我试过用 isofrom= 和 findiso= 这两个选项,可惜启动失败了。
或者你可以把上面的命令写到 /etc/grub.d/40_custom 中,再执行 update-grub 让其自动写到 /boot/grub/grub.cfg 中。
命令写到 /etc/grub.d/40_custom,再执行 update-grub,重启时按左 Shift 键失效,会直接进入 LiveCD 系统,不知是否人品问题,
不过也好,直接重装。