Linux 从一开始就是多任务操作系统,许多程序相互交互并持续运行。因此,保持每个人都认同的文件结构非常重要,以便系统能够在期望的位置找到数据。历史上存在许多不同的标准,这令人困惑,并且使用符号链接来维持兼容性,这进一步混淆了问题,最终结构看起来像一个迷宫。
在 Linux 的情况下,幸运的是,早期就达成了一个称为文件系统标准 (FSSTND) 的标准,如今所有主要的 Linux 发行版都在使用它。
后来,决定制定一个后继标准,该标准也应支持除 Linux 之外的其他操作系统,称为文件系统层级标准 (FHS),目前版本为 2.2。该标准正在持续开发中,并将很快被 Linux 发行版采用。
我建议不要尝试推出您自己的结构,因为标准制定者已经进行了大量的思考,并且许多软件包都符合这些标准。相反,您可以访问 FHS 主页了解更多信息。
本 HOWTO 努力遵守 FSSTND,并将遵循 FHS,一旦发行版开始提供。
FSSTND 的各个部分对速度、可靠性和大小有不同的要求,例如,丢失 root 分区很麻烦,但可以很容易地恢复。丢失 /var/spool/mail
则是一个相当不同的问题。以下是一些基本部分及其属性和要求的快速摘要。请注意,这只是一个指南,etc
和 lib
目录中可能存在二进制文件,bin
目录中可能存在库文件,等等。
最高!尽管如果您过于依赖交换分区,则应考虑购买更多 RAM。但是请注意,在许多旧的奔腾 PC 主板上,缓存将无法在 128 MB 以上的 RAM 上工作。
与 RAM 类似。快速而粗略的算法:就像泡茶一样:机器 16 MB,每个用户 2 MB。最小的内核在 1 MB 中运行,但很紧张,通用工作和轻量级应用程序使用 4 MB,X11 或 GCC 使用 8 MB,或 16 MB 以获得舒适体验。(作者以泡一杯非常浓的茶而闻名...)
有些人建议交换空间应该是 RAM 大小的 1-2 倍,并指出程序的局部性决定了您添加的交换空间的效率。请注意,使用与 4BSD 相同的算法略有不正确,因为 Linux 不会为核心中的页面分配空间。
更彻底的方法是将交换空间加上 RAM 视为您的总工作集,因此,如果您知道最多需要多少空间,则减去您拥有的物理 RAM,剩下的就是您需要的交换空间。
慷慨地规划交换空间还有另一个原因:内存泄漏。行为不端的程序不会释放它们为自己分配的内存,据说存在内存泄漏。即使在有问题的程序停止后,这种分配仍然存在,因此这是内存消耗的来源。只有在程序终止后,内存才会被返回。一旦所有物理 RAM 和交换空间耗尽,唯一的解决方案是尽可能终止有问题的进程,或者如果失败,则重新启动并重新开始。幸运的是,这样的程序并不太常见,但如果您遇到一个,您会发现额外的交换空间将为您争取更多重启之间的时间。
还要记住考虑您使用的程序类型。某些具有大型工作集的程序,例如图像处理软件,会将庞大的数据结构加载到 RAM 中,而不是显式地处理磁盘文件。像这样的数据和计算密集型程序,如果您拥有的 RAM 少于要求,则会导致过度交换。
其他类型的程序可以将其页面锁定到 RAM 中。这可能是出于安全原因,防止数据副本到达交换设备,也可能是出于性能原因,例如在实时模块中。无论哪种方式,锁定页面都会减少剩余的可交换内存量,并可能导致系统比预期更早地进行交换。
在 man 8 mkswap
中解释说,对于 32 位机器,每个交换分区的大小最大只能略低于 128 MB,对于 64 位机器,则略低于 256 MB。
然而,在内核 2.2.0 之后,这种情况发生了变化,此后限制为 2 GB。手册页已更新以反映此更改。
中等。当它发生故障时,您会很快知道,并且故障将使您损失一些工作。您经常保存,不是吗?
Linux 提供了跨多个设备进行交错交换的可能性,这一功能可以为您带来很多好处。查看“man 8 swapon
”以获取更多详细信息。但是,跨多个设备进行软件 RAID swap
会增加比您获得的更多的开销。
因此,/etc/fstab
文件可能如下所示
/dev/sda1 swap swap pri=1 0 0
/dev/sdc1 swap swap pri=1 0 0
请记住,fstab
文件对使用的格式非常敏感,请仔细阅读手册页,并且不要只是复制粘贴上面的行。
有些人使用 RAM 磁盘进行交换或其他文件系统。但是,除非您有一些非常不寻常的要求或设置,否则您不太可能从中获得太多好处,因为这会减少可用于缓存和缓冲的内存。
曾经有一个例外:在许多设计不良的主板上,板载缓存内存无法缓存所有可以寻址的 RAM。许多较旧的主板可以接受 128 MB RAM,但只能缓存较低的 64 MB。在这种情况下,如果您将较高的(未缓存的)64 MB RAM 用于基于 RAM 磁盘的交换或其他临时存储,则可以提高性能。
非常高。在单独的磁盘/分区上,这通常会减少碎片,尽管 ext2fs
可以很好地处理碎片。
很难说,小型系统很容易在仅几 MB 的空间下运行,但这些臭名昭著的地方是隐藏文件以躲避窥探和配额强制执行的地方,并且在大型机器上可能会不受控制地增长。建议:小型家用机器:8 MB,大型家用机器:32 MB,小型服务器:128 MB,以及大型机器最多 500 MB(作者在工作中使用的机器有 1100 个用户和一个 300 MB 的 /tmp
目录)。密切关注这些目录,不仅要关注隐藏文件,还要关注旧文件。还要做好准备,这些分区可能是您可能不得不调整分区大小的第一个原因。
低。通常程序在这些区域发生故障或被填满时会发出警告或优雅地失败。当然,随机文件错误会更严重,无论这是哪个文件区域。
大多是短文件,但可能有很多。通常程序会删除其旧的 tmp
文件,但如果某种原因发生中断,它们可能会幸存下来。许多发行版都有关于在启动时清理 tmp
文件的策略,您可能需要查看您的设置是什么。
在 FSSTND 中,有一个关于将 /tmp
放在 RAM 磁盘上的注释。然而,由于与交换分区相同的原因,不建议这样做。此外,如前所述,不要将闪存 RAM 驱动器用于这些目录。还应记住,某些系统设置为在重新启动时自动清理 tmp
区域。
较旧的系统有一个 /usr/tmp
,但不再推荐使用它,并且由于历史原因,符号链接现在使其指向其他 tmp
区域之一。
(* 已经 50 行了,我快完成了! *)
高,尤其是在大型新闻服务器上。新闻传输和过期是磁盘密集型的,将受益于快速驱动器。打印假脱机:低。考虑对新闻使用 RAID0。
对于新闻/邮件服务器:在您的承受范围内尽可能多。对于单用户系统,如果您持续阅读,几 MB 就足够了。另一方面,加入邮件列表服务器并休假不是一个好主意。(同样,我在工作中使用的机器为整个 /var/spool
保留了 100 MB)
邮件:非常高,新闻:中等,打印假脱机:低。如果您的邮件非常重要(难道不是一直如此吗?),请考虑使用 RAID 以提高可靠性。
通常有大量文件,大小约为几 KB。另一方面,打印假脱机中的文件可能很少,但尺寸却很大。
一些新闻文档建议将所有 .overview
文件放在与新闻文件不同的驱动器上,请查看所有新闻 FAQ 以获取更多信息。典型大小约为新闻假脱机总大小的 3-10%。
中等。尽管许多程序使用 /tmp
进行临时存储,但其他程序(例如某些新闻阅读器)会频繁更新家目录中的文件,这在大型多用户系统上可能很明显。对于小型系统,这不是关键问题。
棘手!在某些系统上,人们为存储付费,因此这通常是一个财务问题。像 Nyx.net 这样的大型系统(这是一个提供邮件、新闻和 WWW 服务的免费互联网服务)在每个用户 100 KB 的建议限制和 300 KB 的强制最大限制下成功运行。商业 ISP 通常在其标准订阅套餐中提供约 5 MB 的空间。
但是,如果您正在写书或从事设计工作,则需求会迅速膨胀。
可变。在单用户机器上丢失 /home
目录令人恼火,但当 2000 个用户打电话告诉您他们的家目录丢失时,这不仅仅是令人恼火。对于某些人来说,他们的生计依赖于这里的内容。您当然会定期备份吧?
同样棘手。单用户的最小设置往往是十几个文件,大小为 0.5 - 5 KB。但是,与项目相关的文件可能很大。
您可以考虑使用 RAID 来提高速度或可靠性。如果您想要极高的速度和可靠性,您可能无论如何都在考虑其他操作系统和硬件平台。(容错等)
Web 浏览器通常使用本地缓存来加速浏览,并且此缓存可能会占用大量空间并导致大量磁盘活动。有很多方法可以避免这种性能损失,有关更多信息,请参阅关于家目录和WWW的章节。
用户通常倾向于用完 /home
分区上的所有可用空间。Linux 配额子系统能够限制单个用户 ID 在每个文件系统上可以分配的块数和 inode 数。有关设置的详细信息,请参阅 Albert M.C. Tam bertie (at) scn.org
编写的 Linux 配额 mini-HOWTO。
低。通常数据比程序大,程序是按需加载的,因此速度不是关键。CD-ROM 上实时文件系统的成功证明了这一点。
天空才是极限,但 200 MB 应该可以为您提供综合系统所需的大部分内容。一个大型系统,用于软件开发或多用途服务器,可能应该为安装和增长都保留 500 MB 的空间。
低。这通常挂载在 root 分区下,所有必需品都收集在那里。然而,丢失所有二进制文件仍然很麻烦...
可变,但通常在 10 - 100 KB 范围内。
中等。这些是经常加载的大量数据块,范围从目标文件到字体,所有这些都容易膨胀。通常这些也会被完整加载,因此速度在这里有些用处。
可变。例如,文字处理器在这里存储其庞大的字体文件。向我提供反馈的少数人报告说,他们的各种 lib
目录中约有 70 MB 的文件。一个相当完整的 Debian 1.2 安装可能占用多达 250 MB 的空间,这可以被视为一个现实的上限。以下是一些最大的磁盘空间消耗者:GCC、Emacs、TeX/LaTeX、X11 和 perl。
低。请参阅主二进制文件点。
通常很大,其中许多文件的大小约为 1 MB。
由于历史原因,某些程序将可执行文件保存在 lib 区域中。一个例子是 GCC,它在 /usr/lib/gcc/lib
层次结构中包含一些庞大的二进制文件。
相当低:毕竟启动不会经常发生,并且加载内核只是系统启动并运行所需时间的一小部分。
相当小,一个完整的镜像和一些额外的功能可以放在一张软盘上,因此 5 MB 应该足够了。
高。请参阅下面关于根分区的章节。
关于启动分区,最重要的是在许多系统上,它必须位于 1023 柱面以下。这是一个 BIOS 限制,Linux 无法绕过。
以上说法对于最近的 IDE 系统和任何 SCSI 磁盘不一定正确。有关更多信息,请查看最新的 Large Disk HOWTO。
最近,编写了一个新的引导加载程序,它克服了 1023 扇区限制。有关更多信息,请查看这篇关于 nuni 的文章。
相当低:这里只有最基本的内容,其中大部分只在启动时运行。
相对较小。然而,最好在根分区上保留一些必要的救援文件和实用程序,有些人还会保留多个内核版本。反馈表明大约 20 MB 就足够了。
高。这里的故障可能会导致相当多的麻烦,您可能最终会花费一些时间来救援您的启动分区。当然,通过一些练习,您可以在一个小时左右完成此操作,但我认为如果您经常练习这样做,那么您也做错了什么。
您自然有一个救援磁盘吗?当然,自从您进行初始安装以来,它已经更新了吗?有许多现成的救援磁盘以及救援磁盘创建工具,您可能会发现它们很有价值。据推测,在这方面投入一些时间可以使您免于成为 root 救援专家。
如果您有足够的驱动器,您可以考虑在单独的物理驱动器上放置一个备用紧急启动分区。它会花费您一点空间,但如果您的设置庞大,那么如果出现故障,节省的时间将非常值得额外的空间。
为了简单起见,并且在紧急情况下,不建议将根分区放在 RAID level 0 系统上。此外,如果您将 RAID 用于您的启动分区,您必须记住为您的紧急内核启用 md
选项。
为了简单起见,将启动分区和根分区放在同一分区上是很常见的。如果您这样做,那么为了从 LILO 启动,重要的是基本启动文件完全驻留在 1023 柱面内。这包括内核以及 /boot
中找到的文件。
冒着听起来像异端的风险,我在此处包含了一个小节,内容是关于许多阅读本文档的人强烈反对的东西。不幸的是,许多硬件项目都附带基于这些系统的设置和维护工具,所以就这样吧。
非常低。这些系统并非以速度而闻名,因此使用优质驱动器意义不大。多任务处理或多线程不可用,因此 SCSI 驱动器中的命令队列功能将不会被利用。如果您有一个旧的 IDE 驱动器,它应该足够好。例外情况在一定程度上是 Win95,更值得注意的是 NT,它们具有多线程支持,理论上应该能够利用 SCSI 设备提供的更高级功能。
这些操作系统的幕后公司并非以编写简洁的代码而闻名,因此您必须准备花费几十 MB 的空间,具体取决于您安装的操作系统或 Windows 的版本。使用旧版本的 DOS 或 Windows,您可能会将所有内容都安装在 50 MB 的空间内。
哈哈。由于链条的强度不高于最薄弱的环节,因此您可以使用任何旧驱动器。由于操作系统更有可能自行打乱,而不是驱动器可能自毁,因此您很快就会了解在此处保留备份的重要性。
换句话说:“您的任务,如果您选择接受它,是保持此分区正常工作。保修将在 10 秒内自毁...”
最近有人要求我证明我在这里的说法。首先,我并不是说 DOS 和 Windows 是糟糕的操作系统借口。其次,有各种法律问题需要考虑。说最后两句话之间存在联系仅仅是偏执狂的胡言乱语。当然。相反,我将为尊敬的读者提供一些关键词:DOS 4.0、DOS 6.x 以及各种驱动器压缩工具,这些工具将保持匿名。
自然是越快越好,但 Linux 的幸运安装者通常有几个速度和可靠性各异的磁盘,因此,即使本文档将性能描述为“快”和“慢”,也只是一个粗略的指南,因为不可能进行更精细的粒度划分。即便如此,还是有一些细节应该牢记
这实际上是几个术语的相当模糊的混合:CPU 负载、传输设置开销、磁盘寻道时间和传输速率。调优的本质在于没有固定的最佳状态,并且在大多数情况下,价格是决定因素。CPU 负载仅对于 CPU 自己进行传输的 IDE 系统才重要,但对于 SCSI 系统而言通常较低,有关实际数字,请参阅 SCSI 文档。磁盘寻道时间也很小,通常在毫秒范围内。但是,如果您在 SCSI 上使用命令队列,则这不是问题,在 SCSI 上,您可以重叠命令,使总线始终保持繁忙。新闻假脱机是一个特例,它由大量通常很小的文件组成,因此在这种情况下,寻道时间可能会变得更加重要。
这里有两个主要的参数值得关注
通常以读/写头从一个磁道寻道到另一个磁道的平均时间来指定。当处理大量小文件(例如在假脱机文件中找到的文件)时,此参数很重要。在所需的扇区旋转到磁头下方的位置之前,还存在额外的寻道延迟。此延迟取决于驱动器的角速度,这就是为什么通常为驱动器引用此参数的原因。常见值为 4500、5400 和 7200 RPM(每分钟转数)。较高的 RPM 可以减少寻道时间,但成本很高。此外,已知以 7200 RPM 工作的驱动器会产生噪音并产生大量热量,如果您要构建大型阵列或“磁盘农场”,则应牢记这一因素。最近,以 10000 RPM 工作的驱动器已进入市场,这里的散热要求甚至更加严格,并给出了最小气流数据。
通常以每秒兆字节数指定。当处理必须传输的大文件时,此参数很重要。库文件、字典和图像文件就是这样的例子。具有高转速的驱动器通常也具有快速传输速率,因为对于相同的扇区密度,传输速率与角速度成正比。
因此,仔细阅读驱动器的规格非常重要,并注意最大传输速度通常是为从板载缓存(突发速度)而不是直接从盘片(持续速度)传输而引用的。另请参阅关于电源和散热的章节。
自然没有人想要低可靠性的磁盘,但最好将旧磁盘视为不可靠的。此外,对于 RAID 目的(请参阅相关信息),建议使用混合磁盘集,以使同时发生磁盘崩溃的可能性降低。
到目前为止,我只收到一份关于文件系统完全故障的报告,但这里不稳定的硬件似乎是造成问题的原因。
如今磁盘很便宜,但人们仍然低估了驱动器内容价值。如果您需要更高的可靠性,请确保更换旧驱动器并保留备件。驱动器可以或多或少地连续工作多年并不罕见,但最终导致驱动器损坏的通常是电源循环。
平均文件大小对于确定最合适的驱动器参数非常重要。大量小文件使平均寻道时间变得重要,而对于大文件,传输速度更为重要。SCSI 设备中的命令队列对于处理大量小文件非常方便,但对于传输而言,EIDE 与 SCSI 之间的差距并不太大,并且通常比 SCSI 便宜得多。