磁盘分区介绍

 

磁盘分区介绍


[初级]
译者:Wick
出处:Red Hat Documentation
链接:An Introduction to Disk Partitions
 

- *为译者注
- 尊重他人劳动,分享社会成果。转载请保留文章出处和文中所有链接。

--------------------
        这篇文章来自于Red Hat官方文档,它只是Red Hat Linux安装文档中的一个附录。通篇
浅显的介绍了分区的概念,和Linux分区的简要概括,另外有Linux分区命名规则,GRUB和
LILO安装的一些要点。
        全篇浅显,简单,也是为了方便新手,对于本人来说,起到一个复习和概括的作用。如
果你已经很熟悉分区概念,完全可以一扫而过。

--------------------

        磁盘分区作为个人电脑全景中的一个通用概念,已经存在了相当长的时间。然而对于大
多数购机者而言,由于他们买回来的电脑都已经预装了操作系统,相对而言,很少人理解分
区的工作原理。这一章节就试图解释磁盘分区的原理和应用,以便使得Red Hat Linux系统
安装尽可能的简单。
        如果你已经熟悉了磁盘分区概念,你可以跳过,阅读< 章节E.1.4 为Red Hat Linux创
建空间
>,可以获得更多关于释放磁盘空间的信息,为Red hat Linux作准备。这一章节也
讨论了Linux系统的分区命名规则,与其他文件系统共享磁盘空间,等等相关议题。

E.1 硬盘基本概念


        硬盘的作用非常简单 —— 它们存储数据,并依据命令可靠的检索它们。
        当我们在讨论磁盘分区此类概念的同时,了解一点底层的硬件知识是很重要的。不幸的
是,这样可能很容易让我们在一些细节上越陷越深。因而,这个附录就只是应用一些简单的
硬盘图表来帮助我们理解一个磁盘驱动器在分区的时候,到底发生了什么。
        图E-1,描绘了一个崭新的,未使用过的磁盘驱动器。

       磁盘分区介绍
        [图E-1]
        没有什么可看的,是吧?但是如果我们从基础谈起,它足够了。我们可以说:想要在此
驱动器上存储数据。但是现实表明,现在还不可以这样作。首先,有件事情摆在我们面前……

E.1.1 并非写什么,而是如何去写

        一些计算机老手很可能在第一次尝试的时候,就可能明白了。我们需要格式化(format)
这个驱动器。格式化(可以理解为,创建一个文件系统)过程在硬盘上写了一些信息数据,
并且在一个未格式化分区的空闲空间以外创建了分区的组织规则。

磁盘分区介绍
        [图E-2] 带有一个文件系统的磁盘驱动器
        正如图E-2所暗示的,一个文件系统引入规则包含了一些另外的开销:
        * 包含了一个分区可用空间的一小部分,用来存储文件系统相关的数据,你可以把它看
作(创建文件系统需要的)开销。
        * 文件系统将余下的空间分割成为很小的,固定大小的片段。在Linux中,这些片段被
称之为Blocks。[1]

        联想到文件系统使得目录和文件概念变的可能,这些开销是必要的。

        同样也应当留意到,根本没有所谓单个完全通用的文件系统。如图E-3所展示的那样,
一个磁盘可以有一个分区在其之上,你也可以猜想,不同的文件系统往往是不兼容的;
换句话说,一个操作系统支持一个(或者少数几个相关的)文件系统,那么就可能不支持另外
一个。最后一句是必须牢记的原则。然而,Red Hat Linux 对于很多文件系统类型(包括一
些被其他操作系统使用的文件系统)提供支持,可以使得不同文件系统的数据转移变得极其
简单。

磁盘分区介绍
        [图E-3] 带有一个不同文件类型的磁盘分区
        当然,在磁盘上写文件系统只是一个开始。我们此过程的目的仍旧是为了读写数据。让
我们来看看已经写入文件的分区会是什么样子。

磁盘分区介绍
        [图E-4] 已经写入数据的磁盘驱动器
        正如在图E-4中看到的,先前空闲的14个区块已经存放了数据。另外,通过这个图片,
