当前位置:首页 » 业界资讯 » 网络评论

在一台电脑上安装145个操作系统

...

原作者: saikee 译者: cccccc 原文链接

这145个系统是:-

3 Dos

5 Windows

137 Linux

我也在一台 Darwin x86 电脑上安装了大多数的基于PC的BSD和Solaris系统,但是这些系统不喜欢和其他一大堆的系统共存,所以我只有把它们装到另一台电脑上直到我找到一个解决这个技术问题的方法为止。

这个指南只有三个步骤。

第一步 -一个简单的软件方案

一 个操作系统需要住在一个家里面。对我来说那就是一个分区。我使用一块 2×300Gb Pata 硬盘和一块 2×200 Sata 硬盘,并分了152个分区。通常我把一个操作系统放在一个分区里。作为扩展分区的每个硬盘没有自己的存储空间,一个纯数据分区放置我的个人数据,另一个纯数据分区放置公共引导装载器,还有所有Linux需要的一个Swap分区,最后我除去7个分区留下145个分区放置那145个操作系统。< /p>

第二步 -一个简单的引导方案

我 把 Grub 装入纯数据分区,在任何一个操作系统被安装之前我就建立了一个引导所有分区的引导菜单。当一个分区塞进系统以后立即就变得可引导了。这个方案绝对的简单,听进来很有技术性,在所有的情况下都完美的可用,但对一些电脑用记来说这看起来很非常规。对那些对Grub知之甚少的人来说,它只不是通常Linux里使用的双系统引导装载器而已。另一个相似功能的东西叫Lilo,在2007年初可能有少于40%Linux发行版使用它。

简而言之,我使用Grub去启动145个之中任何一个我选择使用的系统的引导文件。接下来的工作就交给第二个引导文件了,它会启动它的老大。

第三步 -一个简单的安装方案

它真的很简单。我只是把每一个系统安装到一个单独分区。对于微软系统工作稍为多一点,因为我必须安装一个单独的系统,为了让它总能从 “C”盘启动。然后我把带有系统的硬盘移到最后一个分区,编辑Grub菜单文件让它能重新以“C“盘的状态启动。

我的方案依赖于每一个系统的根分区内有一个引导文件。这在每一个微软系统和其它依赖从主分区启动的操作系统都固有这个引导文件。对于 Linux来说这是一个可任意选择的选项。

硬件使用

我的电脑是用市场上便宜的元件自己装配的。没有什么值得写的。就是一个普通电脑用户认为在5年之后就会落伍的平均装备,我只能负担得起这样。

主板: Asrock 939NF4G-SATA2

CPU: AMD 939 64 +3200

内存: 1025Mb

显卡: 主板集成 NV44 graphics DX9.0 VGA

硬盘:2×300Gb Maxtor 133/Mb/s Pata Diamond Max 10

2×200Gb 150Mb/s Sata-I Maxtor Diamond Maxline III

声卡: SoundBlaster 5.1

网卡: 一般 Realtek 8139 10/100 Entrnet

键盘: Generic PS/2 keyboard

鼠标: Generic PS/2 mouse

必要工具

(1) 一张可引导的Grub软盘或CD。

(2) 一张Linux Live CD. 理想的是有Grub集成在里面那种。

(3) 一张Dos 6 或者更高版本的引导软盘,带fdisk.ext的那种。

(4) 一张Win2k 或 XP 安装CD

项目(1)的引导盘制作(1)和如果使用其它的工具请看我签名上的链接。

技术细节

硬盘注意事项

大多数微软系统是设计为安装在主分区,而一个硬盘最多可以有4个主分区。为了得到更多的分区用户“必须”要放弃一个主分区,而把它作为一个扩展分区。在Linux中,一个 Pata (或者 IDE)硬盘最多可以有63个分区,对于Sata 或 SCSI的限制是15个。

分区数加上硬盘自身总共组成64和16个设备。

扩展分区也消耗一个设备名称,但是不能用于存储,因为它只是定义逻辑分区开始和结束点的边界。

Linux在主分区和逻辑分区都可以安装和引导,基于这一点把主分区分给微软系统是有利的。

