如何在单个硬盘驱动器上构建双引导 Linux 系统
Chuks Onwuneme(
[email protected]),程序员,IBM
Farhan Khawaja(
[email protected]),软件专家,IBM
2002 年 4 月
有可以使用的多个 Linux 安装允许您方便地测试同一个程序的不同库,观察您的程序如何与其它程序交互,或者只是到处调节一下参数看看会发生什么。这对开发和测试 — 以及客户支持迟早有用。假定您没有许多机器吗?别担心 — 在单台机器上安装多个 Linux 实例是件容易的事,因为您将很快从这篇技巧中发现这一点,这篇技巧文章是由 IBM 实习生 Chuks Onwuneme 和 Farhan Khawaja 编写的。
作为 IBM Developer Relations 的合作人员,我们的任务涉及帮助技术支持人员回答客户的问题(换句话说,我们帮助 Help Desk)。我们主要使用 IBM WebSphere 产品 — 经常遇到的一种情况是需要摆弄机器以重现实际的客户问题。
从文字上说,重现每个问题意味着要有与客户完全一样的系统,当然,通过在每个驱动器上进行分区并运行多个系统来这样做要比针对每个系统使用单独的机器有效得多。因此,好几个月前,我们从每个系统一台机器的方法转换为每台机器多个系统的方法。
现在,我们可以(例如)在同一个操作系统上运行 IBM WebSphere Application Server 的两种不同版本。要做的只是将大驱动器(我们实验室的驱动器通常是 19 G)分成两个分区,在每个分区上安装操作系统,然后在每个分区上安装 Websphere Application Server 的一个版本。这样,我们就有了运行在一台机器上的相似环境的多个副本。
在 IBM 实验室中,我们使用各种操作系统,包括几种 Microsoft Windows 和 NT 衍生系统(Windows 2000 Server 和 Professional,NT Server 和 NT Professional)以及 AIX 和 Linux(Red Hat 6.2)。
Microsoft 系统包含了一个用于多个操作系统安装的实用程序,并且很容易实现了转换。但是,由于我们是 Linux 新手,Red Hat 系统给我们带来了一些麻烦,特别是因为难以找到简便、清晰的文档来指导我们。因而我们提供了这篇技巧文章,希望那些可能面临同样问题的 Linux 新手会方便地找到该文档,并且发现它清晰、精练和易于使用。如果我们成功了,请一定要告诉我们(可以在本文的顶部和底部找到我们的电子邮件地址)。
我们的技巧文章涉及在单个驱动器上安装同一 Linux 发行版的多个实例(我们在实验室中使用 Red Hat)。但是,只要稍作调整(或者在参考资料中所列出的某些文档的帮助下),对于创建一台双引导不同的 Linux 或者 Linux 和非 Linux 操作系统组合的机器来说,应该是没有问题的。
在这篇技巧文章中,我们使用 Red Hat 的一个老版本,因为我们曾尝试构建与客户完全相同的系统。因此,这里使用的 Red Hat 版本是几年前的,并且使用较早的 2.2 内核。较新的 Linux 内核处理多引导的方式有所不同。出于安全性原因,在任何情况下,您应尽可能升级到较新的 Linux 2.4(.x) 内核版本,则这样做是明智的。另外,现在大多数 Linux 安装都提供 GRUB 来替换 LILO 或作为对它的补充。这一特性提供了处理 Linux 多引导功能的更先进方法。这样,如果您正在使用不用 LILO 的较新版本,则下列技巧可能不会十分有用 — 但是如果您的版本使用 LILO,则它是不可缺少的。
Red Hat 双引导:安装指令
当您准备开始本过程时,首先关闭系统,然后重新启动它。接着将 Red Hat Linux CD 放入驱动器。
Red Hat Linux 安装例程将指导您完成一个很简单的安装过程。您将必须完成一些基本的系统配置,如选择缺省语言以及键盘类型等。输入正确的信息,直到出现“Partitions”屏幕。
当该屏幕出现时,单击“add”按钮,然后选择“Linux Native”作为操作系统的类型。对于“size”,输入 16(兆字节),然后选择 /boot 作为分区类型。下面给出了其余的配置,并且对于特定分区,可以通过重复上面的指令来完成配置。
/boot sda1 16M Linux native
/ sda5 1024M Linux native
swap sda6 256M Linux swap
/var sda7 200M Linux native
/tmp sda8 200M Linux native
请注意,这些目录位置是针对 SCSI 驱动器的。对于 IDE 驱动器,只要简单地用 h 替换 sdal 中的 s(让您的 hda1 作为 /boot 驱动器,让 hda5 作为 root 驱动器等)。
还请注意,上面使用的大小适合于我们的硬件 — 它们并不是强制性的。您可以灵活地选择适合您硬件的任何大小,特别是因为当前较新的硬件可以支持各种配置。但是,您并不要将太多空间分配给“/boot”分区,因为大部分空间将最终被浪费 — 在最新的硬件上,您将可能想要一个比我们的引导分区还小的引导区。同样,对于其它分区可以使用其它大小。
安装标记 2
现在,您准备安装 Linux 内核的第二个实例了。遵循下列简单原则:
再次将 lilo 安装在主引导记录(Master Boot Record (MBR))上
使用线性方式(对于 SCSI 驱动器严格需要)
使几个内核参数保持为空
初始安装分区应该仍然标记为“Not Set”。将它们保留为 Not Set,然后通过单击“add”并按照上面指定的那样安装以添加 5 个新的分区。只需要一直添加新分区,不需要删除或编辑以前安装的分区。
其余安装保持不变。可以使用您喜爱的任何名称(我们使用 linux2)。但是,如果标号有多个字,请确保用引号将它们括起来(即,如果想保留空格,请使用“Linux 2”)。当然,请确保使用与第一个不同的名称来标记第二个安装。
安装之后,系统重新引导并出现提示。按 Tab 键:这会显示第二个 Linux 安装的标号。输入“linux2”(或者您为第二个映象起的任何名称),然后按 Enter,这将调出您刚安装的第二个 Linux 系统。
编辑 lilo.conf
接下来,我们将编辑 LILO(Linux 装入器)配置文件 lilo.conf,以添加一个记录告诉 Linux 关于我们完成的第一个安装的信息。
要做到这一点,转至 /etc 目录然后用您喜欢的编辑器打开 lilo.conf 文件(您可能想首先建立一个备份副本,只是为以防万一)。lilo.conf 代码类似于:
boot=/dev/sda #this points to the boot device
timeout=300 #if no activity in the specified time, load default image
linear
prompt
Default=""Linux2"" #Linux1 will be displayed at the prompt
Vga=normal #video mode
read-only
map=/boot/map
Install=/boot/boot.b
image=/boot/vmlinuz=2.2.14-5.0 #location of boot image
Label=""Linux2"" #label
initrd=/boot/initrd-2.2.14-5.0
Root=/dev/sda10 #location of root partition
注:计算机忽略注释(由 # 或者井号开头)。这里包含它们以便您能正确了解每一行的用途 — 不必在您系统上的 lilo.conf 文件中包含这些注释,除非想保留它们以供参考。
同样,如果使用 IDE 驱动器,记住使用 hda 来替换 sda。
配置 LILO 的另一种方法
这里是一种编辑 lilo.conf 文件的替代方法。
打开一个终端窗口,然后转至“/root”目录并输入 linuxconf。这会把您带到 Linux 命令窗口,在那您可以配置系统。
向下滚动直到 Boot mode。在“boot mode”下,您应该看见配置 LILO 的选项。选择菜单上的第二项“Configure LILO Linux configurations”,然后单击“LILO Linux configurations”选项卡。
单击“Add”。然后可以添加其它 Linux 引导分区和内核文件的位置。如果不确定要在每个字段添加什么信息,在输入前,请查看已经列出的内容。
看一下上面的 lilo.conf 文件,您会注意到它属于标号为 linux2 的 Linux 安装,即,安装过程期间我们安装的第二个。现在,要使 LILO 双引导安装在 /sda5(对于 IDE 驱动器是 /hda5)分区上的第一个 Linux 实例,则紧接着最后一行添加下列内容:
image=/boot/vmlinuz=2.2.14-5.0
label=""Linux1""
initrd=/boot/initrd-2.2.14-5.0
root=/dev/sda5
因此,编辑以上代码之后,最终的文件应该类似于:
boot=/dev/sda
timeout=300
linear
prompt
default=""Linux2""
vga=normal
read-only
map=/boot/map
install=/boot/boot.b
image=/boot/vmlinuz=2.2.14-5.0
label=""Linux2""
initrd=/boot/initrd-2.2.14-5.0
root=/dev/sda10
image=/boot/vmlinuz=2.2.14-5.0
label=""Linux1""
initrd=/boot/initrd-2.2.14-5.0
root=/dev/sda5
请确保如以上最后一行所完成的那样指定 root 路径,— 这一点非常重要。还要确保列出您在安装期间使用的标号。
现在保存文件,然后在提示符上处输入命令 lilo。这将重新编译该文件,然后保存更新的配置。
注意:image/kernel 对于这两个安装是相同的(/boot/vmlinuz=2.2.14-5.0)。由于我们正在进行的是完全相同的系统的双引导,正在从同一张 CD 上安装,所以有相同的映象文件。如果正在安装不同的发行版,则这些文件将会不同。
现在我们快要完成了。接下来,您想从终端发出重新引导命令:shutdown -r now。当计算机重新启动时,出现 LILO 提示。按 Tab 键,您会看到:
Linux2 Linux1
Boot:_
在 boot 提示符上,输入 Linux1 以引导进我们完成的第一个 Linux 安装。引导起来后,需要进入其 lilo.conf 文件 — 这与我们刚为第二个映象编辑的配置文件非常相似,唯一的区别是缺省映象是 /sda5(如果有 IDE 驱动器,则为 /hda5),带有标号“linux1”。我们将象对待另一个文件一样编辑这个文件,在结尾处添加下列行:
image=/boot/vmlinuz=2.2.14-5.0
label=""Linux2""
initrd=/boot/initrd-2.2.14-5.0
root=/dev/sda10
这样,整个文件的代码将类似于:
boot=/dev/sda
timeout=300
linear
prompt
default=""Linux1""
vga=normal
read-only
map=/boot/map
install=/boot/boot.b
image=/boot/vmlinuz=2.2.14-5.0
label=""Linux1""
initrd=/boot/initrd-2.2.14-5.0
root=/dev/sda5
image=/boot/vmlinuz=2.2.14-5.0
label=""Linux2""
initrd=/boot/initrd-2.2.14-5.0
root=/dev/sda10
保存该文件,然后通过在命令提示符上输入 lilo 来重新编译它。再次发出重新引导命令;系统启动后,还会提示您选择 LINUX 引导。这次按下 Tab 键时,您将看到以下列表:
LINUX BOOT:
Linux1 Linux2
Boot:_
这就完成了!您刚构建了一个双引导 Red Hat Linux 系统。要在不同分区上安装任意多的映象或者安装应用程序软件的不同版本(正如我们对 WebSphere Application Server 和 DB2 所做的那样),现在这对您来说已经是小菜一碟了。
参考资料
第一次对驱动器进行分区可以不再伤脑筋了。PowerQuest 提供了一个称为 Partition Magic 的产品使该过程更简便。
VCOM 提供了一个竞争性产品,称为 System Commander 2000,它差不多完成相同的任务。
本技巧文章中的示例都使用 LILO。您可能还想尝试 GNU GRUB 多引导的引导装入器,它是一种较新的实用程序,大部分作用相同但具有更多功能。
如果以前从未安装过 Linux,您会发现 Eric Raymond 编写的 The Linux Installation HOWTO 有无可估量的帮助。关于故障排除或快速查看安装帮助,请查看 HOWTO 的第 6 部分 Installation In Detail。
LILO 的目的在于将 Linux 和 Windows 安装在一起。LInux LOader(因此称为 LILO)有出色的文档。但是,关于如何完成这一任务的预览(或者快速版本),请参见 LILO mini-HOWTO 的第 3 项(The Simple Configuration)。
关于安装一台带有 Linux 和其它操作系统的多引导机器的建议,请阅读 Operating system flexibility(developerWorks,2000 年 12 月)。
Win95 + WinNT + Linux multiboot using LILO mini-HOWTO 详细说明了如何使用 LILO 来代替使用 NT 的操作系统装入器以多重引导混合 Windows 和 Linux 的环境。
Dual booting Win2K and Linux 一文概述了一种策略,显示 Linux 如何识别 NTFS 分区为可引导的分区。
假定不是多个 Linux 产生的问题,而是多个磁盘的问题(无论它们是否装有多个 Linux)?那么,您可能想看一下 Multi Disk System Tuning HOWTO。
不想每次必须重新引导以从一个 Linux 映象切换成另一个?别担心!Development for Multiple Linux Distributions mini-HOWTO 概述了一种用 chroot 的诀窍,它可以帮您解决难题。
有一种高端产品让您同时运行多个操作系统 — 从而,比如说,可以在 Linux 下运行 Windows 应用程序(!)— 那就是 VMware。
最后,为什么只停留在把两个、三个或十个数量不多的 Linux 安装在一台机器上呢?关于怎样做到这一点,请阅读 Earthweb 的 developer.com 上的 IBM 德国的程序员在一台大型机上运行 41,400 个 Linux 副本。
关于作者
Chuks Onwuneme 目前在德州大学 Arlington 分校学习计算机科学与工程学士课程。他期望在 2002 年 5 月完成该学位。Chuks 于 2000 年 6 月加入 IBM,开始是奥斯汀中心的 e-Business Operating System Solutions 的实习生,然后成为达拉斯的 Developer Relations, Internet and Network Computing 的合作人员。您可以通过
[email protected] 或外部电子邮件
[email protected] 与 Chuks 联系。
Farhan Khawaja 是达拉斯的 IBM 计算机科学与工程的实习生,他目前在德州大学 Arlington 分校攻读计算机科学与工程学士学位。作为一名程序员,他使用 Java、C++、ASP 和 Visual Basic 进行开发。他的兴趣包括 Linux、体育运动和听音乐。可以通过
[email protected] 与 Farhan 联系。