在内核中,每种设备类型都有与之相对应的设 备驱动程序,用来处理设备的所有 I/O 请求。设备驱动程序属内核代码单元,可执行一系列操 作,(通常)与相关硬件的输入/输出动作相对应。由设备驱动程序提供的 API 是固定的,包含的操作对应于系统调用 open()、close()、read()、write()、mmap()以及 ioctl()。
可将设备划分为以下两种类型
设备 ID:
可将每块磁盘划分为一个或多个(不重叠的)分区。内核则将每个分区视为位于/dev 路 径下的单独设备。
磁盘分区可容纳任何类型的信息
交换区域:供内核的内存管理之用
可使用 Linux 专有文件/proc/swaps 来查看系统中当前已激活交换区域的信息
从 Linux 的专有文件/proc/filesystems 中可以查看当前为内核所知的文件系统类型
传统文件系统 ext2文件系统(非日志文件系统)。在文件系统中,用来分配空间的基本单位是逻辑块,亦即文件系统所在磁盘设备上若干连续的物理块。
文件系统由以下几部分组成
超级块:紧随引导块之后的一个独立块,包含与文件系统有关的参数信息
针对驻留于文件系统上的每个文件,文件系统的 i 节点表会包含一个 i 节点。
i 节点所维护的信息包含
虚拟文件系统 (VFS,有时也称为虚拟文件交换)是一种内核特性,通过为文件系统操作创建抽象层来解决各种底层文件系统的差异性。
VFS 接口的操作与涉及文件系统和目录的所有常规系统调用相对应,这些系统调用有 open()
、read()
、write()
、lseek()
、close()
、truncate()
、stat()
、vmount()
、umount()
、mmap()
、mkdir()
、 link()
、unlink()
、symlink()
以及 rename()
。
采用日志文件系统,则无需在系统崩溃后对文件进行漫长的一致性检查。
在实际更新文件之前,日志文件系统会记录元数据更新(还可有选择地记录数据更新和文件 系统更新)。这也意味着,一旦系统崩溃,系统可以重放(replay)日志文件,并迅速将文件 系统恢复到一致状态。
日志文件系统最为昭著的臭名在于增加了文件更新的时间,当然,良好的设计可以降低这方面的开销。
Linux支持的日志文件系统:
系统调用 mount()和 umount()运行特权级进程(CAP_SYS_ADMIN)以挂载或卸载文件系统。
fstab格式
相关系统调用:
mount()系统调用将由 source 指定设备所包含的文件系统,挂载到由 target 指定的目录下
umount()系统调用用于卸载已挂载的文件系统
系统调用 umount2()是 umount()的扩展版。 通过 flags 参数, umount2()可对卸载操作施以 更精密的控制
该文件系统不但使用 RAM, 而且在 RAM 耗尽的情况下,还会利用交换空间。
要创建 tmpfs 文件系统,请使用如下形式的命令
特殊用途
statvfs()和 fstatvfs()库函数能够获得与已挂载文件系统有关的信息
参数导出的返回值statvfs结构体
许多原生 UNIX 和 Linux 文件系统,都支持为超级用户预留一部分文件系统块,如 此一来,即便在文件系统空间耗尽的情况下,超级用户仍可以登录系统解决故障。
Copyright© 2013-2019