3.6.磁盘结构
最后更新于
最后更新于
FreeBSD 中文社区
FreeBSD 用来查找文件的最小组织单位是文件名。文件名区分大小写,这意味着 readme.txt 和 README.TXT 是两个不同的文件。FreeBSD 不使用文件的扩展名来确定文件是程序、文档还是其他形式的数据。
文件存储在目录中。一个目录可以不包含任何文件,也可以包含成百上千个文件。一个目录还可以包含其他目录,从而产生了在彼此之间组织数据的目录层次结构。
通过给出文件或目录名称,后跟一个斜杠,/,再跟上其他必要的目录名称来引用文件和目录。例如,如果目录 foo 包含一个目录 bar,bar 中包含文件 readme.txt,文件的完整名称或路径是 foo/bar/readme.txt。请注意,这与使用 \ 分隔文件和目录名称的 Windows® 不同。在路径中,FreeBSD 不使用驱动器号或其他驱动器名称。例如,在 FreeBSD 上不会使用 c:\foo\bar\readme.txt。
文件和目录存储在文件系统中。每个文件系统在顶层恰好包含一个目录,称为该文件系统的根目录。这个根目录可以包含其他目录。一个文件系统被指定为根文件系统或 /。其他每个文件系统都被挂载在根文件系统下。无论 FreeBSD 系统上有几个磁盘,每个目录看起来都是同个磁盘的一部分。
假设有三个文件系统,分别称为 A,B 和 C。每个文件系统有一个根目录,其中包含另外两个目录,称为 A1,A2 (类似地还有 B1,B2 和 C1,C2 )。
将 A 称为根文件系统。如果使用 ls(1)查看此目录的内容,它将显示两个子目录,A1 和 A2。目录树看起来像这样:
一个文件系统必须被挂载到另一个文件系统的一个目录上。当将文件系统 B 挂载到目录 A1 时,文件系统 B 的根目录会取代 A1,而 B 中的目录会相应地显示如下:
任何在 B1 或 B2 目录中的文件都可以通过路径 /A1/B1 或 /A1/B2 来访问。任何在 /A1 中的文件都被临时隐藏了。如果 B 从 A 中卸载,它们将重新显示。
如果 B 被挂载到 A2,那么该图表会是这样的:
而路径分别为 /A2/B1 和 /A2/B2。
文件系统可以相互叠加挂载。继续上一个例子,C 文件系统可以安装在 B 文件系统中 B1 目录的顶部,从而形成这种布局:
或者 C 可以直接安装到 A1 文件系统的 A 目录下:
只有一个大型的根文件系统,而未创建其他文件系统是完全有可能的。这种方法有一些缺点及一个优点。
多个文件系统的好处
不同的文件系统可以具有不同的挂载选项。例如,根文件系统可以以只读方式挂载,从而使用户无法因意外中删除或编辑关键文件。将可写用户文件系统(例如 /home )与其他文件系统分离能让它们被挂载为 nosuid。此选项可防止文件系统上存储的可执行文件的 suid / guid 位生效,可能提高安全性。
FreeBSD 能自动根据文件系统的使用方式优化文件的布局。因此,一个包含许多频繁写入的小文件的文件系统会与包含较少、较大文件的文件系统具有不同的优化。如果只有一个大文件系统,则此优化将失效。
如果发生断电,FreeBSD 的文件系统是健壮的。然而,在关键时刻断电仍可能损坏文件系统的结构。通过在多个文件系统上分离数据,系统更有可能重新开机,从而更容易根据需要从备份中恢复。
单一文件系统的好处
| 文件系统是固定大小的。如果你安装 FreeBSD 时创建文件系统,并为其指定特定大小,那么你可能会发现需要扩大分区的大小,而这并不容易实现,除非备份、使用新的大小重新创建文件系统,然后恢复备份数据。||FreeBSD 有命令 growfs(8),它可以在运行时增加文件系统的大小,消除了这一限制。文件系统只能扩展到其所在分区中的空闲空间中。如果分区之后有空间,则可以使用 gpart(8) 来扩展分区。如果分区是虚拟磁盘上的最后一个分区,并且扩展了磁盘,则可以扩展该分区。| | --| --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
文件系统包含在分区中。磁盘使用多种分区方案分成分区;参见 [bsdinstall-part-manual]。较新的方案是 GPT;老的基于 BIOS 的计算机使用 MBR。GPT 支持将磁盘分成具有大小、偏移和类型的分区。它支持大量的分区和分区类型,建议在可能的情况下使用 GPT。GPT 分区使用磁盘名称加后缀,其中后缀为 p1 表示第一个分区,p2 表示第二个分区,依此类推。然而,MBR 仅支持少量的分区。在 FreeBSD 中,MBR 分区被称为 slices。切片可用于不同的操作系统。FreeBSD 切片使用 BSD 标签进一步划分成分区(参见 bsdlabel(8))。
切片号遵循设备名称,前缀为 s,从 1 开始。因此,“da0s1”是第一个 SCSI 硬盘的第一个切片。磁盘上只能有四个物理切片,但可以在适当类型的物理切片内拥有逻辑切片。这些扩展切片的编号从 5 开始,因此“ada0s5”是第一个 SATA 硬盘上的第一个扩展切片。这些设备由期望占用一整块切片的文件系统使用。
每个 GPT 或 BSD 分区只能包含一个文件系统,这意味着文件系统通常由它们在文件系统层次结构中的典型挂载点或它们所包含的分区的名称来说明。
FreeBSD 也可把磁盘空间用作交换空间,以提供虚拟内存。这使得你的计算机可以表现得比实际拥有的内存多得多。当 FreeBSD 内存不足时,它会将一些目前未被使用的数据转移到交换空间,并在需要时将其移回(将其他内容移出)。这称为分页。
一些 BSD 分区有与之相关的特定约定。
a
通常包含根文件系统。
b
通常包含交换空间。
c
通常与包围的切片大小相同。这能让需要处理整个切片的实用程序(例如坏块扫描程序)在 c 分区上工作。文件系统通常不会在此分区上创建。
d
分区 d 以前具有特殊含义,尽管现在已经消失,d 可能像其他普通分区一样工作。
切片和“危险专用”物理驱动器包含 BSD 分区,表示为 a 到 h 的字母。此字母附加到设备名称,因此“da0a”是第一个 da 驱动器上的 a 分区,“ada1s3e”是第二个 SATA 硬盘的第三个切片中的第五个分区。
系统中的每个磁盘都被识别出来。磁盘名称以表示磁盘类型的代码开头,然后是一个数字,表示它是第几个磁盘。与分区和切片不同,磁盘编号从 0 开始。常见代码列在磁盘设备名称中。
在切片中引用分区时,包括磁盘名称, s,切片号,然后是分区字母。示例显示在示例磁盘,切片和分区名称中。GPT 分区包括磁盘名称, p,然后是分区编号。
磁盘的概念模型展示了使用 MBR 切片的磁盘布局的概念模型。
安装 FreeBSD 时,如果使用 MBR,请配置磁盘切片,并在切片内创建用于 FreeBSD 的分区。如果使用 GPT,请为每个文件系统配置分区。在任一情况下,在每个分区中创建文件系统或交换空间,并决定将每个文件系统挂载到何处。有关操作分区的信息,请参阅 gpart(8)。
磁盘设备名称表 3
SATA 和 IDE 硬盘驱动器
ada
SCSI 硬盘驱动器和 USB 存储设备
da
NVMe 存储
nvd 或 nda
SATA 和 IDE 光盘驱动器
cd
SCSI CD-ROM 驱动器
cd
软盘
fd
SCSI 磁带驱动器
sa
RAID 驱动器
示例包括 Adaptec® AdvancedRAID 的 aacd,Mylex® 的 mlxd 和 mlyd,AMI MegaRAID® 的 amrd,Compaq Smart RAID 的 idad,3ware® RAID 的 twed。
表 4。样本磁盘、切片和分区名称
ada0s1a
第一个切片上的第一个分区( a )位于第一个 SATA 磁盘( ada0 )上的第一个位置( s1 )。
da1s2e
第二个 SCSI 硬盘的第二个切片( s2 )上的第五个分区( e )。
磁盘的概念模型示例 12。
该图显示了 FreeBSD 对系统连接的第一个 SATA 硬盘的视图。假设该硬盘的大小为 250 GB,并包含一个 80 GB 切片和一个 170 GB 切片(MS-DOS®分区)。第一个切片包含一个 Windows® NTFS 文件系统,C:,而第二个切片包含一个 FreeBSD 安装。这个示例 FreeBSD 安装有四个数据分区和一个交换分区。
四个分区分别保存一个文件系统。分区 a 用于根文件系统,d 用于 /var/,e 用于 /tmp/,f 用于 /usr/。分区字母 c 指的是整个片区,因此不用于普通分区。