2008年4月22日星期二

零命令玩转Ubuntu 8.04 之 安装篇 (准备知识)

也许你看到下面密密麻麻的文字时,就开始头大了——这算哪门子零命令啊!不过请允许我在这里啰唆一番,也许你对下面即将介绍的知识已经了如指掌,但是我还是建议你简单的浏览一番,或者就当是为我挑错。而如果你是第一次安装Ubuntu,下面的这些准备知识是对于顺利地安装Ubuntu必要的。本文并不打算成为百科全书式的介绍,因此下面涉及到很多内容是非常粗略的。想深入了解更多知识,你可以请教搜索引擎,而我的唯一建议是,请尽量看新的文章。Linux的发展日新月异,老旧的Linux文档很可能会对读者认识Linux产生误导。

1. 硬盘分区
一块硬盘可以分为四个主分区,或三个主分区加上一个扩展分区。扩展分区其实只是一个容器,我们实际上并不直接使用扩展分区。在扩展分区内,我们可以继续划分逻辑分区。一般的认为在一个扩展分区内,能分出无数个逻辑分区。正因为有了逻辑分区,一块硬盘才能被分成很多个分区。

另一个可能涉及的概念是活动分区。电脑加电启动时,BIOS会寻找硬盘上有活动分区标识的分区寻找操作系统引导程序。如果一块硬盘上没有活动分区,则即使这块硬盘上有引导程序和完好的操作系统,也将无法成功启动。(关于什么是引导程序将在后面介绍。)一块硬盘上只能有一个活动分区,而且只有主分区才能成为活动分区。

2. Linux中的硬盘分区
与Windows不同,Linux并不是用C, D, E, F等盘符来标识每一个分区的,而是用一系列设备文件来标识——Linux把一切硬件设备都当成文件。比如,Linux下,四个主分区分别对应/dev/sda1, /dev/sda2, /dev/sda3, /dev/sda4。其中/dev是设备文件所在的目录(即,文件夹,下同),sd代表SCSI Disk,a代表第一个SCSI设备,数字1,2,3,4分别代代表了四个主分区。如果你不知道什么是SCSI Disk,不用担心,因为你并不需要知道它究竟是什么。通常,如果你的电脑中只有一块硬盘,那么,这块硬盘一定是/dev/sda。

可能你以前接触过Linux,或曾经在一些老旧的资料中看到过/dev/hda代表第一个主IDE通道上的硬盘,……你现在已经无需知道这些了。因为Ubuntu已经取消了用hd和sd区分不同类型的硬盘的机制,取而代之的,用sda统一代表电脑中的第一块硬盘。

Linux下,/dev/sdaX中的数字X的编号是有限的。在Linux下,最大的分区编号是16。因此,主分区和扩展分区编号占用 1~4,逻辑分区占用5~16。即使你的硬盘中只有一个主分区(如,/dev/sda1)和一个扩展分区(/dev/sda2),剩下的两个主分区编号:/dev/sda3, dev/sda4 也不会分配给逻辑分区。第一个逻辑分区一定是从/dev/sda5开始编号的。这点与Windows下盘符的编制类似。如:A盘一定是3.5英寸软驱,B盘一定是5.25英寸软件,而从C盘开始才是硬盘分区。即使电脑上没有软驱,第一个硬盘分区的编号也是C,而不是A。

3. 引导程序与MBR
引导程序是负责将操作系统的内核从硬盘上加载到内存中的程序。在使用Windows的时候,我们似乎从没有关心过引导程序。不过安装过双Windows系统的读者一定认识Windows的引导程序——即使你从来没有意识到这一点。Windows的引导程序叫做OS Loader,即操作系统加载器,负责在启动的时候根据boot.ini中的配置信息,在屏幕上显示操作系统选择菜单,然后根据用户的选择引导合适的操作系统。

Linux下有两种引导程序:一种叫做Lilo,一种叫做Grub。Lilo是一个非常经典的引导程序。最初因为它不支持引导位于1024柱面后的Linux内核,而被Grub所取代。新版的Lilo已经能够支持引导1024柱面后的Linux内核了。现在,几乎所有的主流发行版都使用Grub作为默认的引导程序。Linux的引导程序与Windows的OS Loader类似。比如,Grub的作用就是负责读取配置文件(menu.lst),显示操作系统的选择菜单,并根据用户的选择引导合适的操作系统。

MBR,又称主引导记录,位于硬盘的第一个柱面的第一个磁道的第一个扇区中。大小为512B,引导程序就位于MBR中。BIOS在开机过程中,会读取并运行MBR中的引导程序,由它来加载操作系统内核。同样位于第一个柱面的第一个磁道的第一个扇区中的还有主分区表。因为主分区表的大小有限,因此只能存下四个分区的信息,这也是一块硬盘只能分为四个主分区的原因。也许你也猜到了,还有一个叫做“扩展分区表”的东东,位于扩展分区的最前面,保存了逻辑分区的信息。

