Linux文件系统概要介绍

作者: 郭子渝 分类: 红帽认证 发布时间: 2020-03-04 19:50 本文共3797个字,阅读需要10分钟。

本文所述关于文件管理的系列文章主要是对唐波老师所讲述的文件系统管理知识的整理。Linux可以支持不同的文件系统,它源于unix文件系统,也是unix文件系统的一大特色。本文先介绍文件系统的基本原理,最后加入文件系统的发展历史,以了解Linux文件系统的概要和发展

基本原理

我们知道文件最终是保存在硬盘上的。硬盘最基本的组成部分是由坚硬金属材料制成的涂以磁性介质的盘片,不同容量硬盘的盘片数不等。每个盘片有两面,都可记录信息。盘片被分成许多扇形的区域,每个区域叫一个扇区,每个扇区可存储128×2的N次方(N=0.1.2.3)字节信息。在DOS中每扇区是128×2的2次方=512字节,盘片表面上以盘片中心为圆心,不同半径的同心圆称为磁道。

硬盘中,不同盘片相同半径的磁道所组成的圆柱称为柱面。磁道与柱面都是表示不同半径的圆,在许多场合,磁道和柱面可以互换使用,我们知道,每个磁盘有两个面,每个面都有一个磁头,习惯用磁头号来区分。

扇区,磁道(或柱面)和磁头数构成了硬盘结构的基本参数,这些参数可以得到硬盘的容量,计算公式为:

存储容量=磁头数×磁道(柱面)数×每道扇区数×每扇区字节数

基本要点:

  1. 硬盘有数个盘片,每盘片两个面,每个面一个磁头
  2. 盘片被划分为多个扇形区域即扇区
  3. 同一盘片不同半径的同心圆为磁道
  4. 不同盘片相同半径构成的圆柱面即柱面
  5. 公式: 存储容量=磁头数×磁道(柱面)数×每道扇区数×每扇区字节数
  6. 信息记录可表示为:××磁道(柱面),××磁头,××扇区

那么这些空间又是怎么管理起来的呢?unix/linux使用了一个简单的方法。 

它将磁盘块分为以下四个部分:

  • superblock:记录文件系统的整体信息,包括 inode 和 block 的总量、使用量、剩余量,以及文件系统的格式与相关信息等;
  • block bitmap:记录 block 是否被使用的位图。分配空闲的Inode号码
  • inode:一个文件占用一个 inode,记录文件的属性,同时记录此文件的内容所在的 block 编号;
  • block:记录文件的内容,文件太大时,会占用多个 block。
Linux文件系统概要介绍-郭子渝的博客

文件读取

对于 XFS文件系统,当要读取一个文件的内容时,文件系统先在 inode 中查找文件内容所在的所有 block,然后把所有 block 的内容读出来。

Linux文件系统概要介绍-郭子渝的博客

而对于 古老的FAT 文件系统,它没有 inode,每个 block 中存储着下一个 block 的编号。

Linux文件系统概要介绍-郭子渝的博客

磁盘碎片

指一个文件内容所在的 block 过于分散,导致磁盘磁头移动距离过大,从而降低磁盘读写性能。

block

数据块:实际文件数据存储

Inode(元数据信息)

我认为,在大部分情况下,元数据比数据本身更重要,数据就好比一座房子,元数据就是这个房子的产权证明,记载了这个文件是谁的,谁可以读取或修改这个文件,我缺的是房子嘛,我缺的是我自己的房子!不是路边的房子,笑~

我们可以使用stat命令来对Inode信息进行查询

[gzy@notepad ~]$ stat 1.sh 
Linux文件系统概要介绍-郭子渝的博客

inode 具体包含以下信息:

文件大小:以字节为单位

硬连接相关介绍在我的另一篇博文,详细请点击超链接,您可以读完这篇博文再去阅读硬连接相关的内容。

文件类型:普通文件,目录,符号链接,因为linux一切皆文件,所以还有一些特殊类型在/dev目录下以黑底黄字的形式出现

Linux文件系统概要介绍-郭子渝的博客

他们分别是块特殊文件和字符特殊文件,块特殊文件一般是硬盘,u盘等存储设备,字符特殊文件是指终端和打印机设备,两者的区别是块设备在读取和写入的时候可以随机,字符特殊文件不能随机,一篇100字文章如果把文字随机重组,那还能看嘛!

Linux文件系统概要介绍-郭子渝的博客

权限 (read/write/excute)

权限位中的第一位是文件类型的简称,常见的有以下类型:

  • b:块特殊文件
  • c:字符特殊文件
  • l:符号链接)
  • d:目录
  • – :普通文件

后面的9位中,前三位代表所有者的权限,中间三位代表所属组权限,后三位代表其他人权限,

普通权限:r代表读取权限,w代表写权限,x代表执行权限,对于目录,r代表是否可以读取该目录的文件信息,w代表可以创建和删除目录文件,x代表可以进入目录,特殊权限将在之后的博文中讲述。

普通权限还有一种表示方法是使用数字表示,r=4,w=2,x=1,如7代表rwx:4+2+1,6代表读取和写入:4+2