我们却不能决定有多少文件贮存在这个驱动器中。可能正好拥有14个文件,因为所有的文件
至少拥有一个区块,或者拥有多个区块。另外一点也很重要,被使用的区块未必会组织成一
个临近去区域。使用的和为使用的区块可能会散置在一起。这就被成为磁盘碎片。磁盘碎片
在你尝试重新调整现有分区大小的时候会起些许作用。

        由于计算机相关技术日新月异,磁盘驱动器也在诞生后不停的发展。尤其是它们变的越
来越大,这可不是尺寸上的变大,而是容量上的增加,使得可以储存大量的信息。这样,增
加的容量也引起了磁盘使用方式的变化。

        E.1.2. 分区:用它来划分磁盘


        由于磁盘容量在迅速的增加,一些人就产生了疑问:将所有格式化后的空间放到一块中,
这是否是个好主意呢?这种想法的诞生有多个原因,有关于哲学上的,也有技术上的。从哲
学上讲,当超过某个大小以后,其多余的空间就会造成更多的混乱。站在技术的角度,一些
文件系统在设计的时候就不支持过大的尺寸。或者确实有文件系统可以支持大容量硬盘空间,
但是这样的尺寸必定需要更多的开销来跟踪和索引文件。

        关于此问题的一个解决方法就是将磁盘划分为多个分区(partitions),对分区的访问
就好像是访问另外一个独立的磁盘一样。这个(*透明访问的)方式,就是添加一块
分区表(partition table)。

        ----------
        * 注意:
        这一章的图表描述的分区表好像是和实际磁盘分离的,这显然不够准确。事实上,这
        个分区表就存储在磁盘的开头,处于所有的文件系统和用户数据区之前。
        但是为了区分清楚,在我们的图片里就把它们分开了。
        ----------
   
    磁盘分区介绍
        [图E-5] 带有分区表的磁盘驱动器
        在图E-5中,我们看到分区表被分为四段,每段都存储这有用的信息,这些信息定
义了每个独立的磁盘分区。这意味着,磁盘分区表只能定义四个分区(译者注:姑且这样认
为)。

        分区表的每个入口都包含着对应分区的几个重要的特征:
        * 分区开始点和结束点。
        * 此分区是否活动(active)
        * 该分区类型

        进一步来看。分区的开始点和结束点实际上定义了该分区的大小和位置。“active”标志
