Windows 7 硬盘安装 CentOS 7.0
作者 :Chongqing
QQ :28080347
邮箱 :ycq.no1@163.com
文档版本 :V1.2
发布日期 :2014-12-15
前言
此文档本着开源精神,基于 LGPL 协议发布。如有修订及重新发布,请标明原始作者、邮箱、原始版本及修订
日期。
虽然网上讲解 Windows 和 Linux 双系统安装的信息很多,但是只讲步骤不讲原理的安装很容易让人盲从,容易
出错。故在此发布 Windows 7 硬盘安装 CentOS 7 的文档,在安装的步骤中,适当对一些安装过程中的原理做一讲解,
以便读者在安装过程中知其所以然。
对于 Linux 操作系统的选择,仁者见仁智者见智。如果是个人娱乐生活等,可能用 Ubuntu 系列比较多;如果是
做服务器、工作站、开发等,个人比较推崇 Red Hat 系列的,其中,CentOS 是 RHEL 的重编译社区版,安全、稳定、
高效,并且可以通过 yum 服务在线升级,我想是个不二的选择。
基于 RHEL7 发布的 CentOS7,优点很多,相信想体验 RHEL7 的读者,都可以在 CentOS 上获得一样的完美体验。
安装 Windows 和 Linux 双系统的方式很多,可以光盘、U 盘、硬盘等。可以从 CentOS 的官网下载 ISO 文件,然
后刻录进光盘,然后进行像光盘安装 Windows 一样的安装;或者把 ISO 文件刻录进 U 盘,做一个启动 U 盘,然后
进 BIOS 设置系统从 U 盘启动,从而进行像光盘一样的系统安装;如果没有光盘也没有 U 盘,当然可以直接进行硬
盘安装 CentOS,这也是这篇文档的目的。
文档中有些软件细节的操作,在这里不做细化,网上的教程很多,作者在这里不做引申。有不懂的读者,可以
电子邮件联系我。文档若有不妥之处,还请读者指正。
安装环境
系统: Windows 7 旗舰版,64_bit。
需要工具:
1、 CentOS 安装包:CentOS-7.0-1406-x86_64-DVD.iso,这是 32 位、64 位通用安装包,可以从 CentOS 官网
下载;
2、 WinGrub,这个工具在这里主要用于查看 Windows 下的分区表;
3、 EasyBCD,这个工具在这里主要用于在 Windows 下添加 Linux 的 Grub 安装引导程序;
4、 DiskGenius,这个工具在这里主要用于格式化 Windows 下的分区为 Fat32 文件系统,删除分区;
5、 一个 U 盘,用于存放 ISO 文件。
注:这里不一定要准备 U 盘。因为 CentOS 用的是 XFS 文件系统,而这个文件系统不能识别 NTFS 文件系统。
当读者把 ISO 文件放在 NTFS 分区上,用 GRUB 引导 vmlinuz 和 initrd.img 到 ISO 时,会出现不能识别 NTFS 文件
系统的错误。而 Linux 支持 U 盘的 Fat32 文件系统,作者的硬盘都是 NTFS 格式,所以把 ISO 文件放在 U 盘中。
如果读者的硬盘上有 Fat32 分区,就可以把 ISO 文件放在这个分区上,而无需准备 U 盘。
因为 GRUB 可以识别 NTFS 分区,所以 GRUB 可以引导放在 NTFS 分区上的 vmlinuz 和 initrd.img,所以读者
可以把 vmlinuz 和 initrd.img 放在 NTFS 或 Fat32 的任一分区中,但是当系统引导到 initrd.img 在内存中虚拟磁盘
并建立 XFS 文件系统后,XFS 文件系统就不能识别放在 NTFS 分区上的 ISO 文件了。有读者在依据作者上一版本
的文档进行 CentOS 安装时,出现 NTFS 不能识别的错误,觉得是作者的文档写得有错误。在这里作者提醒读者:
CentOS 的 ISO 文件必须放在 Fat32 分区上!
准备步骤
1、 把 CentOS-7.0-1406-x86_64-DVD.iso 中 isolinux 目录下的 vmlinuz、initrd.img 放到某一分区的根目录上,在这
里作者放在 C 盘根目录;把 CentOS-7.0-1406-x86_64-DVD.iso 放到 Fat32 分区上,这里作者放在 U 盘中;
2、 根据自己需要,用 DiskGenius 工具,可以调整分区大小,格式化分区,删除分区。这里作者给 Linux 分区
留了 97.6G 的空间。具体步骤是:
腾出一个分区,作为 Linux 分区使用,读者可以根据自己需要,用 DiskGenius 调整分区大小。这里作
者把 E 盘的 97.6G 空间给 Linux 使用;
格式化 E 盘分区为 Fat32 文件系统。如果读者的 E 盘是 NTFS 格式,就需要格式化为 Fat32,如果本是
Fat32 格式,格式化清空分区;
删除 E 盘分区。
注:在这里,当安装 CentOS 时,安装程序会自动识别出未使用的 E 盘分区,并默认把 CentOS 安装在这个
未使用的 E 盘分区上。因 CentOS 不能识别 NTFS 磁盘分区,而作者没有试验删除的 NTFS 分区是否能装 CentOS,
按照作者的理解,删除后的分区为一个没有文件系统格式的空白分区,没有第二步也能安装 CentOS。但是这里
作者还是建议读者执行第二步,有兴趣的读者自己可以尝试一下。
3、 用 WinGrub 工具查看 Windows 的分区表。具体步骤:点击 WinGrub 的菜单 ToolsPartition List,如下图:
在上图中,可以看到作者安装 CentOS 后的分区表。在这里,我们可以看到作者放 vmlinuz、initrd.img
的 C 盘 分 区 表 为(hd0,0) , 如 果 读 者 把 这两 个 文 件 放 在 F 盘 , 那 么 F 盘 的 分 区 表 为(hd0,5) 。 放
CentOS-7.0-1406-x86_64-DVD.iso 的 U 盘分区表为(hd1,0)。
记下放置这三个文件的分区表,以备下面的步骤使用。
4、 使用 EasyBCD,添加 Linux 的安装引导 Grub 程序,具体步骤:点击添加新条目NeoGrub安装配置,在
menu.lst 记事本中,添加如下图最下面三行的引导项:
title CentOS7
kernel (hd0,0)/vmlinuz linux repo=hd:/dev/sda1:/
initrd (hd0,0)/initrd.img
在这里,有很多读者看了不介绍原理只讲解步骤的文档,会出现安装错误,如出现下面的错误:
“Dracut-initqueue[629]: mount: no medium found on /dev/sr0
Warning: couldn’t mount /dev/sr0
Warning: no suitable images”
表示找不到安装源,应该是源路径设置不对。引导方式有多种,在这里作者只讲解验证可用的引导方式。
读者想继续了解相关知识,可以查阅 Grub 方面的相关知识。
其中,“title CentOS7”是引导项的标题,这个标题,读者可以根据自己需要改写,作者没有尝试中文
的引导项标题,不知道是否可行,有兴趣的读者自己可以尝试一下。在读者重启电脑后,会出现 EasyBCD
设置的和 Windows 并列的 NeoGrub 引导选项,如下图:
选择 NeoGrub 引导加载器,就会出现“CentOS7”这个引导项标题。进去,就可以开始 CentOS 的安装。
“kernel (hd0,0)/vmlinuz”中 kernel 命令是 Grub 命令,用来指定加载的内核,(hd0,0)是 Grub 中分区表
示方式,表示 BIOS 中第一个硬盘的第一个分区,即为上一步骤中的 C 盘分区。“kernel (hd0,0)/vmlinuz”指
定内核为 BIOS 中第一个硬盘第一个分区根目录下的 vmlinuz。
vmlinuz,是可引导的、压缩的内核。“vm”代表“Virtual Memory”。Linux 支持虚拟内存,不像老的操
作系统比如 DOS 有 640KB 内存的限制。Linux 能够使用硬盘空间作为虚拟内存,因此得名“vm”。vmlinuz
是可执行的 Linux 内核,它位于/boot/vmlinuz,它一般是一个软链接。在 Grub 引导时,需要用 kernel 命令
指出内核文件,即这里的 vmlinuz。
“linux repo=hd:/dev/sda1:/”是 linux 命令,repo 用来指定安装源,即 iso 文件,hd 表示硬盘,/dev/sda1:/
表示安装源路径,这个路径,是从 linux 角度看的,sda1 表示第一块 SATA 硬盘的第一个主分区(注意 Grub
中硬盘的排序方式和 Linux 下硬盘排序方式的不同,sda1 中的 1 为在 hd0 中的 0 基础上加 1)。SATA 硬盘用
sda 表示,IDE 硬盘用 hda 表示,其中 a 表示第一块硬盘,如果第二块硬盘则表示为 sdb 或 hdb。一块硬盘
最多只能有四个主分区,其中一个可以为扩展分区(主分区的特殊形式)。不管有几个主分区,逻辑分区都
是从/dev/sda5 开始的。如果读者的 C 盘为主分区,其余 D、E、F 盘等为扩展分区下的逻辑分区,则 D、E、
F 盘为/dev/sda5、/dev/sda6、/dev/sda7。
注:依据步骤 3 中的 U 盘分区表(hd1,0),语句“linux repo=hd:/dev/sda1:/”中的 sda1 理应为 sdb1,
但事实不是这样的。作者在安装引导到 XFS 文件系统时,XFS 会把 U 盘识别成 sda1,而不是硬盘的 C 分区。
而硬盘已经被识别成 sdb。这里的分区名,因为读者和作者的安装环境的不同,U 盘可能被识别成 sdb1,
而硬盘被识别为 sda,这里读者需要特别注意。在安装引导 vmlinuz 和 initrd.img 的过程中,屏幕会显示有
硬盘和 U 盘的分区识别信息,记下 U 盘的分区名,如果读者的 sda1 是 NTFS 分区并出现下图的 NTFS 不能
识别的错误,重启电脑进入 Windows,重新设置 EasyBCD,把语句“linux repo=hd:/dev/sda1:/”中的 sda 改
为 U 盘的分区名。这样一切顺利的话,就可以看到 CentOS 的安装界面了。
而这里的分区名选择不影响 Grub 分区表如 C 盘分区(hd0,0)的设定。
“initrd (hd0,0)/initrd.img”,指定 BIOS 中第一个硬盘第一个分区根目录下的 initrd.img。
initrd 是“initial ramdisk”的简写。
initrd 是 linux 在系统引导过程中使用的一个临时的根文件系统,直白一点,initrd 就是一个带有根文件
系统的虚拟 RAM 盘,里面包含了根目录‘/’,以及其他的目录,比如:bin,dev,proc,sbin,sys 等 linux
启动时必须的目录,以及在 bin 目录下加入了一下必须的可执行命令。initrd.img 主要是用于加载 ext3 等文
件系统及scsi 设备的驱动等模块,一般用来临时的引导硬件到实际内核vmlinuz 能够接管并继续引导的状态。
为什么要 initrd.img?
系统内核 vmlinuz 被加载到内存后开始提供底层支持,在内核的支持下各种模块,服务等被加载运行。
这样当然是大家最容易接受的方式,曾经的 linux 就是这样的运行的。假设你的硬盘是 scsi 接口而你的内
核 vmlinuz 中并没有这个 scsi 硬件的驱动,你的内核就没有办法访问硬盘,那么在装入 scsi 模块之前,内核
当然也没法加载硬盘上的根文件系统,但 scsi 模块存储在根文件系统的/lib/modules 下。
怎么办?把内核加入 scsi 驱动源码然后重新编译出一个新的内核文件替换原来 vmlinuz。需要改变标准
内核默认提供支持的例子还有很多,如果每次都需要编译内核就太麻烦了。为了解决这个问题,可以引导
一个能够读实际内核的 initrd 内核并用 initrd 修正 scsi 引导问题。所以后来的 linux 就提供了一个灵活的方
法来解决这些问题——initrd.img。initrd.img 文件就是个 ram disk 的映像文件。ramdisk 是用一部分内存模拟
成磁盘,让操作系统访问。ram disk 是标准内核文件认识的设备(/dev/ram0)文件系统也是标准内核认识的
文件系统。内核加载这个 ram disk 作为根文件系统并开始执行其中的"某个文件"(2.6 内核是 init 文件)来
加载各种模块,服务等。经过一些配置和运行后,就可以去物理磁盘加载真正的 root 分区了,然后又是一
些配置等,最后启动成功。也就是你只需要定制适合自己的 initrd.img 文件就可以了。这要比重编内核简
单多了,省时省事低风险。
linux 内核使用这个 initrd 来挂载真正的根文件系统,然后将此 initrd 从内存中卸掉,这种情况下 initrd
其实就是一个过渡使用的东西。 在现在的许多简单嵌入式 linux 中一般是不卸载这个 initrd 的,而是直接
将其作为根文件系统使用,在这之前就需要把所需要的程序,命令还有其它文件都安装到这个文件系统中。
其实现在的大多数嵌入式系统也是有自己的磁盘的,所以,initrd 在现在大多数的嵌入式系统中也和一般的
linux 中的作用一样只是起过渡使用。
Initrd 的引导过程:
grub 将内核解压缩并拷贝到内存中,然后内核接管了 CPU 开始执行,然后内核调用 init()函数,注
意,此 init 函数并不是后来的 init 进程!!!然后内核调用函数 initrd_load()来在内存中加载 initrd
根文件系统。Initrd_load()函数又调用了一些其他的函数来为 RAM 磁盘分配空间,并计算 CRC 等
操作。然后对 RAM 磁盘进行解压,并将其加载到内存中。现在,内存中就有了 initrd 的映象;
然后内核会调用 mount_root()函数来创建真正的根分区文件系统,然后调用 sys_mount()函数来加
载真正的根文件系统,然后 chdir 到这个真正的根文件系统中;
最后,init 函数调用 run_init_process 函数,利用 execve 来启动 init 进程,从而进入 init 的运行过
程。
经过上面的讲解,相信读者已然比较明了 menu.lst 的配置原理和 CentOS 安装的 Grub 引导顺序:
Grub 加载内核 vmlinuz;
内核 vmlinuz 加载 initrd.img;
initrd.img 把控制权交给到 vmlinuz,vmlinuz 接管并继续引导;
内核 vmlinuz 加载安装源,执行安装程序。
安装
CentOS 的安装,其实相对简单些了,网上的文档很多。这里的安装过程,作者抓取了网上一位作者的安装过程,
因忘了出处,在这里未标出来源,望原作者见谅,如有看到,请告知。
要注意的是,在软件选择时,根据自己需要选择需要安装的软件包,如下图:
在选择安装位置时,读者可以根据安装自动配置,也可以手动配置。这里作者推荐手动配置分区方案,即使是
自动配置分区,最好也进去看一下分区情况,以便作出调整,如下图: