3.6.磁盘结构

FreeBSD 使用的最小组织单元是文件名。文件名区分大小写,这意味着readme.txtREADME.TXT是两个不同的文件。FreeBSD 不使用文件的扩展名来确定文件是程序、文档还是其他形式的数据。

文件存储在目录中。一个目录可能不包含任何文件,也可能包含许多文件。目录还可以包含其他目录,允许在彼此之间形成目录的层次结构以组织数据。

通过给出文件或目录名称,后跟斜杠/,再跟上任何其他必要的目录名称,来引用文件和目录。例如,如果目录foo包含一个目录bar,该目录包含文件readme.txt,则文件的完整名称或路径foo/bar/readme.txt。请注意,这与 Windows® 不同,Windows 使用\来分隔文件和目录名称。FreeBSD 不使用驱动器号或其他驱动器名称在路径中。例如,在 FreeBSD 上,不会键入c:\foo\bar\readme.txt

3.6.1. 文件系统

目录和文件存储在文件系统中。每个文件系统在最顶层都有一个目录,称为该文件系统的根目录。这个根目录可以包含其他目录。一个文件系统被指定为根文件系统/。每个其他文件系统都被挂载在根文件系统下。无论 FreeBSD 系统上有多少个磁盘,每个目录都似乎是同一磁盘的一部分。

考虑三个文件系统,称为ABC。每个文件系统都有一个根目录,其中包含两个其他目录,称为A1A2(以及类似地B1B2C1C2)。

A称为根文件系统。如果使用ls(1)查看此目录的内容,它将显示两个子目录,A1A2。目录树如下:

一个文件系统必须以目录形式被挂载到另一个文件系统上。当把文件系统 B 挂载到 A1 的目录上时,B 的根目录变成了 A1B 中的目录也相应地发生改变:

任何位于 B1B2 目录下的文件都必须经过路径 /A1/B1/A1/B2 才能到达。任何在 /A1 中原有的文件都被暂时隐藏了。如果把 BA卸载 下来,它们将重新出现。

如果 B 被挂载在 A2 上,那么图片会是这样的:

而路径将分别为 /A2/B1/A2/B2

文件系统可以被挂载在其他文件的之上。继续上一个例子,文件系统 C 可以挂载在文件系统 B 的 B1 目录之上,从而形成这种安排:

或者可以直接挂载 C 到文件系统 AA1 目录下:

3.6.2. 磁盘分区

完全有可能只有一个大的根文件系统,而不需要创建其他文件系统。这种方法有一些缺点和一个优势。

多个文件系统的好处:

  • 不同的文件系统可以具有不同的挂载选项。例如,可以以只读方式挂载根文件系统,使用户无法无意中删除或编辑关键文件。将可写入的用户文件系统(例如/home)与其他文件系统分开允许将它们挂载为nosuid。这个选项可以防止存储在文件系统上的可执行文件上的suid/guid位生效,从而可能提高安全性。

  • FreeBSD 会根据文件系统的使用方式自动优化文件在文件系统上的布局。因此,包含许多经常写入的小文件的文件系统将与包含较少、较大文件的文件系统具有不同的优化。通过使用一个大的文件系统,这种优化会失效。

  • 如果断电,FreeBSD 的文件系统是健壮的。但是,如果在关键时刻断电,仍然可能损坏文件系统的结构。通过将数据分割到多个文件系统,系统更有可能重新启动,从而更容易根据需要从备份中恢复。

单一文件系统的好处:

  • 文件系统是固定大小的。如果在安装 FreeBSD 时创建文件系统并为其指定特定大小,稍后可能会发现需要增加分区的大小。这不容易在不备份的情况下完成,需要使用新大小重新创建文件系统,然后恢复备份的数据。

重要

FreeBSD 有growfs(8)这个命令,可以动态增加文件系统的大小,消除了这个限制。文件系统只能扩展到它所在分区的空闲空间中。如果分区之后有空间,可以使用gpart(8)扩展分区。如果分区是虚拟磁盘上的最后一个分区,并且扩展了磁盘,则可以扩展分区。

3.6.2. 磁盘分区