被一些操作系统的启动装载器所(operating system's boot loaders)使用。换句话说,只
有那些带有active标志的分区之上操作系统才会被启动。

        分区类型就有点迷惑了,这里的类型其实是一个定义了分区预计使用方式的数字,这样
的讲法听起来有些暧昧,这是因为分区类型这个概念本身就有些含糊不清。一些操作系统用
分区类型来表示一个指定的文件类型,或者用来表示此分区和某个特定的操作系统有关,或
者表明此分区包含了一个可引导的操作系统,甚至可以是以上三者的混合。

        [表E-1] 一个包含了许多现有的(和废弃的)分区类型,旁边附有它们的数值。

Partition Value Partition Value
Empty 00 Novell Netware 386 65
DOS 12 bit FAT 01 PIC/IX 75
XENIX root 02 Old Minix 80
XENIX usr 03 Linux/Minix 81
DOS 16-bit <=32M 04 Linux swap 82
Extended 05 Linux native 83
DOS 16-bit >=32M 06 Linux extended 85
OS/2 HPFS 07 Amoeba 93
AIX 08 Amoeba BBT 94
AIX bootable 09 BSD/386 a5
OS/2 Boot Manager 0a OpenBSD a6
Win95 FAT32 0b NEXTSTEP a7
Win95 FAT32(LBA) 0c BSDI fs b7
Win95 FAT16(LBA) 0e BSDI swap b8
Win95 Extended(LBA) 0f Syrinx c7
Venix 80286 40 CP/M db
Novell 51 DOS access e1
Microsoft 52 DOS R/O e3
GNU Hurd 63 DOS Secondary f2
Novell Netware 286 64 BBT ff

         [表E-1].分区类型
        在这里,你可能想知道所有这些附加的复杂度是如何投入常规使用的。那么来看看图
E-6。


    磁盘分区介绍
        [图E-6] 带有单个分区的磁盘
        很多情况下,只会有单独一个分区覆盖到整个磁盘,实质上在所有的分区前都引用了相
同方法。分区表只有一个使用的分区入口,且此入口指向分区的开始。
        我们已经将此分区标识为“DOS”类型,虽然它只是表E-1列出的集中可能的分区类型之一。
但是足够达成此次讨论的目的。以上也是一个大多数当前预装Microsoft Windows操作系统
的普通电脑的分区布局图。

        E.1.3 分区中的分区——拓展分区(Extended)概述

        当然,随着时间的流逝,显然四个分区已经无法满足人们的需求。由于磁盘分区的大小
依旧在增长,那么即便人们已然非常合理地划分四个分区地大小,磁盘剩余空间仍旧可能空
余。这里就需要有一某种方法创建更多的分区。
        那么,我们现在进入拓展分区的世界。
        如同表E-1中提到的那样,这里有了一个"Extended"分区类型。这是拓展分区的关键标
志。
        当一个分区被创建且被设置成"Extended"类型的时候,那么拓展分区表就被建立了。大
体上说,拓展分区就像是另一个独立的磁盘——它拥有一个分区表指向一个在此分区之上的其
他一个或多个分区(现在被称作逻辑分区logic partitions,这是相对于主分区primary
partitions而言的)。图E-7,展示了一块磁盘,他包含了一个主分区和一个包含两个
逻辑分区的拓展分区(其实也包含了未被分区的空闲空间)。


磁盘分区介绍
        [图E-7] 带有拓展分区的磁盘

        如上图,主分区和逻辑分区有所不同——你只可能拥有四个主分区,但是逻辑分区的个数
却没有固定的限制。然而,针对Linux访问分区的方式,你应该避免在单个磁盘分区上定义
超过12个逻辑分区。

        现在,依照我们以上讨论的大致情况,让我们来看看怎么应用以上只是来安装Red Hat
Linux。

        E.1.4 为Red Hat Linux创建空间


        在准备硬盘的时候,你可能会面对三种方案:
        * 未分区的空闲空间可以使用
        * 一个未使用的分区可以使用
        * 正在使用的分区的空闲空间也可以被使用

        让我们一个个攻关:
        ----------
        注意:
            请务必切记以下的图例都被简化,以求清楚的讲述,因此当你安装Red Hat Linux
    系统的时候,不可直接应用到你实际的分区布局上去。
        ----------

        E.1.4.1. 使用未分区的空闲空间

        这种情况下,现有的分区自然没有覆盖到全部的磁盘,留下的就是未被非配的空间,它
不从属于其他任何空间。图E-8,描述了这种情况。
       
    磁盘分区介绍
        [图E-8] 带有空闲空间的磁盘
        如果不去深究,一块未被使用的硬盘同样属于此类情形。唯一的区别是,这种情况里所
有的空闲空间都未被定义。
        无论(*上述的)哪种情况,你都可以在未使用的空间里创建需要的磁盘分区。不幸的是,
这个方案虽然简单,但是并不常见(除非你在新买的硬盘上面仅仅安装Red Hat Linux一个
操作系统)。现今,大多数预装的操作系统,都会设置为占据硬盘的所有可用空间。

        下一步,让我们讨论稍微普遍点的情况。

        E.1.4.2 利用一块未使用的分区

        这种情况下,你可能会有一个或者更多未被使用的分区。可能你以前曾经倒腾过别的什
么操作系统,这样你当时使用的那块分区也就不再被使用了。图E.9就展示了这种情况。

    磁盘分区介绍
        [图E-9] 有一块不被使用分区的磁盘
        如果你发现自己处于这种情况,你就可以使用分配给这个分区的空间。你会首先需要删
除此分区,然后在释放的空间创造一个合适的Linux分区。你可以使用parted命令删除分区,
或者你可以在安装系统的过程中手动的删除旧的和创建新分区。

        E.1.4.3. 在一块活动的分区上使用空闲空间

        这是最常见的情况。同样不幸的是,这种情况也最难处理。主要问题在于,即便你拥有
足够的空间,但是他已经被分配给一个正在使用的分区之上。如果你买了一个预装有软件的
计算机,那么多半它的磁盘已经有了一个超大的分区,上面存有操作系统和数据。

        要在这样的系统上面开辟新的分区,你有两种选择:

        破坏性的重新分区
        简单的说,就是删除这个大的分区,再重新创建多个小分区。正如你可能想到的那样,
原先分区上的数据就被销毁了。这意味着你有必要进行一个完整的备份。为了自身方便,可
以作两个备份,确认操作后,再次尝试读取备份的数据,然后再删除分区。

        警告:
        如果你在这个分区上安装了某个操作系统,你也需要重新安装(此操作系统),小心那
        些随机预装操作系统的电脑,你可能未必拥有原先系统的安装CD。最好在删除分区和安
        装操作系统之前来确定这个方案的可行性。

        在为你现有的软件安装了一个较小的分区之后,你就可以重新安装任何软件,恢复数据,
然后继续你的Red Hat Linux安装过程。图E-10展示此完成状况。

    磁盘分区介绍
        [图E-10] 破坏性重分区之后的磁盘
        在图E-10中你可以看到,如果没有执行备份,你原先分区上的所有数据都会丢失!

        非破坏性重新分区
        这里,你可以运行一个程序,来完成这样一件表面上看上去不可能的事情:他可以把一
个大的分区变小,但却不丢失任何文件。很多人都已找到了这样一个办法,它们也很可靠,
运行起来没有故障。那你应该使用什么样的软件来完成此操作呢?在当今的市场上有一些这
样的磁盘管理软件,你可以作些调查,来选择最适合自己的那一个。

        非破坏性分区的过程也同样简单易懂,只有以下几个步骤:
        * 压缩现有数据
        * 改写分区尺寸
        * 创建新分区

        接着我们来详述每一步。

        E.1.4.3.1 压缩现有数据
        图E-11表明,此方案的第一个过程就是在现有分区上压缩数据。这一步的原因无
非是重新安排磁盘数据来最大化剩余空闲空间。

    磁盘分区介绍
        [图E-11] 被压缩后的磁盘
        这个步骤是至关重要的,没有此步,现有数据的位置可能会阻止你重新更改磁盘到想要
的尺寸大小。也需注意,出于另外的原因,一些数据不可移动。如果是这种状况(他严重限
制了你要建立的新分区大小),你可能就需要*执行破坏性分区。

        E.1.4.3.2 重新更改现有分区尺寸
        图E-12描述的是当前更改尺寸的过程。更改分区尺寸的结果,会由于你使用不同
而有所区别。大多数情况下,新释放的空间会拥有与原分区同样的(文件)类型。

    磁盘分区介绍
        [图E-12] 更改分区大小的磁盘
        你用软件在更改大小时候如何对待释放后的空间,了解这一步是很重要的,这样你可以
采取其他相应的措施。和我们图例的情况那样,最好是删除那个新创建的DOS分区并且建立
一个合适的Linux分区。

        E.1.4.3.3. 创建新分区
        同上一步所暗示的那样,你可能需要,但又可能不必去创建一个新分区。然而除非你使
用的更改分区大小的软件可以识别Linux,否则你很可能需要删除在上一步中(更改分区大
小)新建的分区。图E-13展示了这一步的完成结果。

    磁盘分区介绍
        [图E-13] 最后分区设置后的磁盘

        为了我们客户的方便,我们提供了parted工具。这是一个可以重新更改分区大小的免费
软件。
        如果你决定用parted为你的磁盘重新分区,做以下两件事情是很重要的:
        * 作备份 —— 为你的电脑中的重要数据作两个备份。这些备份应该做在可移动媒体
          上(例如磁带,CD光盘,或者磁盘),你也应保证它们是可读的。
        * 阅读文档 —— 完整的阅读parted文档,也可查阅<red linux设置指南="" hat="">中的磁
          盘存储管理章节。

        如果你决定使用parted,留心在parted运行后你会拥有两个分区:一个是你更改过大小
的分区,另一个是由释放的空间之上所建立的新分区。如果你的目标是使用新分区来安装
Red Hat Linux,那么应该删除新建立的分区,你可以使用Windows的fdisk分区工具,或者
在安装系统的过程中完成这一步。

</red>

        E.1.5. 分区命名方案


        Linux使用一些字母和数字的组合来称呼磁盘分区,这个组合可能让人很迷惑,尤其是
你已经习惯了用“C盘”来称呼你的分区。在DOS/Windows的世界里,分区就使用了下面的方法
来命名:
        * 检查每个分区类型,来判断此分区是否为DOS/Windows可读分区
        * 如果此分区类型可兼容,他会被赋予一个“驱动器字母”(drive letter),这些驱动去
      字母以“C”开始,往下依次排列。
        * 这个驱动器字母可以被用来索引一个分区,同样也指明了此分区之上文件类型。

        Red Hat Linux使用了一个更加灵活的命名方案,他比其他操作系统使用的方法传达更
多的信息。这个命名方案是基于文件的,在形式上此文件名为:

        /dev/xxyN

        下面来解释这个命名方案:

        /dev/
        这个字符串是所有设备文件所寄居的目录。由于所有的分区都位于磁盘上,并且磁
        盘就是设备,因此代表所有分区的文件就被放在了/dev。

        xx
        分区名的前两个字母表明了这个设备的类型,IDE接口的磁盘上就使用hd,SCSI就
        使用了sd。

        y
        这个字母表明了此分区在哪个设备上。例如,/dev/hda(第一块IDE硬盘上)或者
        /dev/sdb(第二块SCSI磁盘上)。

        N
        最后的数字指明了分区。前面四个分区(只可能是主分区或者拓展分区)被标记为
        1至4,逻辑分区起始于5。因此,/dev/hda3就是在第一块IDE硬盘上的的第三个主分
        区(或者拓展分区);/dev/sdb6就是在SCSI硬盘上的第二个逻辑分区。

        ----------
        注意:
        以上看来,此命名规则并不包含有关文件类型的标识部分,不像DOS/Windows系统,
        Red Hat Linux可以索引所有的分区。当然,这并不是说Red Hat Linux可以方案所
        有类型的分区,但多数情况之下,访问其他文件系统的数据是可能的。
        ----------

        要记住以上信息,在创建分区的时候,他会让事情变的更加简单。

        E.1.6 磁盘分区和其他操作系统

        如果 Red Hat Linux和其他操作系统共享一块带有多个分区的硬盘,大多情况下不会发
生什么问题。然而,关于Linux和其他操作系统的组合中,仍旧有一些情况值得另外留意。

        ----------
        注意:
        如果Red Hat Linux和OS/2共存于你的机器上,你必须使用OS/2上的分区软件来创建磁
盘分区——否则,OS/2不会认出你的磁盘分区。在(Red Hat)安装过程中,也不要创建其
他分区(但可以用parted工具来创建你的Linux分区)。
        ----------
        注意:
        如果你想要在Red Hat Linux系统中读写Windows NT, 2000或者XP分区上的数据,请不
        要将Windows文件系统类型设置为NTFS,否则Red Hat Linux无法读取。如果Windows分
        区类型是VFAT,Red Hat Linux就可以正常读写。
        ----------

        如果你有多个Windows分区,就不必设置成同样的文件类型。如果你拥有超过一个
        Windows分区,你可以将其中一个设置为VFAT,用此分区来存储共享于Windows和Red
        Hat Linux分区之间的数据。

         E.1.7. 磁盘分区和挂载点

        一个Linux新手可能对一件事情比较困惑:Linux操作系统使用和访问了多少的磁盘分区。
在DOS/Windows,这相对简单了点:每个分区都有一个“驱动器字母”。然后你可以使用正确
的驱动器标识字母来定位相应分区上的文件和目录。

        显然这些变的不一样了。大致上来说,这根源于Linux处理分区和磁盘存储的方式。这
里主要的区别在于,每个分区都被用来组织一块存储空间,以支持一块单独的文件和目录集
合。这是通过挂载(mounting),将一个分区关联到一个目录下来实现的。挂载一个分区,使得
将一块存储空间连接到具体目录(称之为挂载点, mount point)上变得可能。

        比如,如果分区/dev/hda5被挂载到/usr目录下,这可能意味着在/usr目录下的所有文件
和子目录在物理上都位于分区/dev/hda5之上。因此文件/usr/share/doc/FAQ/txt/Linux-FAQ 可
能会被存放在/dev/hda5分区上,而/etc/X11/gdm/Sessions/Gnome就不会
(位于/dev/hda5上)。

        接着看我们的例子,也可能在/usr下一个或者多个目录也是其他某些分区的挂载点。举
个例,如果一个分区挂载到了/usr/local下面,意味着/usr/local/man/whatis会位于/dev/hda7
上,而不是在/dev/hda5上。

        E.1.8. 多少个分区?

        在准备安装Red Hat Linux过程中,你可能需要考虑新系统要用到的分区的数量和大小。
 “多少分区”这个问题现在Linux社区中仍有争论,这样的争论放眼望去仍旧看不到头,但你
可以大胆的说: 分区方式可能会有和争论人群的数量一样多。

        仍然切记,我们建议,除非你有非作不可的原因,你应该至少创建一下己个分区:

       swap, /boot 和 / (root)

        查看更多信息在 章节3.19.4 建议的分区方案

        ----------
        小心:
        确定你已经阅读 < 章节E.1.9 最后的技巧:使用Grub或者LILO >中适用于/boot分
        区的信息!
        ----------

        关于不同Red Hat Linux分区大小的具体建议可以查询
        < 章节1.5 什么是最适合你的安装方案 >

        E.1.9 最后的技巧:使用GRUB和LILO

        Grub和LILO是在x86系统中启动Red Hat Linux最常用的方法,和其他操作系统装载器一
样,它们工作于操作系统之外,使用的仅仅是计算机硬件本身嵌入的BIOS程序。这一章节就
描述了Grub和LILO与PC BIOS的交互,此章节只适用于x86兼容的机器。

        E.1.9.1 BIOS有关影响到GRUB和LILO的限制
        Grub和LILO受到了大多数x86系统中的BIOS作出的某些限制。具体一点,大多数BIOS并
不能访问超过两个以上的硬盘驱动器,它们(BIOS)也不可能访问任何驱动器中1023号柱面
以上的数据。注意,一些最近的BIOS可能没有这些限制,但并非所有(都已经取消此限制)。

        ----------
        提示:
        当为你的硬盘分区时,要切记一些老旧系统的BIOS不能访问磁盘上超过前1024个柱面的
数据。如果存在此种情况,那就要为/boot分区保留磁盘上的前1024个柱面以便启动Linux,其
他的分区可以在1024个柱面之后。
        ----------

        在启动期内(包括内核启动期),所有GRUB和LILO需要访问的数据都被存放在/boot目
录内。如果你按照上面所述的文件布局,或者在安装工作站,个人电脑或者服务器,那么
/boot可以是一个很小的,单独的分区。否则,它可能位于根目录下(/)。如果你使用GRUB
或者LILO来启动你的Red Hat Linux系统,那么无论哪种情况,/boot所在的分区 都必须满足
一下方针:

        在前两个IDE驱动器上
        如果你有两个IDE(或者EIDE)驱动器,/boot必须在其中一个之上。注意两个驱动
        器的限制包含了你的IDE主控制器上所有任意的CDROM光盘驱动器。所以,如果在你
        的IDE主控制器上有一个IDE硬盘和一个IDE接口的CDROM光驱,/boot就只能放在第
        一个驱动器上,即便在IDE副控制器上有另外的驱动器。

        在第一个IDE驱动器或者第一个SCSI驱动器上
        如果你有一个IDE(或者EIDE)驱动器,和一个或者更多的SCSI驱动器,/boot要么
        得在这个IDE驱动器上,要么得在ID 0的SCSI驱动器上。其他ID的SCSI将无法启动。

        在前面两个SCSI驱动器上
        如果你只有SCSI硬盘驱动器,/boot必须位于ID 0或者ID 1的驱动器上,其他的ID
        将无法启动

        如同前面提到的,可能一些新的BIOS会允许做一些设置,这样使得GRUB和LILO不会被限
制在以上方针之下。同样地,即使没有遇到以上情况,GRUB和LILO会有更多隐藏的特性被用
来启动Linux系统,即使没有以上情况。然而由于存在太多的变数,Red Hat Linux自然不能
企及。

        ----------
        注意:
        Disk Druid, 在自动分区时候,也将BIOS相关限制考虑在内。
        ----------


附注:
[1] Blocks区块,不像我们图例中那样,他是固定大小的。要记住,每块磁盘驱动器上都会
    有成千个区块。但为了讨论的目的,请忽略这些微小差异。