最近要考试了,不知道为什么就是复习不下去,向朋友要了台服务器(其实是他服务器上的Hyper-v虚拟机,有外网IP的),先是看朋友装了下Cent OS 7系统,后来觉得不太懂,所以决定自己试一下。后来觉得windows系统也挺必要,还是装双系统吧。于是就有了这个想法,双盘双系统,现在还没完全设置好,不过已经能够从Cent OS 7里重启服务器到指定的系统里了(1.远程到Cent OS 7,重启后还是Cent OS 7;远程到Cent OS 7,修改启动项,重启后就进入了Windows Server了)。

这里特意在标题里加了“远程”两个字,是因为不想在重启过程中进行干预,远程操作主机重启时,就失去了对主机的控制,所以要在重启前做好各项设置。

 

先说一下大致需求:因为,现在服务器一般都是放在机房里,像我这种穷屌丝好不容易搞到了台服务器,恨不得一台拆成两台使用。那么问题来了,我怎么选择启动哪个系统?现在朋友把Hyper-v主机账号给我了,但是咱不能重启一次都要登陆一次朋友的主机吧,所以就想修改系统里设置来预选择重启后的系统。

 

因为是Hyper-v,所以硬盘个数不是问题,我是想把两个系统分开就弄成了两块盘,这个在安装系统时也的确省了不少事。

 

1.先挂Windows Server的盘,装系统(注册,打开远程桌面)。

 

2.关机,挂Cent OS 7的盘到第一位置(位置0),Windows Server的盘挂到第二位置(位置1),装系统,因为没玩过Linux,所以这里走了不少弯路。建议选择有网络的模式,否则需要手动配置。

 

3.Cent OS 7下,更新下系统,现在习惯性的装过系统先更新,

1 //--更新
2 yum update

安装个GCC吧,对我们来说Linux下几乎是必装GCC的,

1 //--安装gcc
2 yum install gcc

 

4.Cent OS 7不识别NTFS分区,但是要引导Windows Server,必须能够识别NTFS分区,所以装个NTFS-3G吧。先找(创建)一个工作空间吧,存放各种临时文件,方便用过后清除,下载NTFS-3G(先去官方网站搞到最新下载链接,替换下面的链接,如果没有安装wget的话,先安装wget)

1 //--下载ntfs-3g
2 wget tuxera.com/opensource/ntfs-3g_ntfsprogs-2014.2.15.tgz

解压压缩包,编译,安装,

1 tar -zxvf ntfs-3g_ntfsprogs-2014.2.15.tgz        //--解压
2 cd ntfs-3g_ntfsprogs-2014.2.15
3 ./configure        //--编译并安装项目
4 make
5 make install

 

5.查看Windows Server(NTFS)分区信息,并记下位置,根据个人需要可选择全部挂载NTFS分区和部分挂载,但Windows Server引导盘一定要挂载,建议不要挂载Windows Server自动分离出的那个系统保留分区

1 //显示NTFS分区信息
2 fdisk -l|grep NTFS

这时会显示你的NTFS分区信息,记下Windows引导分区的位置即可,如:/dev/sdb1

查看设备UUID,开机自动挂载设备时需要UUID指定设备,记下/dev/sdb1的UUID

1 //查看设备UUID
2 ls -l /dev/disk/by-uuid

临时装载NTFS分区,先创建装载点,一个即可,就是一个文件夹,这里我创建在/home/Windows下

1 mkdir /home/Windows            //就是一个文件夹,这里我创建在/home/Windows下
2 mount -t ntfs-3g /dev/sdb1        //挂载NTFS分区

此时Cent OS 7已经能够看到Windows Server的引导了,但是每当开机就又看不到Windows Server的盘和引导了

 

设置开机自动挂载NTFS分区,

1 //磁盘的挂载在文件fstab里
2 vim /etc/fstab

编辑此文件,在最后按已有记录添加挂载信息

1 /dev/sdb1        /home/Windows    defaults        0 0

此时Cent OS 7已经能够开机自动挂载NTFS分区了,此时若有Windows Server的引导纪录就能够开机选择Windows Server的系统了

 

6.更新引导纪录

生成引导配置文件

1 //更新引导,因为是引导文件,建议提前进行备份,(包括/etc/grub.d/30_os-prober,windows Server的引导纪录会写在这里,这个都说无关紧要,但是我有点强迫症,希望以后能够恢复到最初最干净的状态)
2 grub-mkconfig -o /boot/grub2/grub.cfg

现在已经能够重启验证启动项了。正常情况下,已经有三个启动项了,且最后一个是Windows Server的。

 

7.假设重启过程中不做干预的话,Cent OS 7重启后还是Cent OS 7,做了下面的修改可以实现设定重启后的系统。但是目前我无法从Windows Server的系统重启到Cent OS 7。

 

8.下面说一下从Cent OS 7自动重启到Windows Server。