Linux安装时,通常会把Grub安装到MBR。这样,你就可以用Grub同时引导Linux和Windows了。

4. 文件系统和SWAP
在一个硬盘分区可以使用之前,必须格式化成特定的文件系统。Windows下常见的文件系统有FAT32和NTFS。一些U盘的文件系统还可能是FAT(16)格式的。关于FAT(16),FAT32和NTFS这三种文件系统之间的区别,你只要知道FAT(16)支持的最大单文件为2GB,FAT32支持的最大单文件为4GB,而NTFS则可以支持大于4GB的单个文件。

Linux支持很多种不同类型的文件系统。Linux能够对FAT16/32和NTFS进行读写。但是因为这两种文件系统不支持Linux文件权限,因此Linux操作系统无法安装在这两种文件系统的分区中。常见的用于安装Linux的文件系统主要有EXT3, ReiserFS, XFS, JFS等。关于Linux支持的文件系统,我可以列出常常的一串来。不过你知道这4种文件系统就足够了。通常我们都会使用EXT3作为默认的文件系统。关于各种文件系统孰优孰劣的争论,实在是太多了,我不想对加评论。我的个人看法是,我们使用Ubuntu是作为桌面系统来使用的,大多数情况下,文件系统的性能并不是我们所需要考虑的大问题。也许你会看到很多对EXT3的负面评价,但是我可以告诉你,EXT3是最老牌,最久经考验的Linux文件系统,所以选择它没错。事实上,如果这篇文章介绍的是Gentoo Linux,我会推荐ReiserFS的。因为ReiserFS处理大量小文件的性能非常出众。(你可能还会见到一种叫做EXT2的文件系统。正如其名字所暗示的那样,EXT3是EXT2的升级版本。)

Linux Swap,即Linux交换分区,也是一种文件系统,它的作用是作为Linux的虚拟内存。在Windows下,虚拟内存是一个文件: pagefile.sys,而Linux下,虚拟内存需要使用独立分区,这样做的目的据说是为了提高虚拟内存的性能。通常,虚拟内存的大小设置为物理内存的1~2倍。(下面的分区建议中会更多的讲述Linux交换分区的问题。)

5. Linux文件结构,挂载与分区建议
Windows的文件结构是多个并列的树状结构,最顶部的是不同的磁盘(分区),如:C,D,E,F等。Linux的文件结构是单个的树状结构。最顶部的为根目录,即 / 。在根目录下,分为多个子目录,包括/bin,/boot,/dev,/etc,/home,/lib,/media,/mnt,/opt,/proc,/root,/sbin,/tmp,/usr,/var等。这些目录的具体作用我就不做详细介绍了。磁盘分区都需要挂载到目录树中的某个目录上才能进行读写。

显然,根目录是所有Linux的文件和目录所在的地方,需要挂载上一个磁盘分区。上面还提到,Linux交换分区也需要独立使用一个分区,因此,安装一个Linux至少要两个分区。(事实上只使用一个分区安装Linux也是可能的,而且,如果电脑的物理内存足够大,交换分区并不是必须的。不过本文不打算介绍这个高级话题。)

