以Red Hat公司的社区版Linux——CentOS 6.x为例讲解。
简单来说,VMware可以使你在一台计算机上同时运行多个操作系统(如Windows、Linux、FreeBSD同时运行)。在计算机上直接安装多个操作系统,同一个时刻只能运行一个操作系统,切换需重启才可以;而Vmware可以同时运行多个操作系统,可以像Windows应用程序一样来回切换。虚拟机系统可以如同真实安装的系统一样操作,甚至可以在一台计算机上将几个虚拟机系统连接为一个局域网或连接到互联网。
在虚拟机系统中,每一台虚拟产生的计算机都被称为“虚拟机”,而用来存储所有虚拟机的计算机则被称为“宿主机”。例如,你的计算机的Windows即宿主机,而VMware安装的Linux则为虚拟机。
使用虚拟机软件VMware还有以下两点好处:
VMware官方网站:http://www.vmware.com。
推荐使用版本:VMware Workstation Pro或VMware Workstation Player。其中,Player版本推荐个人用户使用,非商业用途,是免费的。
使用VMware虚拟机软件的计算机硬件配置要达到要求,否则虚拟机运行速度会很慢,甚至不能运行。理论上,配置越高越好。现在主流的计算机配置都可以达到运行VMware的要求,千万不要用多年珍藏的老古董来运行VMware,你会发现耐心并不是你的美德。再者,VMware只是工具,没必要追求最新版本,能用即可。
选择“新CD/DVD(IDE)”可以选择光驱配置。如果选择“使用物理驱动器”,则虚拟机会使用宿主机的物理光驱;如果选择“使用ISO映像文件”,则可以直接加载ISO映像文件,单击“浏览”按钮找到ISO映像文件位置即可,如下图所示:
VMware提供的网络连接有5种,分别是“桥接模式”“NAT模式”“仅主机模式”“自定义”和“LAN区段”。
以上对于VMware网络的描述,读者看完了可能会有点困惑。简单总结一下:在VMware安装好后,会生成两个虚拟网卡——VMnet1和VMnet8(在Windows系统的“网络连接”中可以查看到),如下图所示:
其中常用设置为:一种情况是需要宿主机的Windows和虚拟机的Linux能够进行网络连接,使用“桥接模式”(桥接时,Linux也可以访问互联网,只是虚拟机需要配置和宿主机Windows同样的联网环境);另一种情况是需要宿主机的Windows和虚拟机的Linux能够进行网络连接,同时虚拟机的Linux可以通过宿主机的Windows连入互联网,使用“NAT模式”。
硬盘分区是使用分区编辑器在硬盘上划分几个逻辑部分,并写入相应的文件系统。硬盘一旦被划分成数个分区,不同类的目录与文件就可以存储进不同的分区。在Linux中,给一块硬盘分区,主要需要4个步骤:分区、格式化、指定设备文件名和挂载。我们一步一步来学习这4个步骤。
1)分区的概念:
如果所有数据没有差别地全部胡乱塞入硬盘,那么数据的读取效率会非常低。所以需要先把硬盘分区(也就是把大柜子按照使用的要求分成多个小柜子),这样不同的数据保存到不同的分区中,管理起来效率就会更高。
2)硬盘分区的类型:
可是硬盘当中分区到底可以分多少个呢?最开始的时候,硬盘分区只有一种类型,就是主分区,但是由于MBR(主引导记录)中只保留了64 Byte存储空间,而每个分区要用16 Byte,所以一块硬盘只能分成4个主分区。当硬盘很小的时候,4个主分区足够使用;但是随着硬盘容量的不断增加,4个分区已经不能满足我们的工作需要。这时为了分配更多的分区,就出现了扩展分区和逻辑分区。
在上图中,分区1、2、3是主分区,分区4是扩展分区,而分区5和6是逻辑分区。扩展分区不能写入数据,也不能格式化,唯一的作用就是包含逻辑分区。大家可以理解为柜子4是一个大柜子,这个柜子不能放文件,只能在里面套小柜子(逻辑分区)。
分区有了,就可以向里面存储数据了吗?当然不是。我们还用柜子来说明,大柜子分成了小柜子就能放文件了吗?还是不行,柜子当然要打入隔断,才能放入数据,如下图所示:
对柜子来讲,格式化就是打入隔断;对硬盘来讲,格式化的目的是写入文件系统。很多人认为格式化是为了清空数据,这个概念是错误的。目前常见的文件系统有以下几种:
把硬盘当成柜子,格式化就是按照文件系统的要求,把分区分成等大小的数据块(默认是4KB)。可以理解为将小柜子分成等大小的抽屉,并在柜子门上贴上标签,标签上写明每个文件的索引号、访问时间、权限、数据保存在哪个抽屉中等信息。硬盘有了这样的隔断,才可以真正地保存数据。不过在写入文件系统的时候,会顺带清空分区中的数据,就像给柜子打隔断,当然要先取出柜子内的所有文件一样。
在Windows中,在硬盘分区并格式化之后,只要分配盘符就可以使用了。而在Linux中,还需要给分区分配一个设备文件名。Linux中所有的硬件都被当成一个文件来对待,分区当然也是文件。既然是文件,当然就有文件名,不过我们把硬件的文件名称作设备文件名。分区的设备文件名有固定的命名方式。常见的设备文件名如下表所示:
在Linux中的挂载,大家就可以当成Windows中的分配盘符,只不过Windows的盘符是C、D、E等字母,而Linux的盘符是目录。在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分区设置如下:
swap分区设置过大只是对硬盘空间的浪费,而对系统性能不会产生太大的影响。
除根分区和swap分区外,其他Linux目录也可单独划分出来的分区如下:
其他应用分区,如专门划分一个分区“/web”用于存放Web服务器文件;或者创建一个用于本地和远程主机数据备份的分区“/backup”;初学者创建一个专门用于练习的分区“/test”……都可以视服务器需求来决定。
不过大家需要小心,并不是所有目录都可以单独分区的,有些目录必须和根目录(/)在一个分区中,因为这些目录是和系统启动相关的,如果单独分区,系统就无法正常启动。这些目录有如下几个:
Linux是树形目录结构,最高一级目录是根目录(/),根目录下保存一级目录,一级目录下保存二级目录,以此类推,如下图所示:
Linux系统的每个目录(除不能单独分区的目录外)都可以划分为分区,包括自己手工建立的新目录。它们从Linux层面上看都是根目录的子目录,但是从硬盘层面上看是并列的。也就是说,给“/”分了一个区,也可以给“/home”单独分区,从Linux层面上看“/home”目录是“/”目录的子目录,但是从硬盘层面上看“/home”分区有单独的存储空间,在“/home”下写入的内容会写到不同的硬盘存储空间上,如下图所示:
简单总结一下Linux硬盘分区的4个步骤:第一步是分区,把大硬盘分为逻辑上的小硬盘;第二步是分区格式化,也就是给分区写入文件系统;第三步是给分区指定设备文件名;第四步是分配挂载点。
在Linux中,我们目前介绍的分区是基本分区方法,这种方法分配的分区大小是不能随意调整的。不过Linux支持更高级的分区方式:逻辑卷管理(LVM)和磁盘阵列(RAID),这两种分区管理方式支持动态调整分区大小。
但如果需要同时部署10台服务器呢?100台服务器呢?……这么多台服务器如果纯手工安装,那么耗费的人力和时间都将非常可怕。怎么解决这个问题呢?采用无人值守安装!简单地讲,无人值守安装就是搭建一台安装服务器,将其他所有未安装的服务器作为客户端,客户端从服务器上下载所需的软件,并安装所有的客户端服务器,客户端服务器只需修改启动顺序为网络启动,就可以从服务器安装。这种安装方式大大简化了运维工程师的工作量,但是服务器端的搭建比较复杂,并不适合初学者使用。
实现网络安装操作系统,有几个问题需要先明确。第一,既然是网络安装,那么客户端在启动时必须获取IP地址,由谁(DHCP)分配IP地址?第二,由谁(PXE)把客户端启动所必需的软件从服务器端传递到客户端?第三,由谁(KickStart)定义客户端的安装选择?比如选择什么语言?安装什么样的软件包?管理员密码是什么?第四,安装过程已经启动,本地安装是通过光盘或U盘保存安装所需的软件包的,那么网络安装通过谁(HTTP、FTP、NFS)来发送所需的软件包?下面我们一一说明这些问题。
DHCP(Dynamic Host Configuration Protocol,动态主机配置协议)是一种局域网的网络协议,它可以使Client端(客户端)从Server端(服务器端)自动获取IP地址、子网掩码、网关及DNS等网络配置信息,从而简化了Client端的配置和操作,是局域网常用服务。
PXE(Pre-boot Execution Environment)是由英特尔设计的协议,它可以使计算机通过网络启动。协议有Server端和Client端,PXE Client保存在网卡的ROM中,当计算机启动时,BIOS把PXE Client调入内存中执行,然后PXE Client通过网络将放在PXE Server端的启动文件下载到本地运行。注意,PXE Client和PXE Server之间传递数据是通过TFTP协议进行的,所以需要配置TFTP服务器。
KickStart是一种无人值守的安装方式。它把安装过程中所有需要人工干预填写的各种参数记录下来,并保存在一个命名为ks.cfg的文件中。如果安装过程中出现需要填写的参数,那么安装程序会从ks.cfg中查找需要的配置。如果ks.cfg文件把所有需要填写的参数都记录完整,那么安装过程中就不需要人为参与,从而实现自动安装。
HTTP、FTP、NFS都是Linux中文件共享的方式,在这里使用一种就可以了,我们选择HTTP服务。它的主要作用就是把安装过程中所需的软件包发布到网络上(注意:PXE发布的是启动必需文件),Client可以通过网络获取所需的软件包。
(1)在服务器上配置DHCP服务。
(2)在服务器上配置TFTP服务。
(3)在服务器上搭建用来发布安装软件包的服务,如HTTP、FTP或NFS等服务。
(4)在服务器上由KickStart生成ks.cfg自动应答配置文件。
(5)客户机的网卡支持PXE(现在的网卡一般都支持)。
(6)客户机的主板支持网络启动(现在的主板一般都支持)。