本书讲解Linux所使用的系统为CentOS 6.x,并没有采用最新的CentOS 7.x。很多人使用软件都喜欢用最新的,但是作为服务器,追求的不是新,而是稳定,所以现在绝大多数服务器并没用使用最新的CentOS 7.x,也就是说你在工作中很难碰到CentOS 7.x。作为实用主义者,我们选用CentOS 6.x来进行本书的讲解。
CentOS 6.x的下载地址没什么好讲的,可以去ChinaUnix等社区的下载频道,可以很容易地找到所需版本。
需要说明的是,CentOS 6.x基本上是安装在i386、x86_64的CPU硬件平台上的,我们使用的个人计算机多从i386发展而来,现在到了i686,是向下兼容的;而x86_64则是用于x86 CPU架构的64位硬件平台。也就是说,如果是32位的CPU,则安装i386版本;如果是64位的CPU,则安装x86_64版本。所以需要下载正确的安装版本,才可顺利安装。CPU的信息可在开机时进入BIOS查看。不过一般32位或64位的硬件平台都可以运行32位的操作系统,作为学习来说,倒是没有大碍,像上面提及的出错情况较少发生。若使用VMware安装,则下载i386的版本即可。
CentOS 6.x版本较多,简要说明如下:
CentOS-6.3-i386-LiveCD.iso
CentOS-6.3-i386-LiveDVD.iso
Live CD版和Live DVD版的CentOS 6.x提供了不用安装直接在光盘中体验CentOS的方式。只要插入光盘,并设置BIOS为光盘启动,就可以体验CentOS了。
CentOS-6.3-i386-minimal.iso
minimal版的CentOS是精简版,自带软件最少。在服务器上可以使用这个版本。该版本安装的软件最少,系统占用资源较少,同时被攻击的可能大大降低,但不建议新手使用。
CentOS-6.3-i386-netinstall.iso
netinstall版的CentOS是网络安装版本,需要连接网络,部分程序需要从CentOS官网上下载。
CentOS-6.3-i386-bin-DVD1.iso
CentOS-6.3-i386-bin-DVD2.iso
标准CentOS版本,因为软件过多,所以一张DVD光盘容纳不下。如果只是想安装系统,则下载DVD1即可,DVD2中主要是一些软件,安装时并不需要。
我们下载并使用标准版的CentOS。
万事俱备,可以开始我们的CentOS 6.x安装之旅了。光驱放入安装光盘,或者在虚拟机光驱设置中直接指定下载的ISO镜像。推荐使用后者,比较环保。然后单击“开启此虚拟机”按钮启动虚拟机,在启动界面按F2键,进入虚拟机的BIOS设置(注意:要把鼠标点入虚拟机后,再按F2键)。
现在的计算机由于性能强大,虚拟机模拟的启动界面速度非常快,按F2键的时间变得非常短暂,用户很难来得及按F2键。所以虚拟机提供了启动直接进入BIOS设置的按钮,单击绿色启动三角旁的小箭头,可以看到启动选项,选择“启动时进入BIOS”,如图2-16所示。
图2-16 启动时进入BIOS
进入虚拟机BIOS后,会看到如图2-17所示的界面。
在此界面中,按箭头移动光标,按+号或-号改变键值,按Esc键退出,按回车键确定,按F10键保存退出。
移动光标到Boot(启动)项,修改启动顺序。把光标移动到CD-ROM Drive(光驱)上,按+号把CD-ROM Drive变为第一项,让光盘成为第一启动顺序,如图2-18所示。
图2-17 虚拟机BIOS界面
图2-18 修改启动顺序
务必记得在Linux系统安装完成后,要改回Hard Drive(硬盘驱动)为第一启动顺序!否则每次启动虚拟机,都将进入Linux安装界面。
按F10键保存退出后,就能看到Linux的安装欢迎界面了,如图2-19所示。以下Linux安装过程和在真实机中安装没有任何差别。
图2-19 安装欢迎界面
在安装欢迎界面上有5个选项。
●Install or upgrade an existing system:安装或升级现有系统。
●Install system with basic video driver:安装过程采用基本的显卡驱动。
●Rescue installed system:进入系统修复模式。
●Boot from local drive:退出安装从硬盘启动。
●Memory test:存储介质检测。
选择“Install or upgrade an existing system”,安装一个全新的系统。开始安装后,向导首先会询问是否检查安装介质的完整性,如图2-20所示。这是为了避免因为安装来源不正确,造成无法顺利安装而产生损失。一般情况下,如果不是网络下载过程中出现什么问题,则不需要检测(检测时间较久),直接选择“Skip”跳过。
图2-20 检测安装介质
注意 :在虚拟机系统和宿主机系统之间,鼠标是不能同时起作用的。如果从宿主机进入虚拟机,则需要把鼠标点入虚拟机;当从虚拟机返回宿主机时,按下Ctrl+Alt组合键退出。
进入CentOS 6.x欢迎界面,单击“Next”按钮,进入选择安装系统的默认语言界面,可以根据需要自行选择,比如选择“中文(简体)”,如图2-21所示。
图2-21 语言设置
单击“Next”按钮,进入键盘布局界面,选择默认的“美国英语式”键盘,如图2-22所示。
图2-22 键盘布局
单击“下一步”按钮,进入存储设备选择界面,选择“基本存储设备”,会弹出存储设备警告,警告安装操作会导致存储设备中的数据丢失,单击“是,忽略所有数据”按钮,如图2-23所示。
图2-23 存储设备警告
进入主机名配置界面,默认主机名是“localhost.localdomain”,如图2-24所示,可以自行更改。在此界面中还可以配置网络,也可以在安装完成后通过setup或ifconfig等命令再进行网络配置,这里略过。
图2-24 主机名配置界面
单击“下一步”按钮,进入时区选择界面。如果住在中国,则选择“亚洲/上海”就可以了。当然,住在其他地方的对应选择相应地名即可。“系统时钟使用UTC时间”复选框建议不勾选,如图2-25所示。
图2-25 选择时区
单击“下一步”按钮,设置管理员密码(根密码指的是管理员密码,在Linux系统中管理员名为“root”,翻译为根用户)。学习用的系统,密码设置得简单一些是可以接受的,比如“123456”,但可能出现如图2-26所示的脆弱密码提示,单击“无论如何都使用”按钮依然可以让脆弱密码生效。
如果是用于工作中的服务器,则密码设置务必要严格对待,密码不能与个人信息相关,不能包含出生日期、身份证号码、电话号码等,要遵守“复杂性”“易记忆性”“时效性”的原则。
“复杂性”是指密码要包含大小写字母、数字、特殊符号中的最少三种;“易记忆性”是指密码要容易记忆;“时效性”是指密码不能长时间使用,定期更换,一般每三个月更换一次。
“复杂性”和“时效性”其实都很容易实现,但是什么样的密码是“易记忆”的呢?我们可以拿一个英文单词、一个你喜欢的外国影星名字、一句唐诗或名言、一首你喜欢的歌曲的歌词等进行变形后生成。比如密码“Am@ri31n”是由“American”衍生而来的,e替换为@,密码出现 abcd 统一替换为1234;如果是程序员,则可以用变态骨灰级密码“wr!know(xdl)shit!say(hero)”,由“为人不识兄弟连,便称英雄也枉然”衍生而来。关于密码设置的详细说明,请参见第7章。
图2-26 设置管理员密码
单击“下一步”按钮,接下来到了安装Linux系统中最重要的部分。所有操作系统的安装步骤大同小异,最大的区别就在于硬盘分区,每个操作系统在数据组织管理的方式上有较大差异。如图2-27所示,Linux安装程序提供了5种分区方式。
图2-27 选择分区类型
●使用所有空间:占用整个硬盘安装Linux系统,会导致原有硬盘数据全部丢失。
●替换现有Linux系统:只删除原有的Linux分区,而不会影响其他的系统分区。
●缩小现有系统:缩小现有的系统,产生剩余空间,用来安装Linux分区。
●使用剩余空间:使用剩余空间安装Linux系统。如果想让Windows和Linux双系统并存,那么要把一个Windows分区删除,变为“未分配空间”。
●创建自定义布局:手工指定Linux分区结构。
在此,我们推荐使用“创建自定义布局”。在真正架设Linux服务器时,都需要做自定义的分区规划。在学习时,为了增加对分区方式的了解,也建议使用自定义分区。其他4种分区方式不推荐使用,因为都是自动建立分区结构的,也就是说,划分了哪些分区和分区大小是多少,我们无法控制,在实际应用中不太现实。
这是本章的重点和难点。硬盘分区是使用分区编辑器在硬盘上划分几个逻辑部分,并写入相应的文件系统。硬盘一旦被划分成数个分区,不同类的目录与文件就可以存储进不同的分区。在Linux中,给一块硬盘分区,主要需要4个步骤:分区、格式化、指定设备文件名和挂载。我们一步一步来学习这4个步骤。
1)分区的概念
我们举个例子来解释一下分区的概念。硬盘为什么一定要分区呢?我们想象一下,超哥在办公室里做了一个和墙一样大的柜子,可是超哥很粗心,做柜子的时候没有把大柜子分成合适大小的小柜子,而且柜子中间也没有打隔断。那么我们把所有的办公用品全部放入这个不合理的柜子中,有一天我们要从柜子中找一份教学计划,我们还能找到这份文件吗?答案是当然能够找到,但是本来很轻易地拿出文件的一个动作,可能会变成整个柜子中文件的大清理,用了几天时间才能找到所需的文件。如图2-28所示,如果柜子做成这样,查找文件的效率就会极差。
图2-28 柜子示意图
硬盘也是如此,如果所有数据没有差别地全部胡乱塞入硬盘,那么数据的读取效率会非常低。所以需要先把硬盘分区(也就是把大柜子按照使用的要求分成多个小柜子),这样不同的数据保存到不同的分区中,管理起来效率就会更高,如图2-29所示。
图2-29 硬盘分区
2)硬盘分区的类型
可是硬盘当中分区到底可以分多少个呢?最开始的时候,硬盘分区只有一种类型,就是主分区,但是由于MBR(主引导记录)中只保留了64 Byte存储空间,而每个分区要用16 Byte,所以一块硬盘只能分成4个主分区。当硬盘很小的时候,4个主分区足够使用;但是随着硬盘容量的不断增加,4个分区已经不能满足我们的工作需要。这时为了分配更多的分区,就出现了扩展分区和逻辑分区。
●主分区。由于MBR的限制,最多只能分配4个主分区。
●扩展分区。扩展分区在一块硬盘上只能有1个,而且扩展分区和主分区是平级的,也就是说,主分区加扩展分区最多只能有4个。扩展分区不能直接写入数据,也不能格式化,需要在扩展分区中再划分出逻辑分区才能使用。
●逻辑分区。逻辑分区是在扩展分区中再划分出来的。在Linux系统中,IDE硬盘最多有59个逻辑分区(加4个主分区最多能识别63个分区),SCSI硬盘最多有11个逻辑分区(加4个主分区最多能识别15个分区)。
这三种分区可以用图2-30表示。在图2-30中,分区1、2、3是主分区,分区4是扩展分区,而分区5和6是逻辑分区。扩展分区不能写入数据,也不能格式化,唯一的作用就是包含逻辑分区。大家可以理解为柜子4是一个大柜子,这个柜子不能放文件,只能在里面套小柜子(逻辑分区)。
图2-30 分区类型
分区有了,就可以向里面存储数据了吗?当然不是。我们还用柜子来说明,大柜子分成了小柜子就能放文件了吗?还是不行,柜子当然要打入隔断,才能放入数据,如图2-31所示。
图2-31 格式化示意图
对柜子来讲,格式化就是打入隔断;对硬盘来讲,格式化的目的是写入文件系统。很多人认为格式化是为了清空数据,这个概念是错误的。目前常见的文件系统有以下几种。
●ext3文件系统:ext2文件系统的升级版本,带日志功能,支持最大16TB的分区和最大2TB的文件(1TB=1024GB=1024×1024MB)。
●ext4文件系统:ext3文件系统的升级版,向下兼容ext3文件系统,支持无限量子目录,支持最大1EB(1EB=1024PB=1024×1024TB)的分区和最大16TB的文件。这是CentOS 6.x默认的文件系统。
●fat32文件系统:早期Windows的文件系统,支持最大32GB的分区和最大4GB的文件。
●NTFS文件系统:现在Windows的主流文件系统,比fat32更加安全、速度更快,支持最大2TB的分区和最大64GB的文件。
把硬盘当成柜子,格式化就是按照文件系统的要求,把分区分成等大小的数据块(默认是4KB)。可以理解为将小柜子分成等大小的抽屉,并在柜子门上贴上标签,标签上写明每个文件的索引号、访问时间、权限、数据保存在哪个抽屉中等信息。硬盘有了这样的隔断,才可以真正地保存数据。不过在写入文件系统的时候,会顺带清空分区中的数据,就像给柜子打隔断,当然要先取出柜子内的所有文件一样。
在Windows中,在硬盘分区并格式化之后,只要分配盘符就可以使用了。而在Linux中,还需要给分区分配一个设备文件名。Linux中所有的硬件都被当成一个文件来对待,分区当然也是文件。既然是文件,当然就有文件名,不过我们把硬件的文件名称作设备文件名。分区的设备文件名有固定的命名方式。常见的设备文件名如表2-1所示。
表2-1 设备文件名
1)IDE硬盘接口
IDE(Integrated Drive Electronics,电子集成驱动器)硬盘也称作“ATA硬盘”或“PATA硬盘”,ATA100的硬盘理论传输速度是100MB/s。在Linux中,IDE硬盘接口被标识为“hd”,如图2-32所示。
图2-32 IDE硬盘接口
2)SCSI硬盘接口
SCSI(Small Computer System Interface,小型计算机系统接口)硬盘广泛应用在服务器上,具有应用范围广、多任务、带宽大、CPU占用率低及支持热插拔等优点。理论传输速度达到320MB/s。在Linux中,SCSI硬盘接口被识别为“sd”,如图2-33所示。
图2-33 SCSI硬盘接口
3)SATA硬盘接口
SATA(Serial ATA,串口硬盘)硬盘是速度更高的硬盘标准,具备了更高的传输速度,并具备了更强的纠错能力。目前已经是SATA三代,理论传输速度达到600MB/s。目前SATA硬盘接口已经取代IDE硬盘接口和SCSI硬盘接口,成为主流的硬盘接口。在Linux中,SATA硬盘接口也被识别为“sd”,如图2-34所示。
图2-34 SATA硬盘接口
也就是说,在Linux中使用“/dev/sd”代表SCSI或SATA接口的硬盘,而使用“/dev/hd”代表IDE接口的硬盘。“a”代表第一块硬盘,“b”代表第二块硬盘,以此类推。知道了硬盘的设备文件名,那分区又该如何表示呢?我们通过图2-35来说明分区的设备文件名。
图2-35 分区设备文件名示意图1
在Linux中用1、2、3和4代表主分区的分区号,而从5开始代表逻辑分区。也就是说,主分区1用/dev/sda1表示,主分区2用/dev/sda2表示,主分区3用/dev/sda3表示,扩展分区用/dev/sda4表示,逻辑分区1用/dev/sda5表示,逻辑分区2用/dev/sda6表示,逻辑分区3用/dev/sda7表示。
如果我们采用如图2-36所示的方式来分区呢?
图2-36 分区设备文件名示意图2
主分区1用/dev/sda1表示,扩展分区应该用/dev/sd2表示,可是逻辑分区1还是用/dev/sda5表示,逻辑分区2还是用/dev/sda6表示,逻辑分区3用/dev/sda7表示。因为虽然分区号3和4是空闲的,但是分区号1~4只能用来表示主分区和扩展分区,所以逻辑分区在任何分区情况下都是从5开始计算的。
在Linux中的挂载,大家就可以当成Windows中的分配盘符,只不过Windows的盘符是C、D、E等字母,而Linux的盘符是目录。在Linux中把盘符称为挂载点。这是分区的最后一步,只要给分区分配了挂载点,就可以正常使用分区了。
1)Linux基础分区
Linux系统安装必须划分的分区有两个:一个是根分区“/”,根分区当然越大越好;另一个是虚拟内存分区“swap”。
swap分区的作用可简单描述为:当系统的物理内存不够用的时候,就需要将物理内存中的一部分空间释放出来,以供当前运行的程序使用。那些被释放的空间可能来自一些很长时间没有什么操作的程序,这些被释放的空间被临时保存到swap分区中,等到那些程序要运行时,再从swap分区中恢复保存的数据到内存中。这样,系统总是在物理内存不够时,才进行swap分区交换。其实,swap分区的调整对Linux服务器,特别是Web服务器的性能至关重要。通过调整swap分区,有时可以越过系统性能瓶颈,节省系统升级费用。
现代操作系统都实现了“虚拟内存”这一技术,不但在功能上突破了物理内存的限制,使程序可以操纵大于实际物理内存的空间,更重要的是,“虚拟内存”是隔离每个进程的安全保护网,使每个进程都不受其他程序的干扰。
计算机用户经常会遇到这种现象:在使用Windows系统时,可以同时运行多个程序,当你切换到一个很长时间没有理会的程序时,会听到硬盘“哗哗”直响。这是因为这个程序的内存被那些频繁运行的程序给“偷走”了,放到了swap分区中。因此,一旦该程序被放置到前端,它就会从swap分区中取回自己的数据,将其放进内存,然后接着运行。
需要说明一点,并不是所有从物理内存中交换出来的数据都会被放到swap分区中(如果这样做,swap分区就会不堪重负),有相当一部分数据被直接交换到文件系统中。例如,有的程序会打开一些文件,对文件进行读/写(其实每个程序至少要打开一个文件,那就是运行程序本身),当需要将这些程序的内存空间交换出去时,就没有必要将文件部分的数据放到swap分区中了,而可以直接将其放到文件中。如果是读文件操作,那么内存数据被直接释放,不需要交换出来,因为当下次需要时,可直接从文件系统中恢复;如果是写文件操作,那么只需将变化的数据保存到文件中,以便恢复。
分配太多的swap分区会浪费硬盘空间,而swap分区太小,如果系统的物理内存用完了,系统就会运行得很慢,但仍能运行;如果swap分区用完了,系统就会发生错误。例如,Web服务器能根据不同的请求数量衍生出多个服务进程(或线程),如果swap分区用完了,则服务进程无法启动,通常会出现“application is out of memory”的错误,严重时会造成服务进程的死锁。因此,swap分区的分配是很重要的。
通常情况下,swap分区应大于或等于物理内存的大小,一般官方文档会建议swap分区的大小应是物理内存的2倍。但现在的服务器动不动就是16GB/32GB 内存,是不是swap分区也要扩大到32GB/64GB?其实,大可不必。根据服务器实际负载、运行情况及未来可能的应用来综合考虑swap分区的大小即可,如桌面系统,则只需要较小的swap分区;而服务器系统,尤其是数据库服务器和Web服务器,则对swap分区要求较高。我们推荐的swap分区设置如下:
●4GB或4GB以下内存的系统,最少需要2GB swap分区。
●大于4GB而小于16GB内存的系统,最少需要4GB swap分区。
●大于16GB而小于64GB内存的系统,最少需要8GB swap分区。
●大于64GB而小于256GB内存的系统,最少需要16GB swap分区。
swap分区设置过大只是对硬盘空间的浪费,而对系统性能不会产生太大的影响。
学习用的实验环境,swap分区不需要超过2GB。
2)Linux的常用分区
除根分区和swap分区外,其他Linux目录也可单独划分出来的分区如下。
●/boot:存放Linux系统启动所需文件。我们建议给/boot单独分区,分配200MB空间。任何系统启动都需要一定的空闲空间,如果不把/boot单独分区,那么,一旦根目录写满,系统将无法正常启动。
●/usr:存放Linux系统所有命令、库、手册页等,类似Windows系统引导盘C盘的Windows目录。
●/home:存放用户宿主目录,用于存放用户数据。
其他应用分区,如专门划分一个分区“/web”用于存放Web服务器文件;或者创建一个用于本地和远程主机数据备份的分区“/backup”;初学者创建一个专门用于练习的分区“/test”……都可以视服务器需求来决定。
3)不能单独分区的目录
不过大家需要小心,并不是所有目录都可以单独分区的,有些目录必须和根目录(/)在一个分区中,因为这些目录是和系统启动相关的,如果单独分区,系统就无法正常启动。这些目录有如下几个。
●/etc:配置文件目录。
●/bin:普通用户可以执行的命令保存目录。
●/dev:设备文件保存目录。
●/lib:函数库和内核模块保存目录。
●/sbin:超级用户才可以执行的命令保存目录。
4)Linux的目录结构
Linux是树形目录结构,最高一级目录是根目录(/),根目录下保存一级目录,一级目录下保存二级目录,以此类推,如图2-37所示。
图2-37 Linux的目录结构
Linux系统的每个目录(除不能单独分区的目录外)都可以划分为分区,包括自己手工建立的新目录。它们从Linux层面上看都是根目录的子目录,但是从硬盘层面上看是并列的。也就是说,给“/”分了一个区,也可以给“/home”单独分区,从Linux层面上看“/home”目录是“/”目录的子目录,但是从硬盘层面上看“/home”分区有单独的存储空间,在“/home”下写入的内容会写到不同的硬盘存储空间上,如图2-38所示。
图2-38 分区硬盘空间
简单总结一下Linux硬盘分区的4个步骤:第一步是分区,把大硬盘分为逻辑上的小硬盘;第二步是分区格式化,也就是给分区写入文件系统;第三步是给分区指定设备文件名;第四步是分配挂载点。
在Linux中,我们目前介绍的分区是基本分区方法,这种方法分配的分区大小是不能随意调整的。不过Linux支持更高级的分区方式:逻辑卷管理(LVM)和磁盘阵列(RAID),这两种分区管理方式支持动态调整分区大小。
好了,看完硬盘分区的概念,回到我们的Linux安装。选择“创建自定义布局”,单击“下一步”按钮,进入手工硬盘分区界面,如图2-39所示。
●创建:新建一个分区。
●编辑:修改已经存在的分区设置。
●删除:删除已有分区。
●重设:重新设置所有的分区。
单击“创建”按钮,弹出“生成存储”界面,选择“标准分区”,如图2-40所示。
图2-39 手工硬盘分区界面
图2-40“生成存储”界面
单击“创建”按钮,进入“添加分区”界面,如图2-41所示。在此界面中,我们可以创建/boot分区、/分区、/home分区、swap分区等。
图2-41“添加分区”界面
注意 :swap分区是在文件系统类型选项中进行选择的,而不是在挂载点上选择的。
分区创建完成后,单击“下一步”按钮,出现格式化警告,选择“格式化”,进入引导程序安装界面,如图2-42所示。
图2-42 引导程序安装
单击“下一步”按钮,进入软件包选择界面,可以选择“Desktop(桌面)”“Minimal Desktop(最小化桌面)”“Minimal(最小化)”“Basic Server(基本服务器)”“Database Server(数据库服务器)”“Web Server(网页服务器)”“Virtual Host(虚拟主机)”“Software Development Workstation(软件开发工作站)”等安装系统。当然,也可以选择“现在自定义”进行自定义安装。我们选择“Basic Server(基本服务器)”,如图2-43所示。基本服务器安装完成后是没有图形界面的。如果你想要图形界面,那么请选择“Desktop”系统。虽然安装完成进入系统后仍然可以手工安装所需的软件包,但不建议新手选择“Minimal”系统。
图2-43 软件包选择
单击“下一步”按钮,进入安装界面。安装程序开始后,会花上一段时间,出现如图2-44所示的画面。画面中会出现目前安装的软件包及其简介、预估剩余的时间及安装进度。
安装过程中产生的事件信息存储于不同的日志文件中,安装后可通过这些文件来获知安装信息,如表2-2所示。
图2-44 安装过程
表2-2 日志文件
安装完成后,单击“重新引导”按钮重启后就可以进入等待登录界面了。还记得Linux的超级用户是root吗?还记得安装时输入的root密码吗?输入正确的用户名和密码就可以登录系统了。登录系统输入密码时,要注意,Linux不像Windows在登录时会直接用“*”屏蔽显示密码,Linux是不显示密码输入状态的,只要你输入的密码是正确的,直接按回车键即可进入,不要误以为没有进入输入状态。
CentOS 6.x的默认图形界面为Gnome,进入系统后你会发现Gnome和Windows有些相像。本书对于图形工具的应用不会进行过多讨论,在真正开发服务器应用的时候,大多不会安装X Window,因为其会占用大量系统资源。超哥曾经管理的服务器机房,n台服务器只用一个显示器,平日都是远程管理的,只有需要重启关机添加硬件或修复时才到机房里插上显示器维修。更何况图形工具不能完成Linux系统100%的管理工作。