[经验] win7,ubuntu12.04和redhat 6.4三系统共存遇到的一些问题及解决
2013-12-06 21:03
447 查看
导读:
本文偏重对Linux系统的启动引导讲解,并采用ubuntu的boot loader引导启动。如果要快速解决三系统共存的引导问题,可参考另一博文:http://blog.csdn.net/xiaolanzao/article/details/19831473
安装LINUX系统时,分区时一般这样分:
/boot:第一个要分出100~200M的/boot分区,里面放着内核文件和boot loader.
/:然后有一个根目录的分区“/",大小根据你的需要和磁盘大小;
/tmp:如果是企业的系统时,一般会单独分出/tmp分区,几G+不等,个人计算机则不需要;
swap:最后有一个swap分区,一般是实际内存大小的1~2倍,如果你的内存很足够了,可以不需要。
如果没有选择”自定义分区”的话:
会默认将系统的引导写进MBR(MasterBoot Recorder),
如果只有windows 和linux两个系统的话,可以先装windows再装linux,也可以使其和平共处。
如果装三个系统,则第三个linux系统的boot loader会覆盖掉之前的linux系统的boot loader,因此无法实现两个linux的系统自动引导。
因此,就会产生无法自动引导存在两个linux系统的问题,也就是本文要讨论解决的问题。
注:我是先装win7,再装ubuntu,最后装redhat
如果想用ubuntu的boot loader来进行引导,则在装redhat时,选择“自定义分区”,最后选择“不将boot loader写入MBR”
然后再修改ubuntu的boot loader文件(即grub.cfg),加入redhat的引导选项。
本人装linux系统时并没有选择自定义分区,根据顺序,我是用了redhat的boot loader(文件位置/boot/grub/grub.conf),加入ubuntu的引导,所以此博文都是根据这个来写的。其实都是大同小异,理解其中原理就行。
为什么可以先装windows后装linux实现双系统正常引导,而两个linux却不行?
如果先装linuxs后装windows,windows的引导会直接覆盖掉MBR,导致无法引导linux,因此要先装linux
linux的引导记录是写在MBR,所以会直接去MBR里寻找,而windows的是写在PBR(partitionboot recorder),当有激活分区时,就去PBR寻找引导记录;
当检测到已经安装有windows系统时,linux的bootloader可以选择是否继续选择跳转到windows的boot loader去引导启动,因此可以实现正常引导
我的安装过程:
1,原本电脑里有win7和redhat 5.5。
2,进PE系统,用DiskGenius删除掉redhat的分区后,装了ubuntu 12.04。成功后启动可正常进入两个系统。
3,装redhat 6.4,选择安装分区时选了从现有linux分区中切割出一部分空间来装。
4,安装成功后,重启,果然只能选择进入redhat和win7,而没有ubuntu的选项。
由于丢失了ubuntu引导,所以需要我们手动添加。由于已经有了redhat的grub引导,我决定加入ubuntu的引导选项。以下步骤需要小心操作,避免误改文件而导致新的系统问题。
进入redhat系统,执行“fdisk -l”查看分区情况。看你的两个linux系统分别装在哪里,一般先装的会在前面。
把ubuntu系统挂载到/mnt下。执行“mount /dev/sda7 /mnt”
进入ubuntu系统查看你的内核文件位置.我的在直接在boot/initrd.img-3.2.0-24-generic和boot/vmlinuz-3.2.0……
修改redhat下的/boot/grub/grub.conf文件。(ubuntu的引导是/boot/grub/grub.cfg)。
观察该文件语法,在适当位置加入代码(红色部分):
××××××××××××××××××××××××如下为/boot/grub/grub.conf文件部分代码××××××××××××××××××××××××××××××
title Red Hat Enterprise Linux (2.6.32-358.el6.x86_64)
root (hd0,8)
kernel /vmlinuz-2.6.32-358.el6.x86_64 ro root=/dev/mapper/vg_lanzaocomputer-lv_root nomodeset rd_NO_LUKS rd_LVM_LV=vg_lanzaocomputer/lv_root rd_NO_MD rd_LVM_LV=vg_lanzaocomputer/lv_swap crashkernel=auto LANG=zh_CN.UTF-8
KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM rhgb quiet
initrd /initramfs-2.6.32-358.el6.x86_64.img
title Windows7
rootnoverify (hd0,0)
chainloader +1
title ubuntu
//在开机启动引导进系统时显示的名称,随便起一个你自己认得的名字
root (hd0,6)
//根据你的ubuntu所在分区来填,可以先从本文下个模块将的步骤里查看到是hd(0,?)
kernel /boot/vmlinuz-3.2.0-24-generic root=UUID=cdbf0740-3243-4bd0-bbe6-8fe512660adf ro quiet splash
initrd /boot/initrd.img-3.2.0-24-generic //内核位置,一般来说都是在/boot下。
之后保存退出。
5,重启计算机,可看到3个引导选项,可成功进入win7,ubuntu和redhat,成功在grub引导启动ubuntu!
附图1:
[align=center] BIOS与boot loader及内核加载流程示意图(from《鸟哥的LINUX私房菜基础片》)
[/align]
PS:
第一次操作很容易遇到各种各样的问题和报错,可以去网上找相应教程查看,不要轻易放弃和重装。
涉及硬盘分区的操作要谨慎,不要轻易格式化和删除分区,避免造成数据丢失。
如果启动无法进入linux系统,出现"grub>"的解决方法:
grub>find /grub/stage1 会显示 hd(0,x) x是你的系统的分区号
grub>root (hd0,x) x是你的系统的分区号,按Tab可以列出选项
grub>setup (hd0) 回车后会看见……successful,Done.
grub>root (hd0,x)
grub>kernel (hd0,8)/boot/vmlinuz-3.2.0-24 (按Tab查看提示或补齐) ro root=/dev/sdax(进系统后执行fdisk -l查看)
grub>initrd (hd0,8)/boot/initrd.img-…… (按Tab补齐)
grub>boot
正常来说是可以进入到系统的,如果不行再放入系统光盘,进入Live系统后再查看相关参数,重复以上步骤。
为什么需要initrd?
会需要initrd的原因,是因为内核模块放置于/lib/modules/$(uname -r)/kernel/当中,这些模块必须要根目录(/)被挂载时才能够被读取。但是如果内核本身不具备磁盘的驱动程序时,当然无法挂载根目录,也就没有办法取得驱动程序。
initrd可以将/lib/modules/...内的启动过程当中一定需要的模块打包成一个文件(文件名就是initrd),然后在启动时通过主机的INT13硬件功能将该文件读出来解压缩,并且initrd在内存中会仿真成为根目录,由于此虚拟文件系统主要包含磁盘与文件系统的模块,因此我们的内核最后能够认识实际的磁盘,那就能够进行实际根目录的挂载。
本文偏重对Linux系统的启动引导讲解,并采用ubuntu的boot loader引导启动。如果要快速解决三系统共存的引导问题,可参考另一博文:http://blog.csdn.net/xiaolanzao/article/details/19831473
安装LINUX系统时,分区时一般这样分:
/boot:第一个要分出100~200M的/boot分区,里面放着内核文件和boot loader.
/:然后有一个根目录的分区“/",大小根据你的需要和磁盘大小;
/tmp:如果是企业的系统时,一般会单独分出/tmp分区,几G+不等,个人计算机则不需要;
swap:最后有一个swap分区,一般是实际内存大小的1~2倍,如果你的内存很足够了,可以不需要。
如果没有选择”自定义分区”的话:
会默认将系统的引导写进MBR(MasterBoot Recorder),
如果只有windows 和linux两个系统的话,可以先装windows再装linux,也可以使其和平共处。
如果装三个系统,则第三个linux系统的boot loader会覆盖掉之前的linux系统的boot loader,因此无法实现两个linux的系统自动引导。
因此,就会产生无法自动引导存在两个linux系统的问题,也就是本文要讨论解决的问题。
注:我是先装win7,再装ubuntu,最后装redhat
如果想用ubuntu的boot loader来进行引导,则在装redhat时,选择“自定义分区”,最后选择“不将boot loader写入MBR”
然后再修改ubuntu的boot loader文件(即grub.cfg),加入redhat的引导选项。
本人装linux系统时并没有选择自定义分区,根据顺序,我是用了redhat的boot loader(文件位置/boot/grub/grub.conf),加入ubuntu的引导,所以此博文都是根据这个来写的。其实都是大同小异,理解其中原理就行。
为什么可以先装windows后装linux实现双系统正常引导,而两个linux却不行?
如果先装linuxs后装windows,windows的引导会直接覆盖掉MBR,导致无法引导linux,因此要先装linux
linux的引导记录是写在MBR,所以会直接去MBR里寻找,而windows的是写在PBR(partitionboot recorder),当有激活分区时,就去PBR寻找引导记录;
当检测到已经安装有windows系统时,linux的bootloader可以选择是否继续选择跳转到windows的boot loader去引导启动,因此可以实现正常引导
我的安装过程:
1,原本电脑里有win7和redhat 5.5。
2,进PE系统,用DiskGenius删除掉redhat的分区后,装了ubuntu 12.04。成功后启动可正常进入两个系统。
3,装redhat 6.4,选择安装分区时选了从现有linux分区中切割出一部分空间来装。
4,安装成功后,重启,果然只能选择进入redhat和win7,而没有ubuntu的选项。
由于丢失了ubuntu引导,所以需要我们手动添加。由于已经有了redhat的grub引导,我决定加入ubuntu的引导选项。以下步骤需要小心操作,避免误改文件而导致新的系统问题。
进入redhat系统,执行“fdisk -l”查看分区情况。看你的两个linux系统分别装在哪里,一般先装的会在前面。
把ubuntu系统挂载到/mnt下。执行“mount /dev/sda7 /mnt”
进入ubuntu系统查看你的内核文件位置.我的在直接在boot/initrd.img-3.2.0-24-generic和boot/vmlinuz-3.2.0……
修改redhat下的/boot/grub/grub.conf文件。(ubuntu的引导是/boot/grub/grub.cfg)。
观察该文件语法,在适当位置加入代码(红色部分):
××××××××××××××××××××××××如下为/boot/grub/grub.conf文件部分代码××××××××××××××××××××××××××××××
title Red Hat Enterprise Linux (2.6.32-358.el6.x86_64)
root (hd0,8)
kernel /vmlinuz-2.6.32-358.el6.x86_64 ro root=/dev/mapper/vg_lanzaocomputer-lv_root nomodeset rd_NO_LUKS rd_LVM_LV=vg_lanzaocomputer/lv_root rd_NO_MD rd_LVM_LV=vg_lanzaocomputer/lv_swap crashkernel=auto LANG=zh_CN.UTF-8
KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM rhgb quiet
initrd /initramfs-2.6.32-358.el6.x86_64.img
title Windows7
rootnoverify (hd0,0)
chainloader +1
title ubuntu
//在开机启动引导进系统时显示的名称,随便起一个你自己认得的名字
root (hd0,6)
//根据你的ubuntu所在分区来填,可以先从本文下个模块将的步骤里查看到是hd(0,?)
kernel /boot/vmlinuz-3.2.0-24-generic root=UUID=cdbf0740-3243-4bd0-bbe6-8fe512660adf ro quiet splash
initrd /boot/initrd.img-3.2.0-24-generic //内核位置,一般来说都是在/boot下。
之后保存退出。
5,重启计算机,可看到3个引导选项,可成功进入win7,ubuntu和redhat,成功在grub引导启动ubuntu!
附图1:
[align=center] BIOS与boot loader及内核加载流程示意图(from《鸟哥的LINUX私房菜基础片》)
[/align]
PS:
第一次操作很容易遇到各种各样的问题和报错,可以去网上找相应教程查看,不要轻易放弃和重装。
涉及硬盘分区的操作要谨慎,不要轻易格式化和删除分区,避免造成数据丢失。
如果启动无法进入linux系统,出现"grub>"的解决方法:
grub>find /grub/stage1 会显示 hd(0,x) x是你的系统的分区号
grub>root (hd0,x) x是你的系统的分区号,按Tab可以列出选项
grub>setup (hd0) 回车后会看见……successful,Done.
grub>root (hd0,x)
grub>kernel (hd0,8)/boot/vmlinuz-3.2.0-24 (按Tab查看提示或补齐) ro root=/dev/sdax(进系统后执行fdisk -l查看)
grub>initrd (hd0,8)/boot/initrd.img-…… (按Tab补齐)
grub>boot
正常来说是可以进入到系统的,如果不行再放入系统光盘,进入Live系统后再查看相关参数,重复以上步骤。
为什么需要initrd?
会需要initrd的原因,是因为内核模块放置于/lib/modules/$(uname -r)/kernel/当中,这些模块必须要根目录(/)被挂载时才能够被读取。但是如果内核本身不具备磁盘的驱动程序时,当然无法挂载根目录,也就没有办法取得驱动程序。
initrd可以将/lib/modules/...内的启动过程当中一定需要的模块打包成一个文件(文件名就是initrd),然后在启动时通过主机的INT13硬件功能将该文件读出来解压缩,并且initrd在内存中会仿真成为根目录,由于此虚拟文件系统主要包含磁盘与文件系统的模块,因此我们的内核最后能够认识实际的磁盘,那就能够进行实际根目录的挂载。
相关文章推荐
- Win7 下装 Ubuntu 双系统遇到的一些问题及解决
- VMware workstation安装Redhat EL 5.5系统和Oracle 11g R2遇到的一些问题
- 利用WIN8自带系统还原功能还原系统,遇到的一些问题及解决思路。
- win7 64位 ,安装配置cx_Oracle,遇到的一些问题及解决方法
- 利用WIN8自带系统还原功能还原系统,遇到的一些问题及解决思路。
- Android 调用系统相机拍照并且显示在相册中,以及中间可能会遇到的一些问题的解决
- win7安装ubuntu系统遇到的问题及解决办法
- Win7下 U盘 安装 Ubuntu12.04 系统引导问题的解决
- Linux系统之路——python多版本共存问题(ps:自行切换python版本,pip安装遇到的一些问题)
- 重装系统实战经验 助你解决一些较为困难的问题。
- 关于多文档MFC从xp系统上移植到win7上出现错误的问题解决经验
- [转]ubuntu系统中遇到的一些问题及解决
- Ubuntu12.04与win7主机方便传文件的实现方法(cuteftp的安装和遇到的问题的解决)
- 最近做的一个linux下的聊天系统,遇到的一些问题及解决办法
- 系统安装过程中遇到的一些问题及解决方法
- 【经验】无线路由器自动认证校园网 及遇到一些问题解决
- 九度奥运排序问题,本周博客系统开发遇到一些问题的解决
- WIN7 64位系统搭建WINCE6.0系统遇到的问题
- 解决Windows 程序界面闪烁问题的一些经验
- 适配iOS9遇到的一些问题_Scheme白名单_ Bitcode及解决办法