文件存储结构(FHS标准)

在Linux系统中,目录、字符设备、块设备、套接字、打印机等都被抽象成了文件,即“Linux系统中一切都是文件”。既然平时我们打交道的都是文件,那么又应该如何找到它们呢?在Windows操作系统中,想要找到一个文件,我们要依次进入该文件所在的磁盘分区(假设这里是D盘),然后在进入该分区下的具体目录,最终找到这个文件。但是在Linux系统中并不存在C/D/E/F等盘符,Linux系统中的一切文件都是从“根(/)”目录开始的,并按照文件系统层次化标准(FHS)采用树形结构来存放文件,以及定义了常见目录的用途。另外,Linux系统中的文件和目录名称是严格区分大小写的。例如,root、rOOt、Root、rooT均代表不同的目录,并且文件名称中不得包含斜杠(/)。Linux系统中的文件存储结构如图所示。

linux SMBIOS 存储结构 linux文件系统存储结构_x系统


FHS定义了用户应该把什么类型的文件文件存放到什么位置,但用户不一定要遵守,这里只是定义而非规定。Linux系统中常见的目录名称以及相应内容

linux SMBIOS 存储结构 linux文件系统存储结构_linux SMBIOS 存储结构_02

物理设备命名规则(udev)

在Linux系统中一切都是文件,硬件设备也不例外。既然是文件,就必须有文件名称。系统内核中的udev设备管理器会自动把硬件名称规范起来,目的是让用户通过设备文件的名字可以猜出设备大致的属性以及分区信息等;这对于陌生的设备来说特别方便。另外,udev设备管理器的服务会一直以守护进程的形式运行并侦听内核发出的信号来管理/dev目录下的设备文件。Linux系统中常见的硬件设备的文件名称如表所示。

linux SMBIOS 存储结构 linux文件系统存储结构_linux SMBIOS 存储结构_03


由于现在的IDE设备已经很少见了,所以一般的硬盘设备都会是以“/dev/sd”开头的。而一台主机上可以有多块硬盘,因此系统采用a~p来代表16块不同的硬盘(默认从a开始分配,如果超过26个硬盘,那么前26个命名sd[a-z],第27-52个命名为sd[aa-az],第53-78个命名为sd[ba-bz],依此类推)而且硬盘的分区编号也很有讲究:

  1. 主分区或扩展分区的编号从1开始,到4结束;
  2. 逻辑分区从编号5开始。

注意两点

  1. 存储设备的名称从a开始按序命名,是由系统内核的识别顺序决定的,与设备在第几个插槽无关。
  2. 分区编号并不代表分区个数,分区的数字编码不一定是强制顺延下来的,也有可能是手工指定的。

硬盘命名规则

linux SMBIOS 存储结构 linux文件系统存储结构_文件名_04


正是因为计算机有了硬盘设备,我们才可以在玩游戏的过程中或游戏通关之后随时存档,而不用每次重头开始。硬盘设备是由大量的扇区组成的,每个扇区的容量为512字节。其中第一个扇区最重要,它里面保存着主引导记录与分区表信息。就第一个扇区来讲,主引导记录需要占用446字节,分区表为64字节,结束符占用2字节;其中分区表中每记录一个分区信息就需要16字节,这样一来最多只有4个分区信息可以写到第一个扇区中,这4个分区就是4个主分区。第一个扇区中的数据信息如图所示。

linux SMBIOS 存储结构 linux文件系统存储结构_x系统_05

文件系统与数据资料

常见的文件系统

Ext3:是一款日志文件系统,能够在系统异常宕机时避免文件系统资料丢失,并能自动修复数据的不一致与错误。然而,当硬盘容量较大时,所需的修复时间也会很长,而且也不能百分之百地保证资料不会丢失。它会把整个磁盘的每个写入动作的细节都预先记录下来,以便在发生异常宕机后能回溯追踪到被中断的部分,然后尝试进行修复。
Ext4:Ext3的改进版本,作为RHEL 6系统中的默认文件管理系统,它支持的存储容量高达1EB(1EB=1,073,741,824GB),且能够有无限多的子目录。另外,Ext4文件系统能够批量分配block块,从而极大地提高了读写效率。
XFS:是一种高性能的日志文件系统,而且是RHEL 7中默认的文件管理系统,它的优势在发生意外宕机后尤其明显,即可以快速地恢复可能被破坏的文件,而且强大的日志功能只用花费极低的计算和存储性能。并且它最大可支持的存储容量为18EB,这几乎满足了所有需求。

1.inode存放文件的权限与属性记录,每个文件占用一个独立的inode表格,该表格的大小默认为128字节,里面记录着如下信息:

  1. 该文件的访问权限(read、write、execute);
  2. 该文件的所有者与所属组(owner、group);
  3. 该文件的大小(size);
  4. 该文件的创建或内容修改时间(ctime);
  5. 该文件的最后一次访问时间(atime);
  6. 该文件的修改时间(mtime);
  7. 文件的特殊权限(SUID、SGID、SBIT);
  8. 该文件的真实数据地址(point)。

2.block存放文件的实际内容(大小可以为1KB、2KB、4KB)

  1. 文件很小(1KB),但依然会占用一个block,因此会潜在地浪费3KB
  2. 文件很大(5KB),那么会占用两个block(5KB-4KB后剩下的1KB也要占用一个block)。

VFS虚拟文件系统

各式各样的文件系统在VFS下隐藏各自的特性和细节,用户在操作文件时就是统一对VFS进行操作,用户无需关心底层的硬盘结构。

linux SMBIOS 存储结构 linux文件系统存储结构_x系统_06