在任何一个硬盘上,Linux通常把逻辑分区的每一个分区命名为第五分区。因此,理论上在一个 Pata硬盘上,就是hda,主分区最大的可以使用hda1, hda2 和 hda3 三个名称,hda4作为扩展分区支持最多59个逻辑分区(从hda5到hda63)。

在实际中,一些Linux阻止显示第60个以后的分区,还有一些发行版,像红帽家族,不显示超过15以后的分区,甚至它们自己被安装在这些限制之后也是一样。

你最多可以从2 Pata 和 2 Sata得到2*(63+15)= 156个分区。因此如果想要我可以再搞4个多余的分区。

分区方案

我让微软系统占据所有的主分区,Linux基本上全放在逻辑分区。一个swap分区,当然也在逻辑分区,为所有的Linux服务。对 BSD 和 Solaris 系统我使用分离的硬盘。

作为一个原则,我通常把一个操作系统装到一个单独的分区。这使得维护,引导和理解都更容易。这可能不是最优的选择,但是它对我安装的每一个Linux都有用。

这是我分配给每个系统的分区大小

(a) Dos 1或2Gb (主分区, 格式 fat16 或 fat32)

(b) XP 和Vista 25Gb和 20Gb (主分区, 格式 NTFS)

(c) 我使用的Win2k 15Gb (主分区, 格式 NTFS)

(d) 我使用的Win98 5Gb (主分区,格式 fat32)

(e) Linux 5Gb (大多数) 和 10Gb ( 少数大的发行版本) (逻辑分区, 不是 Ext3 就是 Reiserfs )

(f ) 一个swap 1 Gb 所有 Linux 共用

(g) 巨大的个人数据 95Gb fat32

实际大小见fdisk -l表一中的输出。

我 使用Linux专有的分区工具“cfdisk”,“fdisk”作为替补队员。它们都是一个Linux Live CD所带的标准工具。我分别指定83,82,6,C,7(为一个原产的Linux),swap,fat16,fat32和NTFS分区类型号码。使用 cfdisk分割硬盘分区的默认类型是83,安装的每个Linux都认出了它。

我从不自己格式化分区,因为每一个安装程序都不会相信我,它们喜欢自己格式化自己的家。

一些日子过后我开始使用一个叫“gparted”的自由分区工具,它已经被分支进了“Parted Magic”。它提供免费下载的ISO文件,可以烧到CD上使用。

我相信以正确的格式准备好分区是一个好的策略,以便于让安装程序认出来。如果你让安装程序的生活好过一点。作为回报它会很少给你找麻烦。

所有引导方案成功的老妈 -纯数据分区的Grub

这实在只是我的一个建议,并且它对一个普通的Linux用户完全是不必要的,普通用户把他/她的手放在他/她第一次偶遇的Grub上,并能让Grub做到我下面说的所有事情。然而如果按我的建议做它会带来好处

(1) Grub 没有放在任何一个操作系统,所以你可以把它当做一个微型操作系统来使用 。

(2) 每个操作系统都能通过使用只有分区差异的基本相同设置的命令间接启动(熟知的链式引导chain loading)。它对所有的操作系统都起作用,不管它是 Dos, Windows, Linux, BSD 或 Solaris.

(2) 每个微软系统和Linux系统都能控制Grub,只要它被安装到了分区上,比方说FAT16或FAT32格式,在它之上每个系统都能读,写和改变它自己的引导菜单。

(3) Grub 唯一的被安排去启动、格式化和安装操作系统的引导程序,甚至在分区创建之前也能引导。这是引导中最爽的事了。

(4) Grub 所在的纯数据区没有进驻操作系统,但是能被任何一个Linux引导。安装在主分区并且引导标志设置为活跃状态的 Dos 或 Windows MBR 也能引导它。

这就很容易理解我的“外”Grub安装的建议不会被任何一个操作系统喜欢了。Grub不能读取NTFS文件系统,所以它应该被装在一个FAT16或 FAT32分区。我把它放在我第一个 Pata硬盘的第三个分区。在Linux中被认为是hda3,我的第一,第二,第三和第四个硬盘分别是 hda,hdc,sda 和 sdb。