在不同的Linux安装教程中,不同的作者阐述了各种不同的分区建议,本教程也不例外。以下的一些建议有很多包含了强烈的个人喜好,因此读者并不一定要完全按照我的建议进行分区,选择最适合自己的方案才是最好的。尽管如此,我还是希望读者能够参考一些我下面的一些建议。

  • /boot:在很多老旧的教程中,都会让用户在/boot目录上挂载一个大小为100MB左右的独立分区,并推荐把该/boot放在硬盘的前面——即1024柱面之前。事实上,那是Lilo无法引导1024柱面后的操作系统内核的时代的遗物了。当然,也有作者宣称,独立挂载/boot的好处是可以让多个Linux共享一个/boot。
    其实,无论是基于上述的哪种理由,都没有必要把/boot分区独立出来。首先,Grub可以引导1024柱面后的Linux内核;其次,即使是安装有多个Linux,也完全可以不共享/boot。因为/boot目录的大小通常都非常小,大约20MB,分一个100MB的分区无疑是一种浪费,而且还把把硬盘分的支离破碎的,不方便管理。另外,如果让两个Linux共享一个/boot,每次升级内核,都会导致Grub的配置文件冲突,带来不必要的麻烦。而且,不独立/boot分区仅仅占用了根目录下的大约20MB左右的空间,根本不会对根目录的使用造成任何影响。
    值得注意的是,随着硬盘容量的增大,无法引导Linux内核的现象再次出现,这也就是著名的137GB限制。很遗憾,Grub是无法引导137GB之后的分区中的Linux内核的。如果你不巧遇到了这样的情况(我就遇到过),你就要考虑把/boot独立挂载到位于137GB前方的独立分区中,或者索性就把Linux的分区都往前移动,让根目录所在分区位于137GB之前。

  • /usr/local:建议把/opt,/usr或/usr/local独立出来的教程,基本上也是非常老的了。使用Ubuntu时,我们一般都是使用系统的软件包管理器安装软件,很少自己编译安装任何软件。而建议独立/usr,/opt,/usr/local的理由无非是为了重装系统时不再重新编译软件而直接使用早先编译的版本。不过对于大多数普通用户来说,这个建议通常是没有意义的。

  • /var:建议把/var和/tmp独立出来的教程通常是面向服务器的。因为高负载的服务器通常会产生很对日志文件,临时文件,这些文件经常改变,因此把/var,/tmp独立出来有利于提高服务器性能。我们用Ubuntu是做桌面的,甚至有些用户根本从来没有关心过系统日志这玩意儿,所以根本没有必要独立的为/var和/tmp挂载分区。

  • /home:这可能是唯一一个值得独立挂载分区的目录了。/home是用户文件夹所在的地方。一个用户可能在/home/user中存放了大量的文件资料,如果独立挂载/home,即使遇到Ubuntu无故身亡的尴尬局面,也可以立刻重装系统,取得自己的文件资料。因此,/home是唯一可以考虑独立挂载分区的目录。


看了上面的一些介绍,你可能已经知道我的建议了:

双分区方案:
/ :至少3GB,建议根据实际情况,尽可能多分一些——特别是喜欢玩各式软件的读者。
swap:物理内存小于等于 512MB,建议分配实际物理内存容量2倍大小的SWAP;物理内存大于512MB,建议分配与物理内存等容量的SWAP。

三分区方案:
/ :至少3GB,建议根据实际情况,尽可能多分一些——特别是喜欢玩各式软件的读者。
/home:根据实际需要分配1GB~100GB或更多,酌情处理。
swap:物理内存小于等于 512MB,建议分配实际物理内存容量2倍大小的SWAP;物理内存大于512MB,建议分配与物理内存等容量的SWAP。

另外还要说明的一点是,有些老旧的教程中建议把Linux安装在主分区中,或在/boot下挂载一个主分区。事实上,这也是不需要的。Linux的所有分区都可以位于逻辑分区中。所以不要再为这些旧教程所误导了,不要再浪费有限的主分区了,放心的把Linux安装在逻辑分区中吧!

准备知识介绍就这么多,是不是已经看得昏昏欲睡了?好吧,我就不催眠各位了,下面我们就开始安装Ubuntu!

7 条评论:

  1. 写的很好呀 :)
    swap的部分其实即便有8G内存也还是得分配交换分区,因为有些程序无视物理内存大小,启动时就会往swap写数据

    p.s.俩星期没上网,憋死了 :P

    回复删除
  2. 老兄怎么不写个网络安装教程呢?

    回复删除
  3. venj,你好。我非常喜欢你的网站,很多文章也都看得很仔细,感觉很有用。谢谢你 提供这么好的资料。
    看到这篇文章时,感觉有的地方有些问题:
    1.硬盘分区,扩展分区下再划分的逻辑分区其实并不是无限制的,具体可以在Linux下man fdisk查看一下,那里有非常详细的介绍。
    2."BIOS会寻找硬盘上有活动分区标识的分区寻找操作系统引导程序。"这个动作不是BIOS去做的,而是MBR做的。MBR里有个主分区表,MBR会用自己的bootloader去检索这个主分区表并找到其中的活动分区,然后决定从这个活动分区开始启动。

    回复删除
  4. 3.swap分区的作用不仅仅是虚拟内存,如果要和Windows类比的话,swap大致相当于Windows系统的pagefile.sys和heiberfil.sys,前者是虚拟内存,后者是休眠时保存当前内存信息的,这也是为什么swap至少需要一个内存大小的原因。

    回复删除
  5. 感谢你纠正我的错误。 :)

    回复删除
  6. 关于分区数量,记得以前看到书上写的是分区编号不能超过16。刚看了man fdisk:
    IDE disks can have up to 63 partitions, SCSI disks up to 15.
    我要纠正一下过去错误的认识了。 :D

    回复删除
  7. 真的很感谢啊~~我是个初学者,写的很仔细~~~

    回复删除