CentOS7出来的时间已经不算短了,前段时间一直在虚拟机上使用,最近闲下来了,就像在自己的笔记本上装一个win7和Centos7的双系统体验以下实体机的效果,几经波折之后终于顺利的装上了WIN7和CentOS7的双系统!在这里主要是想分享一下自己遇到的问题,以供网友门参考借鉴!
首先介绍一下我的电脑配置,我的笔记本型号是Y400,一共有三块硬盘,128ssd(1号) + 1T的hdd(2号) + 1T的hdd(3号);128的SSD被分为两个分区,第一个分区装win7,第二个放游戏和一些免安装的软件;我在第二块硬盘和第三块硬盘用作仓库盘,因为都没有用完,所以随时可以从两块hdd后边划一部分出来使用!
我刻录U盘镜像使用的是UltraISO(软碟通) ,刻录完成后的安装步骤网上已经介绍的很详细了,我这里就不多作介绍了,我在安装过程中选择的是第二块硬盘(也就是2号硬盘,提前已经在windows下画出了136G的未分配空间),选择“我要配空间”,点击“完成”后,选择“标准分区”,然后通过左下角的“+”号分区,分500mb的/boot分区,120GB的/分区,16GB的swap空间,此时然后点击完成,选择“接受更改”,然后一步一步安装配置就好,安装完成后点击重启;
由于我的电脑是多硬盘,所以在安装Centos7时安装引导只能装在Centos7所在的那块硬盘上(默认的,如果更改也只能选择不安装引导),此时重启后的电脑没有像网上网友所说的那样“只有Centos7的启动菜单,而没有了win7的引导菜单”,我的电脑直接向往常一样直接进入win7的界面,然后启动进入win7,因为我的ssd默认为第一启动盘,而我装Centos7装在了第二块硬盘上,所以对ssd上的东西都没有影响,因此我尝试用第二块硬盘启动(F12选择以第二块硬盘启动),结果是屏幕左上角只有一个点和一个光标,此方法失败(仅仅是我的电脑这样失败了,有网友这样成功过,你也可以试一试);
然后在网上查资料,问网友,于是乎就在win7下装了一个EasyBCD,
然后重启电脑,就可以看到NeoSmart Linux了(这个名称可以自己改,我改为了“menu list”)。
回车进入该启动项列表:
有启动项列表了,这下总算弄好了,但是回车后,发现屏幕黑屏,没什么反应,于是强制重启电脑,到CentOS Linux启动项列表这里时,不按回车,按字母“E”键,查看一下启动菜单哪有问题:
发现这个启动菜单有些问题,我的电脑是三硬盘,而我的CentOS7是装在第二块硬盘上的,上图中我用红色圈出来的那块区域中显然不对,
set root='hd0,msdos2' 指定root为第一块硬盘的第二个分区,这里的root对应的是/boot分区(如果没有单独指定/boot分区的,这个root应该指向"/"分区)。
题外话(基础知识补充)
hdx,msdosy
hd指定的是硬盘,以0开始,hd0代表第一块硬盘,以此类推
msdos指定一块硬盘上的分区,以1开始,msdos1代表第一个分区,以此类推(其实直接写1也是可以的)
hda 和sda的区别:
hd代表本机磁盘接口为IDE接口
sd代表本机磁盘接口为SCSI接口
他们都以a开始,以hda或sda代表第一块磁盘,a,b,c,d...以此类推
hda和sda后可以跟数字,代表第一块磁盘的不同分区;如sda1代表第一块磁盘的第一个分区;
以我的电脑硬盘为例加以说明:
我的电脑有三块硬盘(我电脑是scsi接口的,所以用sd描述,而没有用hd描述):
SSD整块磁盘 分区一(C) 分区二(F)
sda sda1 sda2
第一块HDD 分区一(D) 分区二(/boot) 分区三(/) 分区四(swap)
sdb sdb1 sdb2 sdb3 sdb5
第二块HDD 分区一(E)
sdc sdc1
新手们肯定会疑惑为什么第一块HDD的分区四编号为sdb5,而不是sdb4,那是因为在mbr分区模式(还有一种GPT分区没有此限制,但是我对这中分区不太了解)下一块硬盘最多有四个主分区,那么超过四个主分区怎么办?此时只能将第四块分区会变成扩展分区,在扩展分区中在进行分区,以后所分配的区域都将被成为逻辑分区,整个扩展分区代表的是sdb4,扩展分区内部进行分区时是从编号5开始的。
如果一个电脑有一块硬盘,硬盘有两个分区,一个主分区,一个扩展分区,扩展分区里只一个逻辑分区,那么主分区就是sda1,另一个逻辑分区就是sda5
我就说到这里,如果又不明白的或是不懂得,直接问我,或者百度,这些都是非常基础的东西。
这句配置语句显然与我的实际情况不符,我的Centos7是装在第二块硬盘的,所以应该是hd1,/boot是第二块硬盘的第二个分区,所以这句应改为
set root='hd1,msdos2',
if下边那一段和else下边那一段是在寻找/boot分区,并为其设定uuid(全球唯一标示),这个东西知不知道无所谓,你只要知道if和else之间那一段中出现hd的地方都必须是hd1,msdos2就行了(这里我查过我通过虚拟机安装的Centos7的grub.cfg,事实证明确实出现hd的地方都要和root设定的值一致)。
知道了这个我就进行了临时修改,然后通过ctrl+X执行启动菜单,结果依然无法进入系统,这就令我很郁闷,难道多硬盘引导Centos7就这么困难?
于是就在网上发帖求教,有个大神告诉我在启动项列表 处选中第一项按"C"(或者在启动项菜单页面按"ctrl + C")进入 grub> 界面,
然后执行(一行一行的执行,不要一次写完再执行)
linux (hd1,msdos2)/vmlinuz-3... root=/dev/sdb3 (如果/boot分区不为单独分区,则执行 linux (hd1,msdos2)/boot/vm... root=/dev/sdb2);
initrd (hd1,msdos)/initramfs-3....img (如果/boot分区不为单独分区,则执行 initrd (hd1,msdos2)/boot/initramfs-3...img);
boot
上边三行代码,前两行写到数字3时可以按下tab键补齐,root前有空格,其中(hd1,msdos)代表的是/boot分区,root代表的是/分区,所以/boot分区是单独分区和不是单独分区有一点小小差别,老鸟们不要吐槽,我写这么详细主要是为了帮助新手们的!
执行完上边的代码后果真进入了系统,进入新的Centos7配置完成后,再次手动启动了Centos7,有点郁闷,说不定以后启动系统都得用手动加载的方式了,于是我又看了下启动菜单的代码,最终发现菜单用的是linux16和initrd16,如下图
我之前能顺利启动用的命令是linux和initrd啊,于是乎抱着试一试的心态将/boot/grub2/grub.cfg里的linux16与initrd16后的16都去掉,将set之后else之前出现hd的地方都改为了'hd1,msdos2',然后重启系统,竟然真的通过Centos的启动菜单进入系统了 。
至此,多硬盘下,win7和Centos7双系统的引导终于算是完成了,但是现在终于能正常的使用双系统了!
但是躁动我的并没有就此罢手,我突然想起我之前在我的双硬盘电脑上装win7和ubuntu的双系统时好像也遇到类似的情况(忘记当初有没有使用easyBCD了,但是帮同学在单硬盘上安装win7和ubuntu的双系统时确实成功了),老是无法启动成功,也没有启动项,于是我在第三块硬盘上分出一块100G的为分配空间,在那块空间安装了ubuntu14.04,安装完成后还是由于多硬盘的的关系无法启动,自己引导居然也没有成功,通过在网上查阅相关资料,grub2有一个比较方便而强大的功能,grub2-mkconfig -o /boot/grub2/grub.cfg,这条命令可扫描所有的启动项,并将其显示在启动菜单上(在linux下使用时,它只能扫描到linux能识别的盘符,如果你的windows盘的ntfs的格式,则无法扫描到windows的启动项,如果你想让它扫描到windows的启动项,就必须通过ntfs软件挂在相应的windows系统盘,挂在之后就能扫描到了,关于挂在windows盘可参照我的“Centos6.5系统初学者基本系统配置1”),因为Centos7使用的是grub2作引导的,其内部使用的是grub2,所以我直接进入CentOS7,通过root用户执行grub2-mkconfig -o /boot/grub2/grub.cfg,然后重启电脑,发现果然有有ubuntu的启动项了
然后真的可以进入ubuntu了,看来grub2还是蛮强大的,有兴趣的可一多多研究,
这里面还有一个不懂得地方,就是如果装单系统或是在虚拟机里装Centos7,linux16和initrd16都没有问题,系统可以启动,但是为什么在多硬盘多系统下就无法启动!如果有懂这个东西的麻烦指教一下