把Grub安装到纯数据区涉及以下步骤

(A) 格式化数据分区为FAT16格式。最好的方法是启动一个Linux Live CD,打开一个终端,下达一个格式化分区为FAT16的命令。

命令:

mkdosfs –F16 /dev/hda3

作为选择,分区也可以用一个Dos软盘格式化,从Bootdisk.com下载,用Dos命令提示符命令

命令:

format c:/

,假定hda3之前的分区都是非Dos或隐藏的。

FAT16的使用是经过考虑的,因为在FAT16上Dos不能寻址超过2Gb,不能认出Sata,但是我们仍然能用在那里的Grub去引导电脑上的145个系统。

(B) 接下来的任务是拿到Grub安装需要的三个文件。它们叫stage1, stage1.5 和stage2,在同一个目录,在任何一张支持 Grub的Linux Live CD里都找得到。所以只要启动一张 Live CD,用命令叫Linux报告它们的位置

命令:

find / -name stage1

你会发现这些文件基本上在这些位置

Red Hat, Fedora C2 to C6

/usr/share/grub/x86_64-redhat/stage1

/usr/share/grub/i386-redhat/stage1

Mandriva

/lib/grub/i386-mandriva/stage1

Mandrake

/usr/local/lib/grub/i386-pc/stage1

/usr/lib/grub/i386-pc/stage1

Suse

/usr/lib/grub/i386-suse/stage1

Gentoo, Knoppix, Mepis, Xubuntu, Ubuntu, Kubuntu, Debian

/lib/grub/i386-pc/stage1

Frugalware, Kanotix

/usr/lib/grub/i386-pc/stage1

下 一步是在启动的 Live CD Linux 里面新建一个临时目录,挂载纯数据hda3分区,在里面新建一个/boot/grub 目录,把所有 Grub 的stage1, stage1.5 和 stage2文件拷进去,调用一个Grub 命令行,设置Grub进入MBR,退出。用 Ubuntu CD 举例命令会是

命令:

mkdir /mnt/hda3

mount /dev/hda3 /mnt/hda3

mkdir /mnt/hda3/boot

mkdir /mnt/hda3/boot/grub