1 //备份/boot/grub2/grub.cfg为/boot/grub2/grubCent.cfg和/boot/grub2/grubWindows.cfg,
2 cp /boot/grub2/grub.cfg /boot/grub2/grubCent.cfg        //默认Cent OS 7的引导项在第一,默认启动Cent OS
3 cp /boot/grub2/grub.cfg /boot/grub2/grubWindows.cfg       //通过后面的修改,把Windows Server的引导项放在第一,默认启动Windows

修改/boot/grub2/grubWindows.cfg,

1 //编辑grubWindows.cfg
2 vim /boot/grub2/grubWindows.cfg

把其中

1 ### BEGIN /etc/grub.d/30_os-prober ###
2 ......
3 ### END /etc/grub.d/30_os-prober ###

这一段剪切到

1 ### BEGIN /etc/grub.d/10_linux ###
2 ......
3 ### END /etc/grub.d/10_linux ###

前面,并改‘30_os-prober’为‘06_os-prober’,前面的数字应该是小于10大于00的,建议06,

接着把/etc/grub.d/30_os-prober文件改名为/etc/grub.d/06_os-prober,和上面对应。

 

用grubWindows.cfg,复制为grub.cfg覆盖掉之前的grub.cfg,现在重启服务器的话,默认就会重启到Windows Server中了。

 

9.在Linux下编写一个小程序,实现:

  a.复制grubWindows.cfg为grub.cfg覆盖掉之前的grub.cfg;

  b.把/etc/grub.d/30_os-prober文件改名为/etc/grub.d/06_os-prober。

  c.重启系统

完成上面操作的过程就可以通过这个小程序重启到Windows Server了。

更方便一点的话可以把程序路径加入到path中(.bashrc和.cshrc以及.tcshrc等,一般为.bashrc),就可以随时一个命令重启到Windows Server了。

1 //toWindows是自定义命令,rebootToWindowsServer是完成上面操作的小程序
2 alias toWindows="/home/myshell/rebootToWindowsServer"

 

10.简单说一下,从Windows Server重启到Cent OS 7,我所想到的方法,并尝试了前三种。

(1)启动Windows Server走的还是Cent OS 7的引导,然后跳到Windows Server的引导,然后装载运行启动程序,这样就不能通过在Windows Server的引导里把Cent OS 7放在第一位置启动Cent OS 7了,因为这样如果启动过程不加干预的话,理论上引导间就会一直跳,测试好几次都是跳几次就down了。通过引导操作比较方便,因为引导扇区是和文件系统无关的。但是明显这次不能够通过引导完成。

此路不通,另想它法。

(2)如果能够像Linux挂载NTFS分区一样在在Windows Server下挂载Linux引导分区(软件Ext2/3/4),然后实现第8步相似的功能把Cent OS启动相关的文件替换回来也能够满足需求。于是去找软件教程,不得不说的两个软件ext2fsd和ext2explore。ext2fsd全名Ext2文件系统驱动,可以使用户在Windows下访问Linux文件系统中的文件。如果顺利的话,那么应该就成功了,但是不知到什么原因,重装N次了这个软件加重装1次系统后还是不能够访问Cent OS 7的文件,不知道是不是个例。如果成功的话同样可以写一个小程序,添加一个环境变量或者快捷方式,然后也可以一个命令或点击就可以实现重启到Cent OS 7。

理论上应该可以满足需求。

(3)如果能够在Windows Server下挂载Linux引导分区,也可以使用引导修改工具(如EasyBCD)添加引导项,然后编辑引导记录,指向Cent OS 7的load程序,这样就可以启动到Cent OS 7了。但是这样就有点乱了,从Windows Server重启到Cent OS 7后就再也回不到Windows Server了,因为即使在Cent OS 7里指向了Windows Server的引导,但是Windows Server的引导指向的却是Cent OS 7的load程序。而且我不会用汇编定位文件,也不知道Cent OS的Load文件是什么。

此路不通。

(4)手写引导。原先看了本关于操作系统的书的前小半本(懒),讲到引导扇区,于是想,如果能够找到Cent OS 7和Windows Server的laod程序,通过手写引导扇区就可以很轻松的满足需求。毕竟引导扇区和文件系统无关,这样就能够写两个小程序(两个系统下),对Cent OS 7的引导盘(位置0)进行修改(可事先写好两个二进制文件),这样的话步骤3~步骤9的都不用做了。但是首先要定位到两个文件的物理地址,然后通过汇编编写引导程序并编译,写两个可以读写引导扇区的程序,(建议先备份引导扇区)修改引导扇区,测试(必要时恢复引导扇区),直到完美解决问题。

这应该是最佳解决方案。但是我不会用汇编定位文件,也不知道Cent OS的Load文件是什么。

 

 

 

但是由于时间问题和能力问题,暂时搁置吧,要考试了,复习去了。