文件系统包含在分区中。磁盘使用多种分区方案划分为分区;参见手动分区。较新的方案是 GPT;较旧的基于 BIOS 的计算机使用 MBR。GPT 支持将磁盘划分为具有大小、偏移和类型的分区。它支持大量的分区和分区类型,建议在可能的情况下使用它。GPT 分区使用磁盘名称及后缀,其中后缀为p1表示第一个分区,p2表示第二个,以此类推。然而,MBR 仅支持少量分区。在 FreeBSD 中,MBR 分区称为slices。slices 可以用于不同的操作系统。FreeBSD slices 使用 BSD 标签进行子分区划分(参见bsdlabel(8))。

分片号跟随设备名称,以s为前缀,从 1 开始。因此,"da0s1"是第一个 SCSI 驱动器上的第一个分片。在一个磁盘上只能有四个物理分片,但在适当类型的物理分片内可以有逻辑分片。这些扩展分片从 5 开始编号,因此"ada0s5"是第一个 SATA 磁盘上的第一个扩展分片。这些设备用于预计将占用分片的文件系统。

每个 GPT 或 BSD 分区只能包含一个文件系统,这意味着文件系统通常由其在文件系统层次结构中的典型挂载点或它们所包含的分区的名称来描述。

FreeBSD 还使用磁盘空间来提供交换空间以提供虚拟内存。这使得计算机的行为就像它拥有比实际更多的内存一样。当 FreeBSD 内存不足时,它将一些当前未使用的数据移动到交换空间,并在需要时将其移回(将其他内容移到外面)。这称为分页

某些 BSD 分区与它们相关联的特定约定。

分区约定

a

通常包含根文件系统。

b

通常包含交换空间。

c

通常与包含的分片大小相同。这可让需要处理整个分片的实用程序(如坏块扫描仪)在c分区上工作。通常不会在此分区上创建文件系统。

d

分区d曾经有一个与之关联的特殊含义,尽管现在已经消失,d可能像任何普通分区一样工作。

分片和“危险专用”物理驱动器包含 BSD 分区,这些分区用字母ah表示。这个字母附加到设备名称后,因此"da0a"是第一个“危险专用”驱动器(da)上的a分区。"ada1s3e"是第二个 SATA 磁盘驱动器的第三个分片中的第五个分区。

最后,系统上的每个磁盘都被识别。磁盘名称以指示磁盘类型的代码开头,然后是一个数字,表示它是第几个磁盘。与分区和分片不同,磁盘编号从 0 开始。常见的代码列在磁盘设备名称中。

在引用分片中的分区时,包括磁盘名称、s、分片号,然后是分区字母。示例显示在磁盘、分片和分区名称示例中。GPT 分区包括磁盘名称、p,然后是分区号。

磁盘的概念模型展示了使用 MBR 分片的磁盘布局的概念模型。

在安装 FreeBSD 时,如果使用 MBR,请配置磁盘分片,并在分片内创建要用于 FreeBSD 的分区。如果使用 GPT,请为每个文件系统配置分区。在任何情况下,在每个分区中创建文件系统或交换空间,并决定将每个文件系统挂载到何处。有关操作分区的信息,请参阅gpart(8)

表 4. 磁盘设备名称

驱动类型驱动设备名称

SATA 和 IDE 硬盘

ada

SCSI 硬盘和 USB 存储设备

da

NVMe 存储

nvdnda

SATA 和 IDE 光驱

cd

SCSI 光驱

cd

软盘驱动器

fd

SCSI 磁带驱动器

sa

RAID 驱动器

例如,Adaptec® AdvancedRAID 的aacd,Mylex® 的mlxdmlyd,AMI MegaRAID® 的amrd,Compaq Smart RAID 的idad,3ware® RAID 的twed

表 5. 磁盘、分片和分区名称示例

名称含义

ada0s1a

第一个 SATA 磁盘(ada0)上第一个分片(s1)的第一个分区(a)。

da1s2e

第二个 SCSI 磁盘(da1)上第二个分片(s2)的第五个分区(e)。

示例 13. 磁盘的概念模型

这个图片展示了连接到系统的第一个 SATA 磁盘的 FreeBSD 视图。假设磁盘大小为 250GB,并包含一个 80GB 的分片和一个 170GB 的分片(MS-DOS® 分区)。第一个分片包含一个 Windows® NTFS 文件系统,C:,第二个分片包含一个 FreeBSD 安装。这个示例 FreeBSD 安装有四个数据分区和一个交换分区。

这四个分区分别用于保存文件系统。分区a用于根文件系统,d用于/var/e用于/tmp/f用于/usr/。分区字母c指的是整个分片,因此不用于普通分区。

最后更新于

FreeBSD 中文社区