cp /lib/grub/i386-pc/* /mnt/hda3/boot/grub

grub

root (hd0,2)

setup (hd0)

quit

重启过后会引导到hda3上,除了一个 Grub 提示命令之外什么也没有。这表示 Grub 现在控制了MBR,连接到hda3分区了,并且如果在/boot/grub 或/boot目录下有一个叫“menu.lst”的配置文件,那么它会控制 Grub。如果 Grub 找不到它,默认会显示一个Grub 提示命令行。

注意有些版本的 Grub ,特别是红帽家族,会被改进读取”Grub.conf”而不是“menu.lst”。

虽然 Grub 用户手册没有说明但是依我的经验,没有任何一个操作系统不能被 Grub 命令引导。乍一看没有什么,但是很少有什么东西能那么简单又那么强大。

(C)现在该是写一个引导145个系统的菜单的时候了。它只是一个必须命名为 menu.lst 的文本文件,放在/boot/grub 子目录下。Grub 用下面的三行引导每一个系统:-

一个“title”声明,在屏幕上显示系统的名称。任何在单词“title”后面的文字会被显示,并且会导致系统的引导除了提醒你这是一个什么系统之外。

一个“root”声明,指定操作系统的根文件夹。也就是说目标系统所在的分区。Grub 从0开始计算每件事,所以要引导一个在第2块硬盘上第9分区的系统命令是“root (hd1,8)”。同样 (hd0,0) 指第1块硬盘的第1个分区。

一个“chainloader”声明,它总以 “+1” 结束。

所以你看到了这也没有什么。甚至像我一样的笨蛋也很应付得来。

为了偷懒我写了一个小程序产生引导菜单,因为它只是在做4个循环,在我这里是每个硬盘来一个循环。

因此我 menu.lst 的开头会像这样

代码:

title Empty @ hda1

chainloader (hd0,0)+1

title Empty @ hda2

chainloader (hd0,1)+1

title Empty @ hda3

chainloader (hd0,2)+1

title Empty @ hda4

chainloader (hd0,3)+1

and so on

无论何时只要我想更新,就编辑菜单,用操作系统的名字代替“Empty”。生活如此简单美丽,如果没有微软系统那额外的工作。这就是我随后的工作。

简单化的安装方案

Linux很容易安装,所以我先写它。

linux 很少需要整理文件系统,因为它使用了一个叫swap的交换分区。因此要为第一个Linux系统准备一个swap分区。从那以后,所有其他的Linux会不说一声谢谢的冲进去使用它。除了使用Linux cfdisk程序创建它之外,你不需要做些其他的什么了,大小约是物理内存的两倍,选择分区类型82。每个Linux 安装程序会知道怎么使用它。它们一些坚持要校验它,其它的问你允许它们格式化它,余下的大多数甚至都不告诉你它们对它做了什么。我在hda5分区创建了一个swap分区,只要安装程序自讨苦吃我就回答“hda5”。

在每一个Linux安装过程中,我们可以“指导”安装程序把Linux放到任何我们想要放的分区。这是通过提名一个分区作为Linux的根分区或 “/” 挂载点。如果没有多于一个分区分给安装程序,它会把Linux目录/boot, /home, /usr…..作为 “/” 的子目录紧接的放进去,所以你只要担心积累的内容是否会耗尽你所有的分区容量。

引导装载器的选择,通常不是 Lilo 就是 Grub,对提议方案来说是无关紧要的。

当涉及到引导装载器的位置时这又是另一回事了。每个Linux 安装程序会让引导装载器安装在不是(a)MBR,就是(b)正在安装的Linux 的根分区。我的提议方案“只有”在后者被选择的情况下才会有用。有些不听话的 Linux 会省略给你一个选择,并偷走MBR的位置。也在可能你正在喝茶,然后按下了一个错误的键而失去MBR。在这种情况下你可以通过启动那张 Live CD 重新要回原始的MBR,开一个终端,打出这些命令去恢复 Grub

代码:

root (hd0,2)

Setup (hd0)

它会逐字的要求 Grub 从指定的根目录 “获得”需要的文件,安装到整个 (hd0) 盘上,没错那就是MBR。

对Linux 安装/引导在硬盘大数字分区或超过137 Gb 之外能力的警告之词

我 安装的系统都能被一个 menu.lst 引导。有些老的发行版对认出16以上的分区有困难,更不要期望更大数字分区的设备名称,有的不能访问超过137Gb的硬盘空间。这些发行版必须安装在小数字分区和硬盘的前137Gb之内。如果你发现某个发行版拒绝引导或安装请看一下我的 menu.lst,检查所知的能工作的分区位置。

Dos和Windows系统

安装微软系统有很多方法。为了简单,容易控制和维护,我推荐作为一个单机独立系统在“C”盘安装每个系统。这就是说在微软系统中不通过NTLDR双重引导。我有一个移动机架系统,所以我可以拔出所有其他的系统而只留下要安装微软系统的那一个硬盘。因此在我的情况下,每个微软系统都是作为第一个可引导的硬盘安装的。一旦安装完成我不改变它的分区位置而是把硬盘放到其他的位置。 Grub 在工作中可以很灵活的重绘硬盘次序,把第一个可引导硬盘的状态重新给回微软系统。

把微软系统安装在“C”盘就是说除了要安装的分区之外没有分区会被安装程序认出来,因而它可以正当的要求得每一个分区状态。如果有一个分区微软系统能认出来,就是说一个 Dos 分区,那么我们可以通过隐藏它来对付,使用 Live CD。如果要隐藏第一个硬盘的第一个分区,不隐藏第二个分区并使它对微软系统可引导,Grub命令是

命令:

hide (hd0,0)

Unhide (hd0,1)

Makeactive

在电脑上隐藏一个分区就不是物理的把分区隐藏起来。只是改变了它的分区类型号。通常是添加一个数字“1”。这样,如果一个FAT32和NTFS分区的类型号分别为 c 和 7,当改变为 1c 和17时,在微软系统中就会被得不可见。不隐藏它就是把数字“1”去掉。这是一个电脑中最古老的诀窍,还是在 Dos 是事实上的操作系统时被发明的,它允许用户引导多个操作系统。

安装微软系统可能需要它自己的MBR。引起我注意的是微软系统共享一个公共的MBR。这个MBR的功能是搜索4个主分区中的每一个,并启动引导标志打开的系统。

作为例子,这里有我在 hdc3 安装 Windows Vista 的简要步骤。

把硬盘 hda,sda 和 sdb 移走,把 hdc 插入先前被 hda 占据的机架位置。现在原来的 hdc3 对 Grub 来说就是 (hd0,2) 了。

启动 Dos 软盘,通过命令在硬盘恢复微软 MBR

命令:

fdisk /mbr

启动 Grub 软盘,隐藏开头两个分区,然后用 geometry 检查硬盘

命令:

hide (hd0,0)

Hide (hd0,1)

Geometry (hd0)

geometry 命令是在安装之前检查所有的东西是否状况良好。Hda3 应该已经为NTFS文件系统创建好足够的类型为7的空间。

安装 Windows Vista 并选择第三分区作为它的家。

安装后重启确认 Vista 是否正常工作。

关机,插上打算供给 Vista 永久的家的硬盘,也就是说有一个叫 hdc 的奴隶硬盘已经在第三主分区位置有一个和 hda3 一样大的分区,插放 Live CD,启动系统,在根用户终端通过命令把 Vista 系统克隆出去

命令:

dd if=/dev/hda3 of=/dev/hdc3 bs=32768

然后我又关机,恢复所有的硬盘,又一次启动 Live CD,用它修正 hda3 中的 /boot/grub/menu.lst,通过下面的入口引导 hdc3 分区

命令:

title Vista @ hdc3

root (hd1,2)

hide (hd0,0)

hide (hd0,1)

hide (hd0,2)

hide (hd1,0)

hide (hd1,1)

unhide (hd1,2)

makeactive

map (hd1) (hd0)

map (hd0) (hd1)

chainloader +1

两 个map声明指示 Grub交换 (hd0) 和 (hd1)的位置,以便当 Vista 启动时它会发现自己仍然按照原来的安装一样处于第一可引导硬盘的位置。5个 hide 声明是必需的,隐藏5个 Dos 和 Windows分区,防止 Vista 看到扰乱它的“C”盘状态。

我对其他微软系统使用相同的原理,设法在同一台电脑里搞上了3个版本的 Dos 和5 个版本的 Windows。更多微软系统能被容纳但是我所有能搞到的就这些了。

结尾注意事项

我 的初衷是学习 Linux,理解它如何工作并会引导它。当看到在 Linux 的世界是这是多么容易和有逻辑,我感觉巨大的惊奇。在使用了这么多年微软系统以后,看起来所有我不能理解的电脑如何工作的问题在 Linux 里面突然变得可以理解,因为 Linux 的系统内部工作是一个公开发表的知识。

人们可以对 Linux 说任何他喜欢的话,但是我2.5年的使用 Linux 教会我使用一个最古老的分区(FAT16)去安置一个陈旧的引导装载器(这里描述的 Grub就是当我开始学习 Linux时,GNU/Grub维护者已经公告停止转移他们的努力到新的 Grub 2去的支持的那个 Grub)去引导我能访问的145操作系统。而方案可笑的简单。

我很感激那些无私的维护和开发开源软件的 GNU/Linux 志愿者。我知道他们中有一些人冒着被抓钱公司起诉的风险工作,因为他们的努力减少了我们对商业软件的依赖。

2.5年以来我见证了 Linux 功能和易用性的巨大飞跃。我也从那么多国家贡献于把这些操作系统带给大众的努力中得到灵感。它们中的很多发行版在技术上很突出。

4#

继续阅读
各款操作系统漏洞安全性大比拼
传谷歌正在开发手机操作系统
发表评论

昵称:
最新评论
暂时没有评论!