学习 Linux,101: 硬盘布局 | ||||
摘自: 被阅读次数: 25 | ||||
由 于 2010-03-22 21:35:25 提供 | ||||
在这篇文章中学习为 Linux 系统设计磁盘分区布局。您将学到:
本文将帮助您准备 Linux Professional Institute's Junior Level Administration (LPIC-1) 考试 101 中主题 102 下的目标 102.1。该目标的权值为 2。 注意: 本文主要介绍布局的规划。如需了解实现 步骤,请参见针对主题 104 的文章(参见 )。
要充分地利用本系列文章,您应当对 Linux 以及在其中运行本文介绍的命令的 Linux 系统有一个基本的了解。在某些情况下,程序的不同版本可能使用不同的方式格式化输出,因此您的结果可能并不总是与本文所示的清单和图形xx一样。
Linux 文件系统包含排列在磁盘或其他区块存储设备 的目录 中的文件。与其他许多系统相同,Linux 系统中的目录也包含其他目录,即子目录。Microsoft® Windows® 等系统的概念是在不同的驱动器盘符上(A:、C: 等)使用不同的文件系统,而 Linux 文件系统则截然不同,它是一个树形结构,以 / 目录作为根 目录。 您可能会疑惑,如果文件系统只是一个庞大的树形结构,那么磁盘布局为什么如此重要。实际上,每一个区块设备(如硬盘驱动器分区、CD-ROM 或者软盘) 上都有一个文件系统。通过在称为挂载点 的点将文件系统 挂载 到不同的设备上来创建文件系统的单一树形视图。 通常情况下,内核通过将文件系统以 / 的形式挂载到某些硬盘驱动器分区上来启动这个挂载过程。您可以挂载其他硬盘驱动器分区,如 /boot、/tmp 或 /home。例如,您可以使用 /mnt/floppy 的形式挂载软盘驱动器上的文件系统,使用 /media/cdrom1 挂载 CD-ROM 上的文件系统。您还可以使用 NFS 等联网文件系统挂载来自其他系统中的文件。此外也有其他类型的文件挂载,但这几个例子能帮助您简单了解这个过程。尽管挂载过程实际上是指挂载某些设备上的文件系统,但人们通常会称之为 “挂载设备”,其真正的含义是 “挂载设备上的文件系统”。 现在,假设您已经挂载了根文件系统(/),您希望在挂载点 /media/cdrom 挂载 CD-ROM /dev/sr0。挂载点必须首先存在,之后才能通过它来挂载 CD-ROM。在您挂载 CD-ROM 时,CD-ROM 上的文件和子目录将成为 /media/cdrom 下的文件和子目录。/media/cdrom 中已有的所有文件或子目录都将不再可见,但它们仍然存在于包含挂载点 /media/cdrom 的区块设备之上。如果卸载了 CD-ROM,原始文件和子目录将再次可见。因此,请不要将其他文件置于将用作挂载点的目录中,以避免此问题。 表 1 展示了 Filesystem Hierarchy Standard 要求 / 中具有的目录(关于 FHS 的更多信息,请参见 )。
{dy}个 SCSI 驱动器通常是 /dev/sda。在较早的 Linux 系统中,{dy}个 IDE 硬盘驱动器是 /dev/hda。随着串行(SATA)IDE 驱动器的发明,混合 PATA/SATA 系统有时会使用 /dev/hda 作为{dy}个 PATA 驱动器,使用 /devsda 表示{dy}个 SATA 驱动器。在较新的系统上,所有 IDE 驱动器都命名为 /dev/sda、/dev/sdb 等。IDE 驱动器名称的更改是热插拔 系统造成的,最初支持的是 USB 驱动器。热插拔允许您在插入新设备后立即开始使用新设备,而现在这种命名用于所有设备,无论是内置于系统之中的设备,还是随后使用 USB 或 Firewire(IEEE 1394)或其他类型的连接插入正在运行的系统的设备。 传统上,硬盘驱动器会格式化为 512 字节的扇区。磁盘盘片在无需移动磁头的前提下即可读取的所有扇区组成一个磁道。磁盘通常具有多个盘片。各盘片上在无需移动磁头的前提下即可读取的磁道的集合称为柱面。硬盘驱动器的设定参数 使用柱面、每个柱面的磁道(或磁头)数以及扇区/磁道表示。在本文撰写之时,驱动器制造商开始生产具有 4K 扇区的磁盘。如果文件系统仍然假定使用 512 字节的扇区,而某个分区并非从位于 4K 边界的扇区开始,则将导致性能降低。 PC 系统上 DOS 操作系统中对于柱面、磁头和扇区大小的限制带来了 BIOS 转换的设定参数,以支持更大的硬盘驱动器。最终,即便这样的方法也不足以解决问题。磁盘驱动器技术的{zx1}发展带来了逻辑块寻址(LBA),因而 CHS 设定参数指标的重要性有所降低,现代磁盘上报告的设定参数可能与物理扇区布局关系不大或者xx无关。如今,我们使用的磁盘更大,这迫使 LBA 推出了称为 LBA48 的扩展,最多可保留 48 个位供扇区号使用。 硬盘驱动器上的空间划分(或者说分区)为多个分区。分区不能重叠,未分配给分区的空间称为剩余空间。分区名的形式类似于 /dev/hda1、/dev/hda2、/dev/hda3、/dev/sda1 等。在未使用 IDE 驱动器热插拔支持的系统上,IDE 驱动器最多支持 63 个分区。通过热插拔支持的 SCSI 驱动器、USB 驱动器和 IDE 驱动器最多可有 15 个分区。一个分区通常会分配为整数个柱面(柱面概念可能存在不准确之处)。 如果两种不同的分区程序对于指定的磁盘设定参数有着不同的理解,就有可能出现一种分区程序在遇到另一个分区程序创建的分区时报错或发生问题的情况。如果将磁盘从一个系统移动到另一个系统,也可能会出现此类问题,若两个系统的 BIOS 功能不同则更容易出现问题。 在 Linux 系统中,您可以使用
在清单 1 中,请注意 您可以使用
请注意,
IDE 驱动器上有三种类型的分区:主、逻辑 和扩展。分区表 位于磁盘主引导记录(MBR)之中。MBR 是磁盘上的{dy}个扇区,因而分区表在其中所占空间不大。这限制了一个磁盘上的主分区数量,最多为 4 个。如果需要 4 个以上的主分区(往往需要 4 个以上的主分区),其中一个主分区就必须以扩展分区的形式出现。 扩展分区 就是一个或多个逻辑分区的容器。这种分区模式最初是由 MS DOS 和 PC DOS 采用的,允许 DOS、Windows 或 Linux 系统使用 PC 磁盘。一个磁盘可能仅包含一个扩展分区。数据存储在扩展分区内的逻辑分区中。必须首先在扩展分区内创建一个逻辑分区,之后才能将数据存储到扩展分区中。 Linux 将主分区或扩展分区编号为 1 至 4,因而 dev/sda 可能拥有四个主分区:/dev/sda1、/dev/sda2、/dev/sda3、/dev/sda4。也可以有一个主分区 /dev/sda1 和一个扩展分区 /dev/sda2。如果定义了逻辑分区,则逻辑分区的编号从 5 开始,/dev/sda 上的{dy}个逻辑分区将为 /dev/sda5,即便磁盘上不存在主分区,只有一个扩展分区也是如此(/dev/sda1)。因此,如果您希望一个 IDE 驱动器上有四个以上的分区,就需要给扩展分区分配一个分区号。尽管理论上支持热插拔的内核的 IDE 驱动器分区数量理论上最多为 15 个,但您也许能创建{zh1}几个,也可能无法创建{zh1}几个。如果您计划在一个驱动器上使用超过 12 个分区,应务必谨慎地检查所有方面。 上面的示例中使用的磁盘具有三个主分区,均格式化为供 Linux 使用。其中两个主分区使用 ext3 文件系统,而另一个主分区使用 ext4 文件系统。清单 4 展示了针对 Ubuntu 9.10 系统上带有主、扩展和逻辑分区的内部驱动器和附加到 Fedora 12 系统的 USB 驱动器的
如前所述,Linux 文件系统是一个以 / 为根的庞大树形结构。必须挂载软盘或 CD-ROM 上的数据的原因显而易见,但分隔存储在硬盘驱动器上的数据的原因却不是那么明显。分隔文件系统的部分原因包括:
除了上述的文件系统使用方法之外,您还需要考虑在磁盘上分配交换空间。对于 Linux 系统来说,通常是一个专用的分区,也可能是多个专用分区。
假设您正在设置一个包含至少一个硬盘驱动器的系统,您希望通过硬盘驱动器引导。(通过 LAN 引导的无盘工作站的设置和使用 live CD 或 DVD Linux 系统的考虑事项不在本文讨论范围之内。)尽管可以在稍后更改分区大小,但通常比较麻烦,因此预先做出{zh0}的选择是十分重要的。下面将介绍相关内容。 您要考虑的{dy}个问题是确保系统可以引导。 某些旧系统存在限制,BIOS 仅能通过全部位于磁盘的前 1024 个柱面中的分区引导。如果您的系统就是这样的,那么必须创建一个能够挂载为包含引导系统所需的关键文件的 /boot 的分区。加载了这些文件之后,Linux 系统将接管磁盘的操作,1024 个柱面的限制将不再影响系统的后续操作。如果您需要为 /boot 创建一个分区,通常 100 MB 的空间足矣。 要考虑的下一个问题应该是所需交换空间的大小。考虑到目前内存的价格,交换空间是一种非常缓慢的辅助存储器。一种常见的经验法则是创建与实际 RAM 大小相同的交换空间。如今,您可能希望为一个工作站配置一倍或两倍的实际 RAM,以便在使用某些大型程序时不会出现 RAM 不足的情况。虽然切换会降低速度,但在给定时间您通常仅使用其中之一或其中之二。 建议为内存极小的系统使用较大的交换空间。对于服务器来说,除非需要运行建议不同值的应用程序,否则您可能希望使用大小约为 RAM 一半的交换空间。在任何情况下,您都应该监控服务器的内存使用情况,以便按需添加实际 RAM 或将工作负载分布到其他服务器上。在服务器上过多进行交换并非良好的实践。可以使用交换文件,但专用分区的效果更理想。 现在,我们遇到了一个有分歧的话题。个人工作站的使用的可预测性要低于服务器的使用。我的建议(特别是对于新用户)是将大多数标准目录(/usr、/opt、/varNow 等)分配到一个大分区中。不清楚机器中究竟安装了哪些东西的新用户会发现这种做法很有帮助。运行图形化桌面和一定数量的开发工具的工作站需要 5 GB 或 5 GB 以上的磁盘空间以及用户所需的空间。某些大型开发工具可能要占用数 GB 的空间。我通常会为每个操作系统分配 40 GB 到 60 GB 的空间,将剩余的磁盘空间留作装载其他内容。 服务器的工作负载要更加稳定,同时特定文件系统中空间不足也会造成更加灾难性的后果。因此,通常应为服务器创建多个分区,分散在多个磁盘上,可能还要使用硬件或软件 RAID 或逻辑卷组。 您还需要考虑特定文件系统的工作负载,以及该文件系统是否要在多个系统间共享,还是仅供一个系统使用。您可以结合使用体验、容量规划工具,并预测增长,以便确定适合您的系统的{zj0}分配方式。 无论您是在配置工作站,还是在配置服务器,都有某些各系统特有的文件位于本地驱动器上。通常,这其中包括用于系统参数的 /etc、用于引导过程中所需文件的 /boot、用于引导或系统恢复所需文件的 /sbin、用于 root 用户的主目录的 /root、用于锁定文件的 /var/lock、用于正在运行的系统的信息的 /var/run、用于此系统日志文件的 /var/log。表示用户主目录的 /home、/usr、/opt、/var/mail 或 /var/spool/news 等其他文件系统可能位于独立的分区上,也可能是通过网络挂载的,具体取决于您的安装需求和偏好。 学习
获得产品和技术
讨论
Ian Shields 参与 developerWorks Linux 专区的许多 Linux 项目。他是 IBM 北卡罗来纳州 Research Triangle Park 的一名高级程序员。他于 1973 年作为一名系统工程师加入 IBM 位于澳大利亚堪培拉的子公司。此后,在加拿大蒙特利尔和北卡罗来纳州 RTP 从事通信系统和普适计算。他拥有多项专利。他毕业于 Australian National University,本科学位是纯粹数学和哲学。他拥有北卡罗来纳州州立大学的计算机硕士和博士学位。 原文链接: |