学校实验室管理难题
运行学校计算机实验室的主要挑战之一是管理在分配给学生使用的不同PC上运行的软件。系统管理员面临各种情况,所有这些情况都源于学习环境的性质,在学习环境中,用户都拥有对其机器的超级用户访问权限。例如
重要的系统程序可能会被无意或恶意删除,从而导致应用程序或操作系统本身崩溃;或者
安装新应用程序可能需要更改某些系统库,从而与现有应用程序产生冲突;或者
需要全新安装操作系统的课程可能会扰乱后续处理数据库或Web服务器的课程。
此外,上述情况还有几种变体。使问题更加复杂的是时间安排压力,因为学校计算机实验室经常必须适应各种课程,每门课程都有其独特的要求。即使是管理每周只开设一门课程的实验室的管理员,也仍然必须为后续课程重新安装系统。
为企业设计的系统管理工具通常不适合学校计算机实验室环境。它们旨在管理公司内或多或少一致的计算机系统配置文件,这种配置文件的变化频率较低,并且使用策略比学习环境更严格。商业系统管理套件的成本对于学校来说也可能过高。
脚本安装工具,例如Red Hat的Kickstart程序,可以自动化操作系统的安装,但是外部和定制的应用程序必须由管理员单独打包。虽然对于某些应用程序来说这是一个简单的过程,但对于较大的应用程序来说,这可能非常复杂,尤其是那些需要交互式用户输入进行配置的应用程序。
解决这些问题的一种方案是维护一个系统镜像存档,其中包含实验室中运行的每门课程所需的内容。系统镜像可以根据需要恢复到个人计算机,通常在半小时内即可完成。系统镜像比全新的操作系统安装效率更高,不需要配置或加载其他必需的应用程序:配置文件和程序都作为镜像本身的一部分存储。
因此,如果操作系统由于删除了系统文件而崩溃,管理员只需使用与特定课程相关的镜像恢复计算机即可。具有冲突库要求的软件甚至不同操作系统的风格都可以安装在不同的系统镜像中,并根据需要进行恢复。具有预先确定的软件要求的课程不再需要经历整个安装过程来设置系统。
此外,系统镜像可以在一台主机器上构建,并在具有相同或相似配置的机器上重复使用。这为系统管理员节省了大量时间,因为他们现在可以构建一次镜像并将其同时部署到多台机器上。
市面上有几种商业系统镜像实用程序,Ghost和DriveImage是最受欢迎的,总的来说,它们的成本并不太高。但是,预算严重受限的学校系统管理员可以完全无需购买,并通过使用几乎所有Linux发行版都附带的基本实用程序来实现更大的灵活性。
通常,操作系统及其配置文件和所有已安装的应用程序都驻留在计算机硬盘的整个分区中。当计算机启动时,引导加载程序指向此分区作为正常运行所需的所有程序的来源。因此,问题的核心是,您需要一个实用程序来将整个硬盘分区备份到一个文件,反之,将其从文件恢复到一个分区。
dd实用程序适用于此目的。dd的文档谦虚地声称它可以复制和转换文件。实际上,它是一个强大的实用程序,因为Linux和其他UNIX将所有内容都视为文件。例如,如果您想将第一个硬盘驱动器(/dev/hda2)的第二个分区的镜像写入文件,则需要发出以下命令
dd if=/dev/hda2 of=myimage.img
一个2GB大小的分区将相应地生成一个2GB的文件,因此您需要确保要复制镜像的目录具有足够的容量。另外,请确保要克隆的分区未挂载或未用于任何其他活动。
将镜像恢复到分区是一个同样简单的过程。
dd if=myimage.img of=/dev/hda2
由于镜像备份和恢复实用程序无法自行运行,因此您需要从操作系统运行它。相同的操作系统必须可以访问您正在修改的所有分区,以及镜像文件所在的区域。其他必需的组件是引导加载程序和文件分区实用程序。
那么,这在实践中将如何运作呢?
从主操作系统启动。
使用dd将保存的镜像恢复到预设分区。
重新启动系统并使用引导加载程序选择机器应从中启动的分区。
为了用一个实际示例来说明这些概念,让我们考虑在一个单台PC上的简单实现。该PC是实验室的一部分,该实验室定期用于Linux应用程序开发DB2课程。课程持续一周,之后实验室管理员必须安装一套全新的操作系统和数据库。
本示例中的PC具有两个IDE硬盘,主硬盘大小为6.5GB,辅助硬盘大小为20GB。主硬盘用于操作系统和应用程序,辅助硬盘用于存储数据。
这是我们即将要做的事情的概述。
安装主操作系统,为master OS本身创建一个分区,并为交换空间创建一个分区,但为辅助操作系统留出足够的空间。这将是Linux发行版的标准安装。
重新启动机器并安装辅助操作系统,在主磁盘的剩余空间中创建一个分区。两个不同之处是:i)我们可以重用我们在步骤1中创建的交换空间;以及ii)我们不为该辅助操作系统安装引导加载程序,因为我们将使用步骤1中的引导加载程序。
重新启动机器并切换回主操作系统。修改引导加载程序配置文件以识别辅助操作系统。
重新启动机器并切换到辅助操作系统。安装将在辅助操作系统上用于实验室工作的所有应用程序,并根据需要进行配置。
最后,重新启动机器并切换回主操作系统。创建辅助操作系统的镜像。
对于Linux安装来说,过多的重启次数是不典型的。但是,在设置阶段这是必要的,因为我们正在处理多个操作系统镜像。
第一阶段:安装主操作系统
对于此示例,Red Hat Linux 7.2是主操作系统。主操作系统的安装遵循常规安装过程。唯一需要特别注意的点发生在安装的分区设置期间。
我们为系统设置分区的方式如下:分配一个100MB分区/dev/hda1作为我们的/boot目录,并分配一个384MB分区/dev/hda2作为我们的交换文件。交换文件可以由主操作系统或辅助操作系统使用;无需为每个操作系统创建单独的交换文件。交换文件大小取决于系统的物理内存。至少分配一个2.5GB分区/dev/hda3作为主操作系统的根(/)目录。为辅助操作系统分配剩余的磁盘空间,辅助操作系统是Red Hat Linux 7.2的另一个实例。此处无需将可用空间定义为Linux分区;这可以在下一步完成。
Red Hat 7.2的默认引导加载程序是GRUB,它应该安装在/dev/hda(我们的主硬盘)的主引导记录(MBR)上。使用其默认配置。
安装过程的其余部分应正常进行。我们可以像任何普通的Linux安装一样配置网络设置、用户帐户和X。系统应在安装结束时重新启动。您可能需要完成此过程以确保安装成功完成,并在系统上配置其他设置。
第二阶段:安装辅助操作系统
在我们安装了主操作系统之后,我们可以安装辅助操作系统。同样,安装过程应与常规Red Hat 7.2设置的典型过程相同,除了两个区域:分区设置和引导加载程序设置。
从我们在第一阶段操作中剩余的可用磁盘空间中创建一个Linux分区。将辅助操作系统的根(/)目录安装在此分区上。我们不应以任何方式更改在上一步中创建的其他分区。在本例中,辅助操作系统的根(/)分区是/dev/hda5。
我们还应注意引导加载程序设置。在辅助操作系统的情况下,我们不安装引导加载程序。相反,我们使用主操作系统的引导加载程序来加载辅助操作系统。
辅助操作系统的安装应像往常一样进行,包括配置网络、所需的用户帐户和其他设置。安装结束时,系统将重新启动。
第三阶段:修改主操作系统的引导加载程序
在启动阶段,GRUB仅显示主操作系统。这是正常的,因为我们没有向引导加载程序指定辅助操作系统。继续启动并登录到主操作系统。
以root身份登录并打开终端后,我们需要修改GRUB的配置文件,即/etc/grub.conf。原始GRUB配置文件读取
# grub.conf generated by anaconda # # Note that you do not have to rerun grub after making changes to this file # NOTICE: You have a /boot partition. This means that # all kernel and initrd paths are relative to /boot/, eg. # root (hd0,0) # kernel /vmlinuz-version ro root=/dev/hda3 # initrd /initrd-version.img #boot=/dev/hda default=0 timeout=10 splashimage=(hd0,0)/grub/splash.xpm.gz title Master (2.4.7-10) root (hd0,0) kernel /vmlinuz-2.4.7-10 ro root=/dev/hda3 initrd /initrd-2.4.7-10.img
现在,添加行以标识辅助操作系统。
# grub.conf generated by anaconda # # Note that you do not have to rerun grub after making changes to this file # NOTICE: You have a /boot partition. This means that # all kernel and initrd paths are relative to /boot/, eg. # root (hd0,0) # kernel /vmlinuz-version ro root=/dev/hda3 # initrd /initrd-version.img #boot=/dev/hda default=1 timeout=10 splashimage=(hd0,0)/grub/splash.xpm.gz title Master (2.4.7-10) root (hd0,0) kernel /vmlinuz-2.4.7-10 ro root=/dev/hda3 initrd /initrd-2.4.7-10.img title Red Hat 7.2 Guest (2.4.7-10) root (hd0,4) kernel /boot/vmlinuz-2.4.7-10 ro root=/dev/hda5 initrd /boot/initrd-2.4.7-10.img
辅助操作系统的标题是任意的。在本例中,我们将其称为Red Hat Guest (2.4.7.10)。
root参数应读取(hd0, 4)。这意味着主硬盘,在GRUB术语中称为hd0,以及第五个分区,因为GRUB从0开始计数,而不是从1开始计数。
内核参数应读取/boot/vmlinuz-2.4.7-10 ro root=/dev/hda5。此行标识辅助操作系统将启动的内核的位置,该内核将以只读方式挂载,并且根分区为/dev/hda5。如果您计划使用不同风格的Linux,则必须确定这些文件的名称。这不是一个困难的步骤,因为Linux发行版通常无论如何都将它们存储在/boot目录中,并且名称相似。
initrd参数指定操作系统的根镜像的位置。这与上面讨论的内核参数类似。同样,如果您计划使用不同的Linux发行版,则必须自行确定此文件的名称。
如果我们希望引导加载程序默认设置为辅助操作系统,则必须将default参数修改为1,这意味着我们列表中的第二个选项。
完成所有这些操作后,保存文件。无需运行程序来重新读取此文件;GRUB会在启动时自动读取它。
附加说明:如果您知道要用作辅助操作系统的Linux发行版的布局,则可以在第一阶段之后立即执行此步骤。
在我们重新启动系统后,GRUB应显示主操作系统和辅助操作系统作为可选择的选项。我们应选择辅助操作系统并登录。
此时,我们执行镜像的所有必要设置程序。按照我们示例的思路,安装用于Linux的DB2和先决程序。在我们对设置感到满意后,我们可以重新启动并继续执行第五阶段,创建镜像。
重新启动机器并选择主操作系统,并以root身份登录。因为我们必须将文件的镜像保存在更大的数据磁盘中,所以我们需要挂载它。从终端窗口,输入
mount /dev/hdb1 /mnt/data
(这里我们假设/dev/hdb1已正确分区并格式化为Linux文件系统。)然后我们创建辅助操作系统的镜像。同样,从终端窗口键入
dd if=/dev/hda5 of=/mnt/data/myimage.img
根据硬盘的速度和要克隆的分区的大小,此过程可能需要15到30分钟不等。
我们如何将辅助操作系统的镜像恢复到分区?假设我们已经完成了对操作系统及其已安装应用程序的实验,并且我们希望将其恢复到原始状态。这是我们将要做的
将机器启动到主操作系统。
以root身份登录,打开终端并使用mount /dev/hdb1 /mnt/data挂载数据磁盘。
使用dd if=/mnt/data/myimage.img of=/dev/hda5恢复镜像
恢复应花费与创建镜像所花费的时间大致相同的时间才能完成。在此步骤之后,重新启动机器并从GRUB中选择辅助操作系统。确保将镜像恢复到您最初从中创建它的同一分区,或者恢复到与原始分区大小相同的分区。请记住,可以将此镜像传输到配置相似的机器。
现在我们有了一个完全配置的系统,其中包含用于管理辅助操作系统及其镜像的主操作系统,这如何使实验室系统管理员的生活更轻松呢?
按照上面的场景,想象一下现在是星期五下午,Linux的DB2课程刚刚结束。讲师和学生已经回家,留下两位倒霉的实验室管理员来准备下周课程的30台PC。如果他们在每台系统上重新安装操作系统和应用程序,即使他们同时操作几台PC,也可能至少需要四个小时,假设每台PC的接触时间为十五分钟。最重要的是,他们可能会在手动设置期间通过印刷错误错误地配置某些参数。
但是,使用上述方案,一个管理员可以在两小时内设置好实验室。他会将每台机器启动到其主操作系统,执行脚本以重新创建辅助操作系统,并自动关闭PC并在当天离开。在每台PC上重新创建辅助操作系统最多需要大约半小时,并且在启动过程后无需手动干预。
如果像许多培训中心通常的情况一样,学校提供几种不同类型的课程,每种课程都需要其独特的配置,则该方案的价值将更大。手动准备计算机需要系统管理员精通学校使用的每种软件的安装。或者,学校将需要几位在他们教授的每种软件方面具有专业技能的管理员。使用系统镜像的方法,系统管理员可以重新创建镜像,而无需具备应用程序本身的工作知识。
上述方案在与辅助操作系统相同的硬盘上安装了主操作系统。由于学生拥有对辅助操作系统的root访问权限,因此仍然存在恶作剧的空间,例如,学生可能会删除主分区。
为了解决这个问题,我们可以创建一个单磁盘Linux系统,其中包含裸机实用程序,而不是主操作系统。管理员无需从引导加载程序中选择主操作系统或辅助操作系统,只需从软盘启动并从存储区域启动系统镜像的重建。可用于此目的的此类迷你发行版之一是Tom's Rootboot(请参阅资源)。
从这种方法可能产生的一种诱惑是使用dd来重新创建整个硬盘,而不是仅恢复硬盘上的分区。虽然现在可以使用启动软盘来执行此操作,但这不一定是好主意,因为重新构建整个硬盘是一个更长的过程。
将系统镜像保留在每个本地硬盘驱动器上是有效的,因为它始终可用于检索。不利的一面是,它会占用硬盘驱动器上的空间并且容易被删除。因此,建议将系统镜像的备份保存在网络文件系统上,可以使用NFS,CIFS或FTP从主操作系统或启动软盘访问。
担心更精明的学生会修改本地硬盘上维护的镜像的偏执系统管理员应为这些镜像创建校验和。校验和可以挂载在只读网络文件系统上。主操作系统或管理软盘可以读取这些校验和以验证镜像的完整性。
另一种方法是压缩镜像,创建安装实用程序并将其刻录到可引导CD。如果整个镜像适合700MB CD-R分配的有限空间,这是可行的。或者,可以使用可引导DVD来完成,但这目前是不切实际的。
现在,对于辅助组件:学校实验室中的PC通常需要配置其网络。这可以通过在镜像上设置DHCP客户端并在活动网络上拥有DHCP服务器来轻松完成。此外,由于学生可能需要使用其个人帐户登录,因此可以将镜像设置为LDAP或NIS身份验证。
如果您想使用一组预先打包的工具来自动化这些过程的某些部分,请查看SystemImager。SystemImager创建了脚本和界面,以进一步简化将预配置的镜像部署到多台机器。
Kickstart文档可以在以下位置找到
en.tldp.org/HOWTO/KickStart-HOWTO.html
linux.web.cern.ch/linux/aims/aims-doc.html
有关在学校中使用Linux的更多信息,请查看k12linux.org。