安装服务器与 kickstart 大量部署用户端电脑
上一章我们将局域网路内的线路处理妥当并且将服务器设置成可分享局域网路对 Internet 的连接后,再来当然就是要管理内部的用户端电脑的设置了。 用还原卡管理用户端电脑是很简易的方式,不过确有很多教学方面的问题等待克服。如果不用还原卡, 要怎么处理用户端的电脑内操作系统的安装与还原呢?用原版光盘吗?
以正常的 DVD 光盘片安装一两台 Linux 系统似乎是没啥大问题,但如果有好几间电脑教室,里头有几十部总共数百部的主机要你装 Linux 系统的话,那使用 DVD 光盘来装也太花时间了吧?此时,选择通过网络来进行安装就是一项可以思考的方向!同时,如果以鸟哥上班的单位为例,电脑教室的 PC 需要有多重操作系统的环境下,如何准备一个可以裸机安装的功能, 就是一个相当重要的任务了!这篇文章就在讨论如何从网络进行这些动作啰!
一般来说,不论是哪种操作系统,只要是使用 DVD 发布操作系统软件的,通常安装的进程是这样的:
进程是很简单,不过,如果用户端的数量一多起来,上述的第四、五步骤通常会占用相当大的人力!因为安装程序需要与用户交互啊!此外,如果用户端的数量很大! 那么我们如果想要同时进行以减少等待的时间时,就得要刻录多片 DVD,虽然不贵,不过很觉得浪费~另外,现在的网络速度要比 DVD 速度快的多 (Gigabit 网卡至少可以到达 100Mbytes/s 的速度,16X DVD 只能到达大约 25Mbytes/s 以下), 如果将 DVD 的数据拷贝到网络上,通过网络来安装,不是更快吗?是的!没错~但是,这时候就需要 PXE 的协助了!
对于现在的主机硬件系统来说,不论你想在上头干嘛,首先你总是得要通过开机管理程序 (boot loader) 加载系统内核 (kernel) 之后,才能够顺利的开始运作系统。 同理,使用 DVD 原版光盘安装时,BIOS 选择光驱开机,光盘片里面就得要含有开机管理程序与简易的内核,开始驱动整个系统硬件后,才能够进入下一步安装软件的控制中。
现在,我们想要通过网络开机来进入本机系统,等开机之后,接下来爱干嘛就干嘛,当然也就包括进行网络安装的行为啊!那跟上面讲的就一样了,既然我是想要通过网络开机, 那么必要的 (1)开机管理程序与 (2)操作系统内核就得要放在网络上给用户端的主机系统下载使用才行。 问题来了,既然我的主机系统还没有安装任何操作系统,那怎么 (1)取得网络 (2)下载开机管理程序与内核呢?这时就得要通过 Intel 发布的 PXE 机制了。
所谓的 PXE 是『 Preboot Execution Environment 』的缩写,字面上的意思是:『开机前的运行环境』之意。根据 Intel 所发布的文档来看 (注1),要达成这个 PXE 必须要有两个环节,(1)一个是用户端的网络卡必须要支持 PXE 用户端功能,并且开机时选择网络卡开机,这样系统才会以网络卡进入 PXE 用户端的进程;(2)一个是 PXE 服务器必须要提供至少含有 DHCP 以及 TFTP 的服务才行!且其中:
上述两个服务仅能让 PXE 用户端开机而已,开机的定义只是让硬件开始运行罢了!我们都知道,开机完成后还得要提供各式各样的软件之后,才能够顺利的加载可让一般用户操作的基本操作系统。 因此,通常 PXE server 还必须要能够提供用户端所需程序与软件数据的来源才行!所以,通常还得要加上 NFS/FTP/HTTP (通常是选择一样即可) 等数据提供的通信协定后, 才算是比较完整的 PXE 服务器啰。
在本章末了的参考文献中,PXE 已经讲得非常详细!我们这里仅简单的使用底下的图标来解释一下 PXE 的整体运作流程:
从上图中我们再次的归纳几个重点:
那什么时候需要有安装光盘内的软件支持安装呢?那就得要外带内核参数才行啰!也就是说,我们至少得要设置底下这几个服务才行: (1)TFTP (2)DHCP (3)NFS/HTTP/FTP! 其中 TFTP 与 DHCP 为必须,则安装的软件来源则是可选择的!底下我们就一项一项服务来设置吧!
从图 1.1-1 的数据上面,可以发现 DHCP 主要仅是提供用户端网络参数与 TFTP 的地址,以及 boot loader 的文件名而已。 同时,我们仅针对内网来告知 TFTP 的相关位置,所以,我们可以编辑 /etc/dhcp/dhcpd.conf 在 subnet 的区块内加入两个参数即可。
首先,由于我们这个区网还不算太大,所以,鸟哥是将 DHCP 与 TFTP 绑在同一个主机上头,因此 DHCP 与 TFTP 的 IP 都是延续前一章的 192.168.42.254 这一个。那 boot loader 呢? 在 CentOS 里面有提供一个文件名为『 pxelinux.0 』的专门给 PXE client 下载的 PXE boot loader!这个文件我们即将放置于 TFTP 的根目录下,所以,DHCP 的简单设置就变成如下模样:
[root@centos ~]# vim /etc/dhcp/dhcpd.conf ddns-update-style none; default-lease-time 259200; max-lease-time 518400; option routers 192.168.42.254; option broadcast-address 192.168.42.255; option domain-name-servers 192.168.42.254; subnet 192.168.42.0 netmask 255.255.255.0 { range 192.168.42.101 192.168.42.200; option subnet-mask 255.255.255.0; option domain-name "i4502.dic.ksu"; <==上面的数据是前一章的内容! next-server 192.168.42.254; <==就是 TFTP 的地址所在处 filename "pxelinux.0"; <==告知得从 TFTP 根目录下载的 boot loader 文件名 ....(中间省略).... } <==别忘记最后的这玩意! [root@centos ~]# /etc/init.d/dhcpd restart |
再重新启动过 DHCP 之后,这样针对这个内网的 TFTP 设置就生效了。不过,请特别留意喔!如果你没有继续接着底下的 TFTP 来设置的话,那么未来你的用户端如果设置网络卡开机, 就会发现到如下的错误消息~虽然这个错误消息并不会影响到用户端的操作,反正过了逾时等待时间后,系统就会自动的进入下一个开机设备来开机。但是,有这个错误消息就很讨厌就是了。
从上面的消息你可以发现,用户端这个 PXE 已经抓到 DHCP 提供的网络参数,取得的 IP 为 192.168.42.158,但是当他连接到 TFTP 想去下载 pxelinux.0 时, 却抓不到程序!所以就造成等待逾时。虽然没什么,不过多一段等待时间就很讨厌~因此,继续接着底下的 TFTP 来设置吧!
从图 1.1-1 的流程当中,我们知道开机过程所需要的开机管理程序与内核相关开机文件,主要都是通过 TFTP 这个服务来给予的! 这个服务在 CentOS 上面已经有相关的软件主动提供了!设置很简单。但是,那个开机管理程序与内核文件在哪里啊?呵呵!底下我们就分别来说一说各别的设置啰!
TFTP 的安装很简单~直接使用 yum 来处理即可。不过,如同 FTP 服务一样,你总是得要告诉用户端,我的 TFTP 数据的『根目录』在哪里才行! 这样接下来才有办法取得完整的绝对路径相关数据啊。另外要注意,TFTP 其实是由 xinetd 这个 super daemon 所管理的,因此设置好 TFTP 之后, 你要启动的是 xinetd 才对喔!
另外,缺省的 TFTP 服务的根目录是放在 /var/lib/tftpboot/ 底下,由于未来我们的安装服务器有很多数据都会放置在这个文件系统中,为了统一管理, 所以鸟哥习惯上都会将所有需要的数据统一放置于某个目录中!那未来如果有需要加速文件系统或者扩大文件系统时,就比较方便处理~在本章的案例中, 鸟哥是将所有的数据统一放置于 /install/ 目录下的!那这个 TFTP 的根目录我们就将他放置于 /install/tftpboot 底下啰!
# 先安装所需要的 TFTP 服务器软件: [root@centos ~]# yum install tftp-server tftp # 事实上,只要安装 tftp-server 即可。不过这里鸟哥连用户端的 tftp 也一口气装好算了。 # 开始设置 TFTP 的设置档~主要是 TFTP 的根目录所在啦! [root@centos ~]# vim /etc/xinetd.d/tftp service tftp { socket_type = dgram protocol = udp wait = yes user = root server = /usr/sbin/in.tftpd server_args = -s /install/tftpboot <== 重点在这里!改成这样即可 disable = yes per_source = 11 cps = 100 2 flags = IPv4 } [root@centos ~]# mkdir -p /install/tftpboot [root@centos ~]# chcon --reference /var/lib/tftpboot /install/tftpboot [root@centos ~]# chcon --reference /var /install [root@centos ~]# ll -dZ /install/tftpboot drwxr-xr-x. root root system_u:object_r:tftpdir_rw_t:s0 /install/tftpboot/ # 如果你没有关掉 SELinux 的话,那这里就得要这样做才行!注意上面特殊字体部分! # 启动 TFTP 并观察之: [root@centos ~]# /etc/init.d/xinetd restart [root@centos ~]# chkconfig xinetd on [root@centos ~]# chkconfig tftp on [root@centos ~]# netstat -tulnp | grep xinetd Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name udp 0 0 0.0.0.0:69 0.0.0.0:* 2238/xinetd # 你要注意的是端口口 69 以及 xinetd 这个启动的服务名称才对! |
接下来你得要知道的是,所有通过 TFTP 提供的数据,在本章的案例中,都必须要放置于 /install/tftpboot/ 目录下才行喔!不要放错地方了!要注意!要注意!
如果要使用 PXE 的开机管理程序与开机菜单的话,那就得要安装 CentOS 内置提供的 syslinux 软件,从里面捞出两个文件即可。当然啦,这两个文件得要放置在 TFTP 的根目录下才好! 整个实作的过程如下:
[root@centos ~]# yum install syslinux <==底下的文件是由这软件所提供! [root@centos ~]# cp /usr/share/syslinux/menu.c32 /usr/share/syslinux/vesamenu.c32 \ > /usr/share/syslinux/pxelinux.0 /install/tftpboot/ [root@centos ~]# mkdir /install/tftpboot/pxelinux.cfg [root@centos ~]# ll /install/tftpboot/ -rw-r--r--. 1 root root 60928 2013-04-02 18:10 menu.c32 <==提供类菜单模式的功能 -rw-r--r--. 1 root root 26828 2013-04-02 18:10 pxelinux.0 <==就是开机管理程序! drwxr-xr-x. 2 root root 4096 2013-04-02 18:11 pxelinux.cfg <==开机的菜单设置在这里! -rw-r--r--. 1 root root 162860 2013-04-02 18:41 vesamenu.c32 <==图形化接口菜单 |
上面的 memu.c32, vesamenu.c32 及 pxelinux.0 几个文件还好理解,反正就是提供『菜单接口』以及『开机管理程序』的咚咚。那么那个 pxelinux.cfg 是啥鬼?其实那是个目录,可以放置『缺省的开机菜单』,也能够『针对每部不同的用户端主机提供设置的开机菜单』!非常有趣吧!一般来说,还没有特定的用户端时,可以在 pxelinux.cfg 目录内,创建一个名为 default 的文件,那个文件的功能就类似 grub 的 menu.lst 啦!提供一个菜单的设置!
那如果没有 menu.c32 或 vesamenu.c32 时,菜单会以丑丑的纯文本模式一行一行显示。如果加上了 menu.c32 或 vesamenu.c32 时,就会有类似反白光棒的效果出现,那就可以使用『上下键』来操作光棒, 而不需要看着屏幕去输入数字键来选择开机菜单啰!鸟哥觉得这样比较好啦!包括在未来的设置档以及相关的参数设置上面。这部分设置完毕后,再来则是内核文件啰!
我们需要安装 Linux 系统,所以得要从原版光盘里面将内核文件捞出来~这里鸟哥以 64 比特版本的 CentOS 6.4 为范例来说明,鸟哥预计将内核文件放置于 /install/tftpboot/kernel/centos6.4/ 目录下,且鸟哥已经将原版光盘的映像档捉下来放置于 /install/iso/CentOS-6.4-x86_64-bin-DVD1.iso 了,因此捉到内核文件的方法如下:
# 将原版光盘暂时挂载在 /mnt 底下来抓数据用: [root@centos ~]# mount -o loop /install/iso/CentOS-6.4-x86_64-bin-DVD1.iso /mnt [root@centos ~]# mkdir -p /install/tftpboot/kernel/centos6.4 [root@centos ~]# cp /mnt/isolinux/vmlinuz /install/tftpboot/kernel/centos6.4 [root@centos ~]# cp /mnt/isolinux/initrd.img /install/tftpboot/kernel/centos6.4 [root@centos ~]# cp /mnt/isolinux/isolinux.cfg /install/tftpboot/pxelinux.cfg/demo [root@centos ~]# umount /mnt |
其实仅需要两个文件即可,不过鸟哥建议可以抓原版光盘里面的菜单设置档来作为修改的依据!这样以后比较好改!上面三个文件的意义是:
既然 PXE 用户端是通过网络卡来向 TFTP 取得开机管理程序与内核文件的,那么 pxelinux.0 这个开机管理程序又可以去抓缺省的开机菜单设置档 (pxelinux.cfg/default 内容), 这也就是说,其实有很多种不同的方案来让开机管理程序进行开机的!包括本机硬盘开机以及网络下载内核开机。
我们这里预计有两个开机选项, 一个是通过本机硬盘开机 (local boot) 一个则是通过刚刚我们所下载的内核文件来开机,以进入安装模式。那设置该如何处理呢?创建 pxelinux.cfg/ 目录下的 default 即可! 而且我们会使用 vesamenu.c32 来将菜单显示成为类图形光棒喔!注意相关语法!
[root@centos ~]# vim /install/tftpboot/pxelinux.cfg/default UI vesamenu.c32 <== 使用 vesamenu.c32 这个类图形的接口程序 TIMEOUT 300 <== 单位 0.1 秒,所以这个设置可等待 30 秒来进入缺省开机 DISPLAY ./boot.msg <== 提供一些额外的信息,让用户更了解菜单意义! MENU TITLE Welcome to VBird's PXE Server System <== 上面这行只是提供一个大标题而已! LABEL local <== 第一个菜单的项目 MENU LABEL Boot from local drive MENU DEFAULT <== 此菜单为缺省项目 (等待逾时就进入此开机) localboot 0 <== 本机磁盘开机的特定项目! LABEL network1 MENU LABEL Boot from PXE Server for Install CentOS 6.4 kernel ./kernel/centos6.4/vmlinuz <== 内核所在的文件名 append initrd=./kernel/centos6.4/initrd.img <== 就是内核外带参数啊! # 上述设置中,大写的文档部分要特别注意!那是使用 vesamenu.c32 的关键字! # 至于后面的部分,那就是每个设置项目的内容啰! [root@centos ~]# vim /install/tftpboot/boot.msg Welcome to VBird's PXE Server System. The 1st menu can let you system goto hard disk menu. The 2nd menu can goto interactive installation step. |
这个文件有很多种不同的设置模式,包括使用 menu.c32 以及 vesamenu.c32 的设置项目也不太相同。鸟哥这边是以 vesamenu.c32 为范例的喔! 同时,在开始写这设置值之前,请务必回到上面几个小段落瞧一瞧,因为文件放置的地点在每本书或每个范例里面都不一样!能不能通过 TFTP 读到你正确想读的文件, 在这个设置档当中才是重点项目喔!那就来说说上面大写字体的关键字部分的意义:
关于这个设置档的内容,鸟哥建议前往你系统中的 /usr/share/doc/syslinux-${version}/menu.txt 文件名去瞧一瞧,里面写得非常仔细!尤其是你还可以使用 chain.c32 去加载不同的 boot sector 开机!这就等于通过网络去指挥你的系统进行某个多重操作系统开机!而不用在现场敲键盘!非常有帮助!不过我们这里没有这方面的需求, 因此没有仔细介绍。反正,记得去瞧瞧就是了。
一切都整理妥当之后,接下来你就可以开始在用户端的 BIOS 设置网络开机,然后来测试一下你的 PXE 环境设置正确否了!只不过,每一家主机的 BIOS 设置都不相同, 鸟哥没有办法全部测试给你看~同时,新的 BIOS 甚至已经支持鼠标设置了!好厉害好厉害~鸟哥还是使用旧旧的电脑来显示给大家瞧瞧~相关的设置位置应该都差不多啦!
完成上述的项目之后,重新开机后,如果一切顺利,你的系统在开机时就会进入如下的画面当中:
如上图所示,鸟哥测试过两种接口,分别使用了 menu.c32 以及 vesamenu.c32 来测试显示的画面,结果就像上图,使用 vesamenu.c32 看起来分辨率似乎比较好,只是, 缺省的配色好像不怎么样,可能得要自己去参考说明文档配色一下比较好。使用 menu.c32 的话,就是明显的颜色对比,但是比较呆板一些的画面。随人喜好去调整吧。
由于缺省有 30 秒的选择时间,因此画面下方会开始读秒,如果按了上/下按键,反白的部分就不会在 default 值缺省的光棒处了!如果你在需要的菜单上面,按下了『Tab』按钮, 此时系统就会跳出类似 grub 的交互接口给你修改参数就是!由于我们还没有安装系统在硬盘上,因此,鸟哥选择了第二个项目,亦即是『Boot from PXE Server for Install CentOS 6.4』的项目。 按下之后就会开始进入安装的侦测画面中。
硬件侦测完毕,并且让你:
之后,就开始选择 CentOS 软件所在的保存媒体了!如下图所示:
由于我们尚未制作软件安装服务器,因此,我们直接使用国家高速网络中心的 FTP 所提供的软件来源来安装!因此,此时请选择『 URL 』的项目。因为使用 URL 必须要有网络, 因此,安装程序会要求我们设置 IP !请注意,这个安装过程使用的网络参数与 PXE 取得的网络参数无关!所以这里得要重新输入一次网络参数。因为我们有使用 DHCP 服务啊! 所以如下勾选动态设置就好了:
然后输入你查到的网址,如下所示 (使用国高的 FTP):
如果一切都没有问题,这个时候就会开始进入安装画面,开始进行裸机的在线安装!你也不用在用户端刻录光驱,非常简单方便吧!只是有个问题,你得要让你的机器连上 Internet 去安装软件~ 那你也知道互联网的速度要比你局域网路的速度慢很多~如果同时有很多台用户端电脑要安装系统,那就糗大了!因此,这时在区网内架设一个软件安装服务器就显的很重要了! 底下就来聊一聊怎么建这个安装服务器吧!
架设安装服务器实在是非常的简单,尤其是 CentOS 这个版本!你只要下载 CentOS 6.x 的第一片 DVD,将里头的数据以 NFS, HTTP, FTP 等方式分享出去,那你的主机就变成安装服务器了!就这么简单!鸟哥个人比较偏好使用 NFS 来分享,这是因为未来的应用中,我们可能需要网络磁盘机, NFS 是一个可以直接作为 Linux 网络磁盘机的服务,所以就用它比较简单!如果你喜欢其他的协定来分享也没有关系啊!我们可以使用同一个目录来分享呢! 假设我们 DVD1 放置于 /install/iso/ 目录内了,预计要分享的 CentOS 6.4 原版 DVD 目录放在 /install/nfs_share/centos6.4/ 中, 简单的处理如下:
# 1. 先将 DVD 的数据给他放置于所需要的目录中,当然直接使用挂载最快! [root@centos ~]# mkdir -p /install/nfs_share/centos6.4 [root@centos ~]# vim /etc/fstab /install/iso/CentOS-6.4-x86_64-bin-DVD1.iso /install/nfs_share/centos6.4 iso9660 defaults,loop 0 0 # 特别要注意的是文件系统与参数,记得光盘使用 iso9660 且需要加上 loop [root@centos ~]# mount -a [root@centos ~]# df 文件系统 1K-区段 已用 可用 已用% 挂载点 /install/iso/CentOS-6.4-x86_64-bin-DVD1.iso 4251346 4251346 0 100% /install/nfs_share/centos6.4 # 这样就挂载结束,比拷贝来拷贝去要简单的多喔! # 2. 制作 NFS 分享,要注意对内 port 有规范喔! [root@centos ~]# yum -y install nfs-utils [root@centos ~]# vim /etc/exports /install/nfs_share/ 192.168.42.0/24(ro,async,nohide,crossmnt) localhost(ro,async,nohide,crossmnt) # NFS 的设置是很简单,不过,要注意由于 server 上面有两个挂载点在分享的目录上, # 所以得要加上 nohide 与 crossmnt 这两个参数才行!且后续的服务要开比较多就是了~ [root@centos ~]# vim /etc/sysconfig/nfs RQUOTAD_PORT=901 LOCKD_TCPPORT=902 LOCKD_UDPPORT=902 MOUNTD_PORT=903 STATD_PORT=904 # 找到上面这几个设置值,我们得要设置好固定的 port 来开放防火墙给用户处理! [root@centos ~]# vim /etc/idmapd.conf [General] Domain = i4502.dic.ksu [Mapping] Nobody-User = nfsnobody Nobody-Group = nfsnobody # 找到上面几个设置值,我们这里假设 ID 对应的无此帐号使用 nfsnobody 设置! [root@centos ~]# /etc/init.d/rpcbind restart [root@centos ~]# /etc/init.d/nfs restart [root@centos ~]# /etc/init.d/rpcidmapd restart [root@centos ~]# /etc/init.d/nfslock restart [root@centos ~]# chkconfig rpcbind on [root@centos ~]# chkconfig nfs on [root@centos ~]# chkconfig rpcidmapd on [root@centos ~]# chkconfig nfslock on [root@centos ~]# rpcinfo -p program vers proto port service 100000 4 tcp 111 portmapper 100000 4 udp 111 portmapper 100011 2 udp 901 rquotad 100011 2 tcp 901 rquotad 100005 3 udp 903 mountd 100005 3 tcp 903 mountd 100003 4 tcp 2049 nfs 100003 4 udp 2049 nfs 100021 4 udp 902 nlockmgr 100021 4 tcp 902 nlockmgr 100024 1 udp 904 status 100024 1 tcp 904 status # 要注意喔,我们得要启动的 port 有 111, 2049,901~904 这几个!防火墙要开! [root@centos ~]# showmount -e localhost Export list for localhost: /install/nfs_share 192.168.42.0/24,localhost # OK!看到上面这些东西,就是搞定啰!赞! # 3. 然后我们也来开放 www 服务提供这个安装服务器吧!简单作法如下: [root@centos ~]# yum install httpd [root@centos ~]# /etc/init.d/httpd start [root@centos ~]# chkconfig httpd on [root@centos ~]# mkdir -p /var/www/html/install/centos6.4 [root@centos ~]# vim /etc/fstab /install/iso/CentOS-6.4-x86_64-bin-DVD1.iso /var/www/html/install/centos6.4 iso9660 defaults,loop 0 0 [root@centos ~]# mount -a [root@centos ~]# df 文件系统 1K-区段 已用 可用 已用% 挂载点 /install/iso/CentOS-6.4-x86_64-bin-DVD1.iso 4251346 4251346 0 100% /var/www/html/install/centos6.4 # 同样的,用挂载的应该会比较快速些~ # 4. 如果还想要提供 FTP 的处理呢?那还是简单的这样做即可: [root@centos ~]# yum install vsftpd [root@centos ~]# /etc/init.d/vsftpd start [root@centos ~]# chkconfig vsftpd on [root@centos ~]# mkdir -p /var/ftp/install/centos6.4 [root@centos ~]# vim /etc/fstab /install/iso/CentOS-6.4-x86_64-bin-DVD1.iso /var/ftp/install/centos6.4 iso9660 \ defaults,loop,context=system_u:object_r:public_content_t:s0 0 0 # 上面是同一行,比较重要的是参数的部分多了 context 喔!因为我们这个系统有使用 SELinux, # 为了要避免挂载的文件系统出现 FTP 的 SELinux 错误,因此这里得要加上此参数才行! [root@centos ~]# mount -a [root@centos ~]# df 文件系统 1K-区段 已用 可用 已用% 挂载点 /install/iso/CentOS-6.4-x86_64-bin-DVD1.iso 4251346 4251346 0 100% /var/ftp/install/centos6.4 # 超级简单的这样就搞定了! |
很神奇的,这样就搞定了三个服务的安装服务器功能!如果你想要开始测试使用内网的 http, ftp 来安装的话,请回到图 1.4-10 的画面当中,在 URL 的空格上面,分别填入两个不同的网址试看看:
上面两个网址鸟哥都测试过,通过上面的设置,这个网址是可以直接就进入安装模式当中没问题~那如果是 NFS 呢?你得要先回去图 1.4-8 的画面中点击『 NFS directory 』的项目,然后在出现如下的画面中,才输入我们详细的 NFS 分享的 CentOS 6.4 光盘内容的所在目录:
因为画面的关系,所以你看不到全部的输入数据。请注意,CentOS directory 项目要填写:『/install/nfs_share/centos6.4』才行喔! 接下来,请自行使用底下的方式来完整的安装好一套 Linux 在你的系统上。鸟哥这里使用的是 30GB 的测试硬盘来安装的,底下仅列出不是自动设置的项目,需要调整的地方:
接下来系统就会使用你想不到的速度安装好一套 CentOS Linux 了!非常简单吧!这个网络安装的流程!
完成上面各小节的设置后,你区网内的用户端电脑应该都能够通过网络来安装 CentOS 了!只是,比较伤脑筋的地方在于,你还是得要手动一部一部电脑去开机,然后一步一步去选择需要的安装选项后, 最终按下安装,系统才会自动的帮你安装妥当。有没有可能让系统自己帮我安装而不用选择呢?可以啊!那就通过 kickstart 这个机制吧!
我们在上个小节的最后一段当中,有请你自行安装了一个超小型的 CentOS 系统吧!那么请你进入该系统去,瞧一瞧 root 家目录有没有一个名为 anaconda-ks.cfg 的文件呢? 请打开该文件来瞧一瞧内容如何!
[root@client ~]# cat /root/anaconda-ks.cfg # Kickstart file automatically generated by anaconda. install nfs --server=192.168.42.254 --dir=/install/nfs_share/centos6.4 lang en_US.UTF-8 keyboard us network --onboot yes --device eth0 --bootproto dhcp --noipv6 rootpw --iscrypted $6$qznCBKF/YnJdX9rB$OeSGN1c6JNCZ/GtqJTvKrN0t/pRkkUlhEXdc... firewall --service=ssh authconfig --enableshadow --passalgo=sha512 selinux --enforcing timezone Asia/Taipei bootloader --location=mbr --driveorder=vda --append="crashkernel=auto rhgb quiet" #clearpart --none #part / --fstype=ext4 --size=3000 repo --name="CentOS" --baseurl=nfs:192.168.42.254:/install/nfs_share/centos6.4 --cost=100 %packages @base @console-internet @core @debugging ....(中间省略).... krb5-workstation perl-DBD-SQLite %end |
看过这个文件内容,有没有觉得好像很熟悉啊!那是啥?没错!这就是刚刚你使用安装程序进行设置项目选择时,将你选择的内容记忆起来的数据!通过这个文件, 你可以知道最初安装时是如何设置这个系统的。也由于这个系统还记录了 root 编码过的密码,所以,很重要啊!不要随便外流喔!现在让我们想一想, 既然这个文件已经记录了我们所需要进行的各项步骤,那我通过这个文件不就可以预先选择好,然后交给安装程序去自动运行即可吗?没错啊!就是这样!
既然知道了这个未来的功能了,那我们当然就得要先来了解一下这个 kickstart 文件的内容才好啊!其实这个文件大致将所有的动作分为三大部分来设计,分别是:
接下来就让我们稍微谈一谈每个区段的重要设置项目吧!
这部分的重点项目有底下几个常见的设置值,至于全部的完整信息,可以参考文末的参考文献去看更完整的数据喔!
[root@centos ~]# grub-crypt Password: <==输入一次密码 Retype password: <==再输入一次密码 $6$fPCvnGklAR4Qbxhp$RfFL4.wwZml.mWbej6HHYWTAE6ZLRV8/d... <==这就是加密过的密码! |
# 不要在这部电脑使用防火墙系统,直接放行所有连接功能: firewall --disabled # 仅放行 ssh 的连接功能: firewall --service=ssh <==激活的服务,可以是 ssh, telnet, smtp, http, ftp 等等 firewall --port=22:tcp <==激活的端口口,也可以使用 2049:udp 之类的模式! # 上面两个取任何一个都可以!鸟哥个人是比较喜欢使用号码的 port number 来显示! # 让 eth1 变成信任网域,且放行 port 22, 25, 80 等端口口: firewall --port=22:tcp,25:tcp,80:tcp --trust eth1 # 如果有多个网卡,可以指定某张网卡变成信任设备,这样直接放行所有的进出封包在 eth1 上头~ # 但不包括其他 eth0, eth2...接口,仅有 eth1 是信任的意思。 |
# CentOS 缺省的身份验证设置值:使用 sha1 512bits 算法 authconfig --enableshadow --passalgo=sha512 <==较佳的默认值! # 如果想要使用旧的 md5 编码来取代新的 sha1 编码,可以这样做看看: authconfig --enableshadow --enablemd5 |
selinux --permissive # 主要的模式有: --enforcing --disabled --permissive 喔! |
timezone Asia/Taipei <==建议改成这样 timezone --utc Asia/Taipei <==以前缺省的时区模式 # 更多系统支持的时区列于 /usr/share/zoneinfo/ 目录下,请自行参考喔! |
# 原本缺省的 bootloader 安装于 MBR 以及缺省 CentOS 6.x 的内核参数如下: bootloader --location=mbr --driveorder=vda --append="crashkernel=auto rhgb quiet" # grub 安装于 MBR, 安装于 vda 那颗硬盘上,且增加内核参数为 crashkernel=auto rhgb quiet # 先找 vda 安装,如果找不到,就找 sda 安装,再找不到,就找 hda 安装在 MBR 内: bootloader --location=mbr --driveorder=vda,sda,hda --append="crashkernel=auto rhgb quiet" |
# 所有硬盘的分割表通通被清除! clearpart --all # 仅清除 vda 硬盘的分割表,其他的硬盘不要清除分割表! clearpart --drives=vda --all |
part / --fstype=ext4 --size=5000 --ondisk=vda --asprimary part /home --fstype=ext4 --grow --ondisk=vda --asprimary part /usr --fstype=ext4 --size=10000 --ondisk=vda part /var --fstype=ext4 --size=20000 --ondisk=vda part /tmp --fstype=ext4 --size=1000 --ondisk=vda part swap --fstype=swap --size=1000 # 如果仅有一颗硬盘,那么 --ondisk 可以省略喔! # 使用 --size 来规范该分割的大小,单位是 MB 啰! # 使用 --grow 就可以让系统自动去判断最大可用容量,然后通通丢给该分割! # 使用 --asprimary 就会将该分割强制列在主要分割类型中! |
services --disabled cups,kdump,acpid,portreserve
|
repo --name="CentOS" --baseurl=nfs:192.168.42.254:/install/nfs_share/centos6.4 --cost=100 # --name 接这个 yum 软件仓储的名称,可以自订一个名字即可 # --baseurl 就是软件来源~上述为 NFS 的写法,如果是 url 的写法,就直接 --baseurl=http://xxx 即可 # --cost 这个来源的权重比例 |
上面鸟哥仅列出常见的 kickstart 选项,还有很多其他选项,就请自行参阅相关的文献数据啰!接下来让我们来看一看软件安装区段能有什么特殊的功能吧!
玩过 yum 就会知道,一般我们在安装软件时,可以独立安装某一个特定软件 (yum install package),也可以安装整个软件群组 (yum groupinstall grouppackage)!
那我怎么知道有哪些软件群组可以使用呢?这时就得要查找原版光盘内的 repodata/*comps.xml 文件了!举例来说,请到目前你服务器内的
/install/nfs_share/centos6.4/repodata/*comps.xml 文件内,使用关键字 『group』 去查找一下,就会看到很多安装过程中会出现的软件群组了!
以我们在上一小节谈到的安装内容 (basic server) 来说,相关的软件与软件群组有这些:
%packages @base <==前面加个 @ 的,代表是软件群组喔! @console-internet @core @debugging @directory-client @hardware-monitoring @chinese-support <==中文语系支持!这个重要! ....(中间省略).... pax <==直接写软件名称的,就是单一软件而已! oddjob sgpio device-mapper-persistent-data ....(底下省略).... |
一般来说,所有的软件都可以在后续才安装!不过,如果你想要一安装完毕就能够看到图形接口以及所有相关的其他语系显示画面,那就得要安装额外的语系支持。 同样可以到 *comps.xml 文件内找到相关的软件群组来安装。举例来说,如果你想要安装法语语系,那就得要加个:『 @french-support 』在你的 %packages 区段内啰!
假设你的 kickstart 是要给不同的机器设备共同使用的,但我们知道所有的设备其实硬盘数量与大小都不相同。那能不能在开始解析 kickstart 之前,先侦测系统的磁盘设备, 根据侦测的结果制作出分割表的规划后,才进行 kickstart 的解析,最后才开始安装呢?是可以的!那就是将所需要侦测与作出分割信息的文件通过 bash shell 去检测, 然后在 kickstart 内使用『 %include somefile 』的方式将该数据汇整进来即可~这时就得要将该动作放置于 %pre 的区段内了!
不过 %pre 的用途比较少,因为安装前大概只要注意到硬件侦测,以厘清我们想要安装的模式为何而已。如果是安装后到重新开机前的行为,那就热闹多了! 因为我们可能会增加 ssh 的密钥、额插件载与设置某些特定的脚本程序到 /etc/rc.d/rc.local、额外进行其他 partition 的完整复原等等。举例来说,如果我想要安装完毕之后, 让 root 加入 ssh 密钥,这样我才能够不用密码登录此机器时,那可以这样处理:
%post #!/bin/sh mkdir -p /root/.ssh chmod 700 /root/.ssh chown root.root /root/.ssh echo "ssh-rsa AAAAB3NzaC1yc2EA...== root@i4502.dic.ksu" >> /root/.ssh/authorized_keys chmod 644 /root/.ssh/authorized_keys chown root.root /root/.ssh/authorized_keys |
当然啦,上面那个密钥的内容 (echo 后面双引号的内容) 你就得要自己粘贴去了~
谈完了大致的 kickstart 参数后,那怎么用在我们想要处理的批量安装电脑教室内的所有电脑主机呢?最简单的方式就是,拿上一个小节做完的 anaconda-ks.cfg 来改即可! 简单快速又方便!现在鸟哥想要使用底下的方式来处理批量安装:
鸟哥预计将这个 kickstart 放置于 /install/nfs_share/kickstart/ 目录内,且取名为 pcroom_raw.ks 文件。在这个文件开始处理前,我们有两个东西需要先取得, 一个是 root 密码,一个则是密钥中公钥的内容。我们可以简单的通过底下的方式来取得相关的信息:
# 1. 取得 root 密码: [root@centos ~]# grub-crypt Password: Retype password: $6$ZXrlk3POd9J1kqa4$PmTaai.UlWf.exaXFP.aqmn6C4gdQvP9NpExsJmcJIDAKD8VEZArkVtfr/KDnScY41tZGJxwix0ZvEbsmjLea0 # 上面这一串就是我们要的数据啦! # 2. 取得密钥的公钥数据: [root@centos ~]# ssh-keygen Generating public/private rsa key pair. Enter file in which to save the key (/root/.ssh/id_rsa): <==输入 Enter Enter passphrase (empty for no passphrase): <==输入 Enter Enter same passphrase again: <==输入 Enter Your identification has been saved in /root/.ssh/id_rsa. Your public key has been saved in /root/.ssh/id_rsa.pub. <==这就是我们要的! The key fingerprint is: 51:ee:b0:29:e5:3a:01:eb:57:33:f3:73:34:12:0b:26 root@server.i4502.dic.ksu [root@centos ~]# cat /root/.ssh/id_rsa.pub # 输出的内容就是我们要的信息!! |
好了,那就让我们来调整一下这次我们所需要的 kickstart 文件内容吧!
[root@centos ~]# mkdir /install/nfs_share/kickstart [root@centos ~]# vim /install/nfs_share/kickstart/pcroom_raw.ks install text nfs --server=192.168.42.254 --dir=/install/nfs_share/centos6.4 lang zh_TW.UTF-8 keyboard us network --onboot yes --device eth0 --bootproto dhcp --noipv6 rootpw --iscrypted 刚刚你用 grub-crypt 作出的密码参数 firewall --port=22:tcp,25:tcp,80:tcp,111:tcp,111:udp,9000:udp,9001:udp authconfig --enableshadow --passalgo=sha512 selinux --permissive timezone Asia/Taipei bootloader --location=mbr --driveorder=vda --append="crashkernel=auto rhgb quiet" reboot zerombr clearpart --all part / --fstype=ext4 --size=3000 services --disabled cups,kdump,acpid,portreserve repo --name="CentOS" --baseurl=nfs:192.168.42.254:/install/nfs_share/centos6.4 --cost=100 %packages @base @console-internet @core @debugging @directory-client @hardware-monitoring @java-platform @large-systems @network-file-system-client @performance @perl-runtime @server-platform @server-policy pax oddjob sgpio device-mapper-persistent-data samba-winbind certmonger pam_krb5 krb5-workstation perl-DBD-SQLite %post #!/bin/sh mkdir -p /root/.ssh chmod 700 /root/.ssh chown root.root /root/.ssh echo "刚刚你制作出的 id_rsa.pub 文件的内容" >> /root/.ssh/authorized_keys chmod 644 /root/.ssh/authorized_keys chown root.root /root/.ssh/authorized_keys [root@centos ~]# chmod 644 pcroom_raw.ks |
了解了 kickstart 的参数后,这个小节的相关参数修改与制作就显的简单多了!接下来,就让我们准备来大量安装系统吧!
我们得要告知用户端在取得 PXE 的环境后,还能够自动下载这个 kickstart 设置档,这样用户端电脑才会自己安装而不会进入询问模式。这时得要修改 pxelinux.cfg/default 内容了! 我们现在增加另外一个菜单,这个菜单可以让系统自动的以刚刚的 kickstart 方式来自我裸机安装~这样做就可以了!
[root@centos ~]# vim /install/tftpboot/pxelinux.cfg/default ....(前面省略).... LABEL kickstart1 MENU LABEL Boot from PXE Server for AUTO Install CentOS 6.4 raw kernel ./kernel/centos6.4/vmlinuz append initrd=./kernel/centos6.4/initrd.img ks=nfs:192.168.42.254:/install/nfs_share/kickstart/pcroom_raw.ks |
重点是上面特殊字体的部分!可以是 nfs 也可以是 http:// 的格式!看你的数据要放哪里就是了。鸟哥偷懒一下,就直接摆内网原本要分享出去的位置而已。 好了,接下来请到内网的用户端开机一下,使用网络开机喔!看看能不能进入第三个菜单,然后让系统自己安装去!
在鸟哥的测试中,很快的啦!几分钟就安装好了这样的一套系统~相当的简单快速!不用挑选!好开心啊!另外,这一套系统如果搞定了之后,拜托注意一下, 请回到第一章 2.3 小节的 DHCP 服务器部分,参考一下 getmac.sh 的内容, 根据该功能重新设置一下你的 DHCP 服务器设置档,让你的用户端 IP 能够与座位搭配上喔!
如果你跟鸟哥一样有特殊的操作系统环境需求,那么可能得要花点功夫来思考一下怎么进行操作系统的初期安装才好!安装好了之后,再将该 partition 所在的环境给他完整的备份, 然后丢给其他电脑来作为复原的机制!这样就成功啦!这过程是挺复杂的~底下我们就来玩一玩~
在鸟哥工作的信息传播系单位中,因为系上老师们使用的软件都不一样,很多老师还是需要 Windows 上面的重要软件。因此,鸟哥得要将电脑系统安装成多重操作系统。 在这样的情况下,我们系上需要安装 (1)第一套 Linux 管理系统 (2)windows 7 系统 (3)上课用 CentOS 桌面系统,这还没有提到数据共用的 windows D 槽~ 好了,假设我们已经使用 kickstart 安装好了第一套 Linux 管理系统,那接下来 Windows 系统怎么安装呢?当然你得要调整用户端 BIOS 变成光驱开机,放入 Windows 7 的原版光盘, 接下来请自行安装你的 Windows 系统吧!
因为 Demo 机未来安装的系统都是要做为备份的来源,因此安装在上头的数据当然就得要能够复原给其他用户端电脑。一般来说,目标的磁盘总是要比来源的磁盘大才好。 例如,原本 Demo 机器的 Windows 占用了 20GB 的话。那么你的其他用户端电脑,除非系统与磁盘是一模一样的,否则的话,最好能够加大到类似 20.1GB 之类的容量,那未来在复原时比较不会出问题。 这是鸟哥过去的经验啦,提供给您参考啰!
另外,安装过 Windows 7 的朋友都知道,Windows 会自己搞一个额外的 100MB 分割来保存信息。不过,鸟哥不是很喜欢多这个分割在。但是这个分割是 windows 正常安装所产生的, 以正常手段是很难避免掉!所以,为了避免这个问题,鸟哥习惯上都会先自己在 Linux 控制系统上面使用 fdisk 或 parted 手动创建足够的分割,然后再强迫 Windows 安装到固定的分区中, 这样就不会多出那个怪异的 100MB 分区了。
现在,鸟哥假设我这里预计要安装的 Windows 会占用 20.1GB 的容量,剩余的容量都给 Linux 使用。不过如前所述,Demo 机器的容量要检小一些。因此,底下我们要处理的方式中, Windows 的 /dev/vda2 仅拥有 20GB,剩余的容量中,除了给 Linux Desktop 用之外,还会有 100MB 留在最面没有使用到!底下是鸟哥的测试机分割示意:
# 1. 先看看剩下多少容量吧! [root@centos ~]# parted /dev/vda unit MB print Model: Virtio Block Device (virtblk) 磁盘 /dev/vda:31527MB <==此硬盘的最大可用容量 磁区大小 (逻辑/物理):512B/512B 分割区:msdos 编号 起始点 结束点 大小 类型 文件系统 旗标 1 1.05MB 3147MB 3146MB primary ext4 <==此硬盘的 /dev/vda1 起始/结束磁柱 # 2. 创建的新分割为 NTFS 文件系统,且起始为 3147MB 结束为 3147+20480*1.024=24118.5=24120 # 请注意,parted 显示的 MB 为十进位的 1000 倍而不是我们常用的 1024 倍! [root@centos ~]# parted /dev/vda mkpart primary NTFS 3147MB 24120MB [root@centos ~]# parted /dev/vda unit MB print 编号 起始点 结束点 大小 类型 文件系统 旗标 1 1.05MB 3147MB 3146MB primary ext4 2 3147MB 24120MB 20974MB primary ntfs <==注意大小的地方即可! # 3. Linux Desktop 容量应该在 24120MB ~ (31527-100) = 31427MB [root@centos ~]# parted /dev/vda mkpart primary ext2 24120MB 31427MB [root@centos ~]# parted /dev/vda mkpart primary ext2 31427MB 31527MB [root@centos ~]# parted /dev/vda unit MB print 编号 起始点 结束点 大小 类型 文件系统 旗标 1 1.05MB 3147MB 3146MB primary ext4 2 3147MB 24120MB 20974MB primary ntfs 3 24120MB 31427MB 7306MB primary 4 31427MB 31527MB 99.7MB primary |
请注意,鸟哥是特别留下 100MB 在最后面,这个不见得用的到!如果每部机器的磁盘都一模一样的话,那就无所谓~如果不一样大的话,那么等一下用户端的电脑就得要先作个手脚~ 让他们的 /dev/vda2, /dev/vda3 稍大一下,这样在复原时比较不会出问题啦!
请先确认你的光驱放了 Windows 7 的原版光盘,并且调整了 BIOS,之后直接进入安装程序,因为我们先作了分割了,因此,你就会看到如下的画面, 直接按下箭头点击处安装到 /dev/vda2 即可!
安装好了 Windows 7 之后,鸟哥建议可以关闭某些不必要的服务,以及更改一些可能会发生问题的设置,并增加一个可以自动修订主机名称的软件后, 再开始进行 Windows update。等到更新完毕后,再安装你所需要的所有软件。等到软件都处理妥当了,这时才开始进行后续的备份与大量复原的动作吧!底下是鸟哥建议可以进行的工作:
整个 windows 7 的安装大概就是这样,重点在那个分割的动作啦!然后,由于未来这部 Demo 机的 windows 会被拿来作为范本并还原在其它的主机上, 所以,最好对这个系统做个比较完整的设置与更新,然后才关机后准备备份的动作。不要忘记了,我们还有个 CentOS Linux 要安装喔!
安装好了 Windows 7 之后,你会发现一件事情,那就是:『你再也进不了第一套 Linux 控制系统』了!这是因为 Windows 7 会主动的将它的 boot loader 安装于硬盘的 MBR 当中,但它的 boot loader 又不允许提供 Linux 系列的 boot loader 的控制权移交,因此,你才再也进不了 Linux。没关系啦!反正我们还可以再安装一套 Linux 嘛!
那如何安装这套 Linux 呢?要不要原版光盘啊?不用啦!我们不是在 PXE 的阶段就作好了可以让用户自由挑选安装内容的菜单吗?回到图 2.3-1 去瞧一瞧,直接使用第二个菜单来开机就能进入交互的安装模式了。然后就开始依据正常进程安装系统,你唯一比较需要注意的地方是:
如果一切顺利的话,你的系统会很快速的就安装完毕且进入 Linux Desktop 中没问题~不过,此时你却只能使用这套 Linux 与 Windows 来操作系统而已, 还是无法回到原本的 Linux 控制系统!那怎办?没关系,我们先来处理一下 Linux desktop (第三套系统) 的问题,处理完毕后,再来搞定 Linux manager (第一套系统) 的问题~
# 删除系统侦测到的网卡 MAC 与网卡代号对应值 [root@centos ~]# vim /etc/udev/rules.d/70-persistent-net.rules # PCI device 0x1af4:0x1000 (virtio-pci) SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="52:54:00:ae:67:07", ATTR{type}=="1", KERNEL=="eth*", NAME="eth0" # 上面删除线的内容是同一行~只要出现的任何 SUBSYSTEM 开头的,通通删除! # 让系统下次开机时,重新针对网络卡进行硬件自动检测! # 让网络设置档中,关于网卡与网卡 UUID 的设置值拿掉~ [root@centos ~]# vim /etc/sysconfig/network-scripts/ifcfg-eth0 DEVICE="eth0" BOOTPROTO="dhcp" HWADDR="52:54:00:AE:67:07" NM_CONTROLLED="yes" ONBOOT="yes" TYPE="Ethernet" UUID="93fa7379-4e1b-4893-a480-0e405cd8e165" # 将上面两个设置值,HWADDR 与 UUID 拿掉! |
[root@centos ~]# vim /boot/grub/menu.lst default=0 timeout=30 splashimage=(hd0,2)/boot/grub/splash.xpm.gz hiddenmenu title CentOS (2.6.32-358.el6.x86_64) root (hd0,2) kernel /boot/vmlinuz-2.6.32-358.el6.x86_64 ro root=/dev/vda3 .....(后面省略).. initrd /boot/initramfs-2.6.32-358.el6.x86_64.img title Windows 7 rootnoverify (hd0,1) chainloader +1 title MBR root (hd0) chainloader +1 # 如上所示,增加菜单等待时间之外,也增加回到 MBR 的菜单功能! # 此外,由于这个映像档要被拷贝,因此 root 不建议使用 UUID,应变为原本的 /dev/vda3 较佳。 |
# 1. 先挂载原有的 Linux 控制系统,并且将根目录切为该系统去! [root@centos ~]# df 文件系统 1K-区段 已用 可用 已用% 挂载点 /dev/vda3 7119768 3435780 3322320 51% / <==有 7G 为 desktop 系统 tmpfs 510212 76 510136 1% /dev/shm [root@centos ~]# mount /dev/vda1 /mnt <==除根目录外,底下的内存与设备也需要挂载 [root@centos ~]# mount --bind /proc /mnt/proc [root@centos ~]# mount --bind /dev /mnt/dev [root@centos ~]# chroot /mnt [root@centos /]# df <==你会看到,突然变成了根目录了! 文件系统 1K-区段 已用 可用 已用% 挂载点 /dev/vda1 3023760 1730868 1139292 61% / <==整个根目录变成为 vda1 sysfs 3023760 1730868 1139292 61% /sys # 2. 设置好菜单项目,缺省为 Windows --> Linux desktop --> Linux manager [root@centos /]# vim /boot/grub/menu.lst default=0 timeout=30 <==等待 30 秒比较够用 splashimage=(hd0,0)/boot/grub/splash.xpm.gz #hiddenmenu <==不要隐藏,直接让用户挑选 title Windows 7 <==第 0 个是 Windows 7 rootnoverify (hd0,1) chainloader +1 title CentOS Linux for Desktop System (Linux OS) <==第 1 个依旧直接交给该系统的 loader root (hd0,2) chainloader +1 <==就是这里!是该系统自己的 loader title This system restore/backup manager <==最后一个才是管理系统本身 root (hd0,0) kernel /boot/vmlinuz-2.6.32-358.el6.x86_64 ro root=/dev/vda1 .....(后面省略).. initrd /boot/initramfs-2.6.32-358.el6.x86_64.img # 是要特别注意上头内核参数的 root 部分啦!因为这个菜单也要拷贝给所有用户端机器使用! # 3. 将此设置写入 MBR 当中去! [root@centos /]# grub GNU GRUB version 0.97 (640K lower / 3072K upper memory) [ Minimal BASH-like line editing is supported. For the first word, TAB lists possible command completions. Anywhere else TAB lists the possible completions of a device/filename.] grub> root (hd0,0) root (hd0,0) Filesystem type is ext2fs, partition type 0x83 grub> setup (hd0) setup (hd0) Checking if "/boot/grub/stage1" exists... yes Checking if "/boot/grub/stage2" exists... yes Checking if "/boot/grub/e2fs_stage1_5" exists... yes Running "embed /boot/grub/e2fs_stage1_5 (hd0)"... 27 sectors are embedded. succeeded Running "install /boot/grub/stage1 (hd0) (hd0)1+27 p (hd0,0)/boot/grub/stage2 /boot/grub/grub.conf"... succeeded Done. grub> quit quit # 4. 回原本的 Desktop 系统,并重新将自己的 grub 安装于自己 filesystem 的 boot sector 内! [root@centos /]# exit [root@centos ~]# grub <==回到原本的 Linux desktop 中 grub> root (hd0,2) grub> setup (hd0,2) <==以 Linux desktop 的设置,再次安装于自己的 boot sector 内! grub> quit # 在某些特殊的情境下,partition 内的 boot sector 并不会安装 grub 开机管理程序, # 为了避免困扰,建议还是重新安装一次在原 desktop 系统中较好! |
在一切都搞定之后,接下来要干嘛?当然就是将 Demo 机的 /dev/vda2, /dev/vda3 内的文件系统拷贝起来啦!那如何拷贝呢? 就得要通过 server 端提供的 NFS 文件系统空间,然后再以 partclone 指令处理即可!继续来参考下一小节的内容吧!
我们的 Demo 机的第一套 Linux 控制系统内的文件容量很小,全部的文件系统只给 3GB 而已,根本没有空间可以保存 /dev/vda2, /dev/vda3 的数据。 因此得要通过区网内的 server 提供的网络磁盘来进行备份。最简单的网络磁盘当然就是 NFS 啦!另外,我们也知道备份整个 partition 最简单的方式是 dd 这个指令~只是,dd 会连同没有使用到的磁区也备份下来,而且也没有进行任何文件系统压缩,因此备份档会非常非常大!
以本案例来说,鸟哥的 windows 灌完只用了 13GB 而 Linux 更小,只有 3GB 左右而已,因此总共用的磁盘也不过 16GB。但如果使用的是 dd 指令备份, 那么全部的备份数据将会保留原有 partition 的大小,亦即是 20+7=27GB,这比用到的数据还要大太多了吧!
为了减少保存备份的文件系统压力,也为了加快文件系统的复原 (越大的备份代表越久的复原时间),我们这里使用的是国家高速网络中心推出的, 修改 partimage 让备份支持 ext4/NTFS 等文件系统的 partclone 软件啦(注3)!这个软件功能相当强大,而且国高也有针对 CentOS 推出 yum 软件仓储, 你只要设置好 yum 就能够直接在线安装 partclone 了!好轻松呢!
接下来,我们将分 server 与 client 需要进行的动作来做介绍喔!下达指令之前,务必了解该指令段是给哪个系统使用的! 不要做错地方了喔! ^_^
Server 端要进行的项目中,其实不需要安装 partclone 啦!只是为了管理上的方便,所以建议还是得安装一下比较好!另外,鸟哥预计要让用户端上传备份数据的地方, 主要是放置于 /install/client_img/ 目录,该目录最好要权限全开比较好!那就让我们来玩一玩吧!
# 1. 先设置好 DRBL 官方网站提供的 yum repository 的网址,并安装所需要的 partclone 与 ntfsprogs [root@centos ~]# vim /etc/yum.repos.d/drbl.repo [drbl] name = Diskless Remote Boot in Linux baseurl = http://free.nchc.org.tw/drbl-core/x86_64/RPMS.drbl-stable/ gpgcheck = 0 enabled = 1 # 记得,这个文件是自己创建的!所以是全新文件啦! [root@centos ~]# yum install partclone ntfsprogs # 2. 分享 /install/client_img/ 目录使用 NFS 出去 [root@centos ~]# mkdir /install/client_img [root@centos ~]# vim /etc/exports /install/client_img 192.168.42.0/24(rw,async,no_root_squash) localhost(rw,async,no_root_squash) [root@centos ~]# /etc/init.d/nfs reload [root@centos ~]# showmount -e localhost Export list for localhost: /install/client_img 192.168.42.0/24,localhost <==多这玩意儿就对了! /install/nfs_share 192.168.42.0/24,localhost |
Server 做到这步就成功了!很简单吧!
Client 端的设置中,第一步骤与 server 一样,就是安装好 partclone, ntfsprogs 即可!非常简单!不过你需要注意的是,你要进入的是:『Linux 控制系统, 也就是第一套用 kickstart 安装的系统』才对喔!因为我们是通过这个 Linux 来掌控整部主机的嘛!
# 1. 先设置好 DRBL 官方网站提供的 yum repository 的网址,并安装所需要的 partclone 与 ntfsprogs [root@centos ~]# vim /etc/yum.repos.d/drbl.repo [drbl] name = Diskless Remote Boot in Linux baseurl = http://free.nchc.org.tw/drbl-core/x86_64/RPMS.drbl-stable/ gpgcheck = 0 enabled = 1 [root@centos ~]# yum install partclone ntfsprogs # 2. 挂载来自 Server 的 /install/client_img 目录到本系统中 [root@centos ~]# mkdir -p /install/client_img [root@centos ~]# mount -t nfs 192.168.42.254:/install/client_img /install/client_img [root@centos ~]# df 文件系统 1K-区段 已用 可用 已用% 挂载点 192.168.42.254:/install/client_img 15481856 4456704 10238720 31% /install/client_img <==要看到他! # 3. 使用 partclone 完整备份 /dev/vda2 到 Server 上面去! [root@centos ~]# partclone.[fs] -c -s [设备] -o [file] <==这个是备份 [root@centos ~]# partclone.[fs] -r -s [file] -o [设备] <==这个是还原 选项与参数: -c :为拷贝 (clone) 的意思,所以要备份得要加上 -c 参数才行喔! -r :为还原 (restore) 的意思,还原映像档到设备上,就得使用这玩意儿! -s :为来源 (source) 的意思,备份时为设备,还原时为来源印象档。 如果与标准输入/输出有关而非文件/设备时,那就写『 - 』即可! -o :为目标 (output) 的意思,是要将来源拷贝到哪里去的意思~一般是文件! -d :为调试 (debug) 的意思,可以输出的消息比较多,方便用户调试 -C :为略过检测 (no check) 的意思,某些特殊情况下,你可能要略过检测~ 这个项目就可以帮助你略过检测了! # 将 windows 7 的 partition 完整备份后,并且进行压缩,直接放置于 server 上 [root@centos ~]# partclone.ntfs -c -s /dev/vda2 -o - | \ > gzip > /install/client_img/windows7.img.gz Partclone v0.2.59 http://partclone.org 开始备份 设备 (/dev/vda2) 到 印象档 (-) Reading Super Block 经过:00:00:01, 剩余: 00:00:00, 完成:100.00% 全部时间:00:00:01, 100.00% completed! done! <==上面在读取整体文件系统信息,主要是 superblock 内的数据 文件系统: NTFS Device size: 21.0 GB = 5120135 Blocks <==检测文件系统数据量~ Space in use: 14.3 GB = 3502594 Blocks Free Space: 6.6 GB = 1617541 Blocks 设备区块大小: 4096 Byte 经过:00:11:04, 剩余: 00:00:00, 完成:100.00%, 速率: 1.30GB/min current block: 5120135, total block: 5120135, Complete: 100.00% <==备份过程展示 全部时间:00:11:04, 平均速率: 1.3GB/min, 100.00% completed! Syncing... OK! 备份 设备 (/dev/vda2) 到 印象档 (-) 完成 [root@centos ~]# ll -h /install/client_img/ -rw-r--r--. 1 root root 4.9G 2013-04-21 12:33 windows7.img.gz <==容量是否小一些! [root@centos ~]# partclone.ext4 -c -s /dev/vda3 -o - | \ > gzip > /install/client_img/linux_desktop.img.gz # 继续备份下一个 /dev/vda3 的 Linux desktop 啰! [root@centos ~]# cp /boot/grub/menu.lst /install/client_img/ # 同时备份其他系统也会更动到的开机菜单的部分即可! |
需要注意的是,partclone 支持很多的文件系统让我们选择备份,只是他并不是提供类似『 mkfs -t [文件系统类型] 』的指令模式, 而是直接制作许多指令档让我们来运行~因此,你不能使用 partclone.ntfs 来备份 Linux 系统,也不能使用 partclone.ext4 来备份 windows 系统。 所以,要操作这个动作之前,还得先要了解你的操作系统的文件系统类型才行哩!
另外,partclone 本身并不提供压缩功能,所以,你必须要通过数据流重导向的方式,将数据丢到屏幕中,再交给 gzip 进行压缩~ 所以才会有上面的范例中,那么复杂的指令输入情况!还原也一样,先必须要通过 gzip 解压缩后,才能够交给 partclone 来还原! 做完这些动作后,我们的 Demo 机就可以功成身退了!
与备份一样,还原也是很简单的!只是,你得要留意的是,必须要先运行磁盘分割,分割完毕之后,才能够依据镜像档来复原。 分区的容量要不要一模一样大呢?其实,只要比镜像档内的分割参数要大就好了。举例来说,我们刚刚备份的 windows 7 里面的 Device size 显示为 21GB, 那么你预计要将这个备份数据复原的分区,就要比这个值大!否则就会出现还原失败的情况。由于每颗硬盘的容量都不一样大, 因此,你得要先在新机器上面做好分割后,才能够复原。
好,假设你已经使用之前做好的 kickstart 在另一部新机器上安装好了第一套 Linux 了,请进入该系统,然后一步一步来处理另外两个 Windows/Linux 操作系统的复原吧!(我这里假设你已经安装好了 partclone 了喔!不再重复 yum 阶段!)
# 1. 先观察分割表,之后依据 Demo 机的分割表来进行本机分割吧! [root@centos ~]# parted /dev/vda unit MB print Model: Virtio Block Device (virtblk) 磁盘 /dev/vda:31527MB 磁区大小 (逻辑/物理):512B/512B 分割区:msdos 编号 起始点 结束点 大小 类型 文件系统 旗标 1 1.05MB 3147MB 3146MB primary ext4 启动 # 目前仅有自己的分割,没有底下两个额外的 Windows/Linux 分割! [root@centos ~]# parted /dev/vda mkpart primary NTFS 3147MB 24120MB [root@centos ~]# parted /dev/vda mkpart primary ext2 24120MB 31427MB [root@centos ~]# parted /dev/vda unit MB print 编号 起始点 结束点 大小 类型 文件系统 旗标 1 1.05MB 3147MB 3146MB primary ext4 启动 <==启动的位置不对 2 3147MB 24120MB 20974MB primary NTFS 3 24120MB 31427MB 7306MB primary ext4 # 利用本章制作的 Demo 机器之前的分割表来重复一次!因为鸟哥的机器一模一样, # 所以这里暂时跟原有的 Demo 机的分割参数一个模样喔! [root@centos ~]# parted /dev/vda set 2 boot on [root@centos ~]# parted /dev/vda unit MB print 编号 起始点 结束点 大小 类型 文件系统 旗标 1 1.05MB 3147MB 3146MB primary ext4 2 3147MB 24120MB 20974MB primary NTFS 启动 <==OK!正确了! 3 24120MB 31427MB 7306MB primary ext4 [root@centos ~]# reboot # 重新开机让 partition 生效,然后才能继续后续的处理流程! # 2. 开始复原系统 [root@centos ~]# mkdir -p /install/client_img [root@centos ~]# mount -t nfs 192.168.42.254:/install/client_img /install/client_img [root@centos ~]# gzip -d /install/client_img/windows7.img.gz -c | \ > partclone.ntfs -r -s - -o /dev/vda2 开始还原 印象档 (-) 到 设备 (/dev/vda2) Reading Super Block Calculating bitmap... Please wait... done! 文件系统: NTFS Device size: 21.0 GB = 5120135 Blocks Space in use: 14.3 GB = 3502594 Blocks Free Space: 6.6 GB = 1617541 Blocks 设备区块大小: 4096 Byte 经过:00:03:46, 剩余: 00:00:00, 完成:100.00%, 速率: 3.81GB/min current block: 5120135, total block: 5120135, Complete: 100.00% 全部时间:00:03:46, 平均速率: 3.8GB/min, 100.00% completed! Syncing... OK! 还原 印象档 (-) 到 设备 (/dev/vda2) 完成 Cloned successfully. # 从解压缩的数据中读取 partclone 镜像档,并将之复原到 /dev/vda2 !无须格式化! [root@centos ~]# gzip -d /install/client_img/linux_desktop.img.gz -c | \ > partclone.ext4 -r -s - -o /dev/vda3 # 3. 开始处理 grub 菜单内容 [root@centos ~]# cp /install/client_img/menu.lst /boot/grub/menu.lst # 4. 处理弹性缩放文件系统的动作: (optional) [root@centos ~]# partclone.ntfsfixboot -w /dev/vda2 [root@centos ~]# ntfsresize /dev/vda2 [root@centos ~]# resize2fs /dev/vda3 # partclone.ntfsfixboot 可以修复 NTFS 文件系统开机磁区可能会出现的错误; # ntfsresize 可以让该文件系统放大到该设备最大可用容量!(但是 windows 开机会要求磁盘检查) # resize2fs 则是弹性处理 ext4 的文件系统啰! |
一般来说,备份会花比较多时间,还原的速度比较快!所以,同样是针对 windows7 来比较,备份需要花去我们 11 分钟的时间, 还原仅需一半的时间即可处理完毕!相当有趣吧!还不需要预先格式化呢!还不快点来学习 partclone 吗?! ^_^
接下来,就请您在这部新机器上面重新开机,看看你的开机菜单有没有出现三个,并且尝试登录其他两个操作系统试看看啰!
想想看,我们在完成了 kickstart 以及 Demo 机的安装之后,在其他用户端上面做了什么事?大概只有这些:
既然只进行这些动作而已,那为何不能将这些动作写入 kickstart 设置档中呢?恩!你问了一个好问题!我们当然可以将这些动作写入 kickstart 设置档当中的 %post 之后,这样系统就能够一键安装了!开心得不得了吗?呵呵!那就让我们来玩玩看,试看看能不能这样做吧!
# 先在 PXE server 上面进行改写 kickstart 设置档的动作啊! [root@centos ~]# cd /install/nfs_share/kickstart [root@centos kickstart]# cp pcroom_raw.ks pcroom_one_touch.ks [root@centos kickstart]# vim pcroom_one_touch.ks ....(前面省略).... repo --name="DRBL" --baseurl=http://free.nchc.org.tw/drbl-core/x86_64/RPMS.drbl-stable/ --cost=200 # 加入了 DRBL 的 yum 软件仓储! %packages ....(中间省略).... partclone ntfsprogs # 加入了 DRBL 的 partclone, ntfsprogs 等软件的自动安装! %post #!/bin/sh ....(中间省略).... chown root.root /root/.ssh/authorized_keys parted /dev/vda mkpart primary NTFS 3147MB 24120MB parted /dev/vda mkpart primary ext2 24120MB 31427MB parted /dev/vda set 2 boot on echo " #!/bin/bash echo 'Prepare to mount NFS server' mkdir -p /install/client_img mount -t nfs 192.168.42.254:/install/client_img /install/client_img echo 'Restore windows7' gzip -d /install/client_img/windows7.img.gz -c | partclone.ntfs -r -s - -o /dev/vda2 echo 'Restore Linux Desktop' gzip -d /install/client_img/linux_desktop.img.gz -c | partclone.ext4 -r -s - -o /dev/vda3 echo 'Restore boot menu' cp /install/client_img/menu.lst /boot/grub/menu.lst echo 'remove partclone procedure' sed -i 's/^.*sh \/root\/partclone.sh.*$//g' /etc/rc.d/rc.local rm /root/partclone.sh sleep 10s poweroff " > /root/partclone.sh echo "sh /root/partclone.sh" >> /etc/rc.d/rc.local # 上面就是在进行各项复原的动作! # 2. 再增加一个 PXE 的菜单,可以一键安装到底! [root@centos ~]# vim /install/tftpboot/pxelinux.cfg/default ....(前面省略).... LABEL kickstart2 MENU LABEL Boot from PXE Server for AUTO Install CentOS 6.4 One touch kernel ./kernel/centos6.4/vmlinuz append initrd=./kernel/centos6.4/initrd.img ks=nfs:192.168.42.254:/install/nfs_share/kickstart/pcroom_one_touch.ks |
上述的动作中,最重要的当然就是 kickstart 的修改了!因为新的 CentOS 6.x 以后,不知道是加了什么系统保护的机制,因此 partprobe 这个强迫内核重新抓取分割表的功能遗失了~ 所以,我们在 %post 当中进行过分割,但是却无法顺利的使用该分割来工作。所以,只好加上一些脚本在 Linux 的启动进程中,让 kickstart 安装好 Linux 之后, 立刻自动的去处理第一支脚本程序 (/root/partclone.sh),处理完毕后自我删除且除掉 /etc/rc.d/rc.local 的脚本指向即可。
在上面的 kickstart 文件中,鸟哥强迫让系统安装完毕后自动关机 (poweroff),如果你有其他特殊的需求,想要在安装完毕后继续留在原 Linux 控制系统中工作时, 那可以将 poweroff 与 sleep 10s 删除,这样就不会让你的系统安装完毕后自动关机啰!接下来打开你的用户端电脑,用网络开机,选择最后一个 PXE 菜单, 你不用再理它!它会自动安装、还原之后,自己关机!开心的不得了啊! ^_^
完成上述的功能之后,你的用户端只要使用网络开机,然后点击 PXE 的最后一个菜单,那就可以安心的去睡觉了!反正系统会自动关机嘛! 只是,如果是很急的情况底下,你想要复原全部电脑教室的 60 部主机时,那就有点头疼了~因为全部的系统同时去抓来自 Server 的 NFS 提供的映像档时, 太多用户端了!会吃掉很多带宽,所以速度快不了~那怎办?
想像一个情况,我能不能只从 Server 抓一次数据,然后将数据同时广播给所有用户,这样不就能够节省好多带宽了吗?因为只送出一次数据而已嘛! 不像每部主机单独来的时候,都得要再次的将数据送出。可以达到吗?嘿嘿!是可以的,可以通过所谓的『 Multicast (群播)』的功能喔!(注5)
所谓的 multicast 主要是通过 switch 的 MAC 学习功能,然后将来自 Server 的一份数据,通过 switch 的 multicast 支持,将这份数据主动拷贝成多份, 然后丢给需要的用户端电脑。因为需要 switch 的协助,所以,你的 switch 必须要支持 multicast 的相关能力才行。不过,由于某些 switch/hub 可能没有支持 multicast, 因此,后来该项功能也可以使用 broadcast (广播) 传给所有人,而仅有需要的用户会抓下来。
会不会很难啊这个功能?其实不会呢!我们可以直接通过 udpcast (注5) 这套软件来实施即可!这套软件还刚刚好 DRBL 的 yum 软件仓储有提供呢! 所以,直接使用 yum 来安装即可。安装好了之后,每部系统都要打开在 Linux 控制系统中,然后这样处理即可:
# 1. 先安装 udpcast 这套软件,记得,要在 yum 里头加入 DRBL 的官网才行,Server/client 都要装 [root@centos ~]# yum install udpcast # 2. 不论 switch 有没有支持,我们使用 broadcast 即可!这是在 server 端下达的指令: [root@centos ~]# udp-sender --interface eth1 \ > -f /install/client_img/linux_desktop.img.gz \ > --min-receivers 3 \ > --nokbd --broadcast --fec 8x8/128 stripes=8 redund=8 stripesize=128 Udp-sender 20110710 Using full duplex mode Using mcast address 232.168.42.254 UDP sender for /install/client_img/linux_desktop.img.gz at 192.168.42.254 on eth1 Broadcasting control to 192.168.42.255 New connection from 192.168.42.3 (#0) 00000009 <==有顺利接上用户端,就会显示! New connection from 192.168.42.4 (#1) 00000009 New connection from 192.168.42.5 (#2) 00000009 # 请注意,缺省 udpcast 会用到 9000~9001 两个 udp 的端口口,所以要确认你的 server 已放行~ # 同时检查一下用户端!用户端也要放行才可以呦! (如果有参考第一章与本章就 OK!) # 3. 在用户端下达此一指令来接收并且还原系统! [root@centos ~]# udp-receiver --nokbd | \ > gzip -d -c | partclone.ext4 -r -s - -o /dev/vda3 Udp-receiver 20110710 UDP receiver for (stdout) at 192.168.42.3 on eth0 received message, cap=00000009 Connected as #0 to 192.168.42.254 <==真的连接上了呦! Listening to multicast on 232.168.42.254 Partclone v0.2.59 http://partclone.org <==收下文件立刻解压缩还原! 开始还原 印象档 (-) 到 设备 (/dev/vda3) Calculating bitmap... Please wait... done! 文件系统: EXTFS Device size: 7.3 GB = 1783808 Blocks Space in use: 3.7 GB = 892278 Blocks Free Space: 3.7 GB = 891530 Blocks 设备区块大小: 4096 Byte 经过:00:01:38, 剩余: 00:00:00, 完成:100.00%, 速率: 2.24GB/min current block: 1783808, total block: 1783808, Complete: 100.00% 全部时间:00:01:38, 平均速率: 2.2GB/min, 100.00% completed! Syncing... OK! 还原 印象档 (-) 到 设备 (/dev/vda3) 完成 Cloned successfully. # 因为 udpcast 仅发送文件而已,所以用户端接收文件,还得解压缩与还原才行! |
你会发现,全部的用户端系统是同步在进行还原!所有的数据会一模一样!鸟哥上面仅使用到 3 部系统来示范而已,而且使用较简便的 Linux desktop 示范而已, 真的使用到整间电脑教室时,那种时间的节省,才教你开心呐!!
或许你有发现一件事,既然我们用了网络 PXE 的菜单,这已经是第一层菜单,然后,还得要通过第二层的本机开机菜单,才能够进入我们所需要的环境中。 两层菜单ㄟ!好麻烦~有没有可能直接在 PXE 里面就作好了直接进入到某个特定操作系统的菜单?这样就可以直接通过第一层 PXE 菜单即可,不用转来转去啦! 可以做到吗?是可以的!只是,还得要额外提供一个 chain.c32 的菜单转递模块才行。
现在我们上面这个示范机里面总共有:
这三个菜单我们将它加入于 PXE 的 default 文件中,然后直接通过 chain.c32 去转递开机管理功能,这样设置一下,看看能不能生效吧!
# 1. 先将 chain.c32 放置于 tftp 的根目录中: [root@centos ~]# cp /usr/share/syslinux/chain.c32 /install/tftpboot/ [root@centos ~]# vim /install/tftpboot/pxelinux.cfg/default ....(前面省略).... LABEL local MENU LABEL Boot from local drive MENU DEFAULT localboot 0 LABEL local1 MENU LABEL Boot from local drive to Windows 7 kernel chain.c32 <==使用 chain.c32 来作为开机管理程序 append hd0 2 <==使用第一颗硬盘的第二个分区开机! LABEL local2 MENU LABEL Boot from local drive to Linux Desktop kernel chain.c32 append hd0 3 LABEL local3 MENU LABEL Boot from local drive to Linux Management kernel chain.c32 append hd0 1 LABEL network1 ....(后面省略).... |
上述的设置中,比较需要注意的是『 append hd0 2 』这个设置值,这个设置值的意思是,使用第一颗 (从 0 开始编号) 的第 2 个分区 (从 1 开始编号, hd0 2 组合起来,就是 Linux 的 /dev/sda2 或本案例中的 /dev/vda2 的意思) 来进行开机。如此一来,你就会多出三个菜单,所以再次重新开机之后,你就会看到如下的画面:
这样就搞定了单层菜单!太棒了吧!呵呵!
既然现在这么简单的通过 PXE 可以制作菜单,也可以直接通过 kickstart 来进行批量的每部主机个别的还原,那为何还需要安装第一套 Linux 管理系统呢? 不知道你有没有过这样的疑问呢?这是因为要预防万一啦!多一个 Linux 管理系统有许多的好处,包括这部系统会具有比较大的自由度!要管理系统比较安全, 此外,最大的重点是,你的这部用户端电脑可以不必在此教室内使用,方便移动机器!
会这么做的原因是,由于电脑教室所在的环境中,常常会因为某些不明的原因导致跳电,这一跳电,很多『机会』会让 Server 就此挂点! 而如果单纯使用 PXE 而没有用户端自己的菜单管理时,恐怕到时候某些特定的操作系统会无法进入,这会对上课环境造成些许的困扰啦!
此外,以鸟哥所在的信息传播系而言,我们系上在毕业专题展时,常常需要将教室的个人电脑带往展场去展出。如果没有菜单模式时,比较不能符合专题组的需求 (每个专题组要使用的操作系统都不相同)。所以,在较复杂的环境,而且需要有移机的需求时,安装一套 Linux 管理系统,对我们后续的处理还是有很多好处的! 因此,如果你也有相关的需求,那鸟哥真的强烈的建议你要有这个 Linux 管理系统的安装比较好喔!