拥有者与群组 (owner/group):文件所属用户

建立或状态改变的时间 (ctime):文件的状态(权限、属性)更新就会更新

最近读取时间 (atime):文件访问时更新

最近修改时间 (mtime):读取文件时就会更新。

Selinux标签:selinux比较复杂,在之后的博文中讲述

该文件真正内容的指向 (pointer)。

注意:Inode中不包含文件名

inode 具有以下特点:

  • 每个 inode 大小均固定为 128 bytes
  • 每个文件都仅会占用一个 inode。

使用df -ih命令可以查看Inode剩余量

[gzy@notepad ~]$ df -ih
Linux文件系统概要介绍-郭子渝的博客

如果Inode号被占满,会导致虽然文件系统有剩余空间,但是无法新建文件的情况,黑客可能会通过http,ftp等方式上传大量碎文件,0KB文件也是一个文件,一样需要一个Inode编号,结果就是导致正常用户无法写入和保存数据。这是关于文件系统无法写入的一条排错思路

通过xfs_admin命令可以查看一个文件系统的超级块信息

[root@notepad ~]# xfs_admin -f /dev/centos/root
xfs_admin> sb
xfs_admin> print
magicnum = 0x58465342
blocksize = 4096
uuid = 3573c929-569c-4fb2-abed-c5d77f96de24
sectsize = 512   ##扇区大小
inodesize = 512
inopblock = 8
fname = "\000\000\000\000\000\000\000\000\000\000\000\000"
........
由于信息过多,我没有全部粘贴出来,作为系统管理员,不是系统开发,也并不需要了解那么多。

目录

建立一个目录时,会分配一个 inode 与至少一个 block。block 记录的内容是目录下所有文件的 inode 编号以及文件名。

可以看到文件的 inode 本身不记录文件名,文件名记录在目录中,因此新增文件、删除文件、更改文件名这些操作与目录的写权限有关。

Linux文件系统概要介绍-郭子渝的博客

日志

如果突然断电,那么文件系统会发生错误,例如断电前只修改了 block bitmap,而还没有将数据真正写入 block 中。

ext3/4和xfs 文件系统引入了日志功能,可以利用日志来修复文件系统。

在一些nvme的机器上,由于ext和xfs系统较为古老,nvme硬盘速度很快,系统在关机的时候,硬盘自动脱挂,但是文件系统还没反应过来,导致下次开机的时候文件系统误以为硬盘有问题,开机的时候没有显示报错,只有一个#号(centos8已经修复此问题,但是在centos7依旧存在

此时我们可以执行如下命令修复文件系统,解决问题

xfs_repair /dev/(块设备路径)  ##xfs文件系统修复
可选参数:
  -v 显示详细输出
  -n 不修复,仅检查文件系统是否损坏。
fsck.ext2 /dev/(块设备路径)  ##ext2文件系统修复
fsck.ext3 /dev/(块设备路径)  ##ext3文件系统修复
fsck.ext4 /dev/(块设备路径)  ##ext4文件系统修复
可选参数:
   -p                   自动修复(不询问)
   -n                   不对文件系统做任何更改
   -y                   对所有询问都回答“是”
   -f                   强制进行检查,即使文件系统被标记为“没有问题”
   -v                   显示更多信息

目录配置

为了使不同 Linux 发行版本的目录结构保持一致性,Filesystem Hierarchy Standard (FHS) 规定了 Linux 的目录结构。

  • / (root, 根目录)
  • /boot 系统启动文件,例如Linux内核、引导程序等。
  • /usr (unix software resource):所有系统默认软件都会安装到这个目录,大部分是红帽官方软件;
  • /var (variable):存放系统或程序运行过程中的数据文件。
  • /bin 存放可执行文件。很多命令就对应/bin目录下的某个程序,例如 ls、cp、mkdir。/bin目录对所有用户有效。centos8的/bin软链接到/usr/bin目录下
  • /lib和/lib64主要包含共享库文件,类似于Windows下的DLL;有时也会包含内核相关文件。centos8的/bin软链接到/usr/lib和/usr/lib64目录下
  • /dev硬件驱动程序。例如声卡、磁盘驱动等,还有如 /dev/null、/dev/console、/dev/zero、/dev/full 等文件。
  • /etc 主要包含系统配置文件和用户、用户组配置文件。
  • /home用户工作目录(主目录),每个用户都会分配一个目录。
  • /mnt和/mndia用于临时挂载文件系统。这些目录一般是用于存放挂载储存设备的挂载目录的,例如挂载CD-ROM的cdrom目录。
  • /opt下,是一些第三方的安装目录。
  • /proc操作系统运行时,进程(正在运行中的程序)信息及内核信息(比如cpu、硬盘分区、内存信息等)存放在这里。/proc目录伪装的文件系统proc的挂载目录,proc并不是真正的文件系统。
  • /tmp临时文件目录,系统重启后不会被保存。
  • /sys 全局设备结构体系,包含所有被发现的注册在各种总线上的各种物理设备。
Linux文件系统概要介绍-郭子渝的博客

如果觉得我的文章对您有用,请订阅我的博客。您的支持将鼓励我继续创作!
Scroll Up