Unix系统编程读书笔记-文件系统

620次阅读  |  发布于3年以前

文件系统

设备专用文件

在内核中,每种设备类型都有与之相对应的设 备驱动程序,用来处理设备的所有 I/O 请求。设备驱动程序属内核代码单元,可执行一系列操 作,(通常)与相关硬件的输入/输出动作相对应。由设备驱动程序提供的 API 是固定的,包含的操作对应于系统调用 open()、close()、read()、write()、mmap()以及 ioctl()。

可将设备划分为以下两种类型

设备 ID:

磁盘和分区

可将每块磁盘划分为一个或多个(不重叠的)分区。内核则将每个分区视为位于/dev 路 径下的单独设备。

磁盘分区可容纳任何类型的信息

文件系统

从 Linux 的专有文件/proc/filesystems 中可以查看当前为内核所知的文件系统类型

传统文件系统 ext2文件系统(非日志文件系统)。在文件系统中,用来分配空间的基本单位是逻辑块,亦即文件系统所在磁盘设备上若干连续的物理块。

文件系统由以下几部分组成

-w500

i 节点

针对驻留于文件系统上的每个文件,文件系统的 i 节点表会包含一个 i 节点。

i 节点所维护的信息包含

虚拟文件系统VFS

虚拟文件系统 (VFS,有时也称为虚拟文件交换)是一种内核特性,通过为文件系统操作创建抽象层来解决各种底层文件系统的差异性。

-w500

VFS 接口的操作与涉及文件系统和目录的所有常规系统调用相对应,这些系统调用有 open()read()write()lseek()close()truncate()stat()vmount()umount()mmap()mkdir()link()unlink()symlink() 以及 rename()

日志文件系统

采用日志文件系统,则无需在系统崩溃后对文件进行漫长的一致性检查。

在实际更新文件之前,日志文件系统会记录元数据更新(还可有选择地记录数据更新和文件 系统更新)。这也意味着,一旦系统崩溃,系统可以重放(replay)日志文件,并迅速将文件 系统恢复到一致状态。

日志文件系统最为昭著的臭名在于增加了文件更新的时间,当然,良好的设计可以降低这方面的开销。

Linux支持的日志文件系统:

文件系统的挂载和卸载

系统调用 mount()和 umount()运行特权级进程(CAP_SYS_ADMIN)以挂载或卸载文件系统。

fstab格式

-w240

相关系统调用:

mount()系统调用将由 source 指定设备所包含的文件系统,挂载到由 target 指定的目录下

-w806

umount()系统调用用于卸载已挂载的文件系统

-w801

系统调用 umount2()是 umount()的扩展版。 通过 flags 参数, umount2()可对卸载操作施以 更精密的控制

-w803

虚拟内存文件系统:tmpfs

该文件系统不但使用 RAM, 而且在 RAM 耗尽的情况下,还会利用交换空间。

要创建 tmpfs 文件系统,请使用如下形式的命令

-w307

特殊用途

获得与文件系统有关的信息:statvfs()

statvfs()和 fstatvfs()库函数能够获得与已挂载文件系统有关的信息

-w804

参数导出的返回值statvfs结构体

-w801

许多原生 UNIX 和 Linux 文件系统,都支持为超级用户预留一部分文件系统块,如 此一来,即便在文件系统空间耗尽的情况下,超级用户仍可以登录系统解决故障。

Copyright© 2013-2020

All Rights Reserved 京ICP备2023019179号-8