3 Linux 磁盘与文件系统管理

1 认识 Linux 文件系统

Linux 最传统的磁盘文件系统使用的是 ext2

1.1 磁盘组成与分区

  • 磁盘组成
  • 圆形的碟片(记录数据)
  • 机械手臂,可擦写碟片上的数据
  • 主轴马达,可以转动碟片,让机械手臂上的磁头在碟片上读写数据

1.2 文件系统特性

  • 文件除了文件实际内容,还有属性。文件系统会将文件数据和属性分别存放在不同的区块,权限和属性放置在 inode 中,实际数据放置到区块中。
  • 超级区块:记录此文件系统的整体信息,包括 inode 与数据区块的总量、使用量、剩余量以及文件系统的格式相关信息。
  • Inode:记录文件的属性,一个文件占一个 inode,同时记录此文件数据所在的区块号码。
  • 数据区块:实际文件内容,文件太大,会占用多个区块。

根据数据存取分为两种文件系统:

索引式文件系统(indexed allocation)
每个 inode与block都有编号,而每个文件都会占用一个inode,inode 内则有文件数据放置的block号码。
如下图所示,文件系统先格式化出inode与block的区块,假设某一个文件的属性与权限数据是放置到inode4号,而这个inode记录了文件数据的实际放置点为2、7、13、15这四个block号码,操作系统就能够据此来排列磁盘的读取顺序,可以一次性将四个block内容读出来。那么数据的读取就如同下图中的箭头所指定的模样了。这种数据存取的方法我们称为索引式文件系统。

inode/block数据存取示意图

FAT文件系统
U盘使用的文件系统一般为FAT格式。FAT文件系统并没有inode,所以没有办法将这个文件的所有block在一开始就读取出来。每个block号码都记录在前一个block当中,他的读取方式如下图所示:

fat数据存取数据图

假设文件的数据依序写入1->7->4->15号这四个block号码中,但这个文件系统没有办法一口气就知道四个block的号码,他得要一个一个的block读出后,才会知道下一个block在何处。

1.3 Linux的ext2文件系统

文件系统一开始就将inode和数据区块规划好了,除非重新格式化,否则inode与数据区块规定后就不在变动。
ext2文件系统格式化的时候区分多个区块群组,每个区块群组都有独立的数据区块、inode、超级区块系统,比较好管理。

1.3.1 data block(数据区块)

用来放置文件数据,在ext2文件系统中所支持的区块有1K 2K 4K 三种。

限制

  • block的大小与数量在格式化完就不能够再改变了(除非重新格式化);
  • 每个block内最多只能够放置一个文件的数据;
  • 如果文件大于block的大小,则一个文件会占用多个block数量;
  • 若文件小于block,则该 block的剩余容量就不能够再被使用了(磁盘空间会浪费)。

1.3.2 inode table

记录内容

  • 该文件的存取模式(read/write/excute)
  • 该文件的拥有者与群组(owner/group)
  • 该文件的容量
  • 该文件创建或状态改变的时间(ctime)
  • 最近一次的读取时间(atime)
  • 最近修改的时间(mtime)
  • 定义文件特性的旗标(flag),如 SetUID...
  • 该文件真正内容的指向 (pointer)

特点
每个 inode 固定 128B,每个文件只占用一个 inode ,文件系统能够建立的文件数量和 inode 数量有关,系统读取文件先找到 inode,分析 inode 的权限和用户是否符合,符合才读取内容。

1.3.2 Superblock(超级区块)

没有超级区块,就没有这个文件系统,文件系统的基本新都存储在这。

记录内容

  • 数据区块月inode的总量
  • 未使用与已使用inode与数据区块数量
  • 数据区块与inode大小
  • 文件系统的挂载时间、最近一次写入数据的时间、最近一次检验磁盘的时间等文件系统相关信息。
  • 一个有效位数值,若此文件系统已被挂载,有效位为0,若未被挂载,有效位为1。

2 文件系统简单操作

2.1 磁盘与目录的容量

df
列出文件系统的整体磁盘使用量

df [-ahikHTm] [目录或文件名]
选项与参数:
-a:列出所有的文件系统,包括系统特有的/proc等文件系统;
-k:以KBytes的容量显示各文件系统;
-m:以MBytes的容量显示各文件系统;
-h:以人们较易阅读的GBytes,MBytes,KBytes等格式自行显示;
-H:以M=1000K取代M=1024K的进位方式;
-T:连同该partition的filesystem名称(例如xfs)也列出;
-i:不用磁盘容量,而以inode的数量来显示
示例

字段含义:

  • 文件系统:代表该文件系统是在哪个partition,所以列出设备名称;
  • 1k-块:说明下面的数字单位是1KB,可利用-h或-m来改变容量;
  • 已用:使用掉的磁盘空间
  • 可用:剩下的磁盘空间大小;
  • 已用%:磁盘的使用率,如果使用率高达90%以上时,需要注意;
  • 挂载点:磁盘挂载的目录

du
评估文件系统的磁盘使用量(常用在推估目录所占容量)

du [-ahskm] 文件或目录名称
选项与参数:
-a:列出所有的文件与目录容量,因为默认仅统计目录下面的文件量而已。
-h:以人们较易读的容量格式(G/M)显示;
-s:列出总量而已,而不列出每个各别的目录占用容量;
-S:不包括子目录下的总计,与-s有点差别。
-k:以KBytes列出容量显示;
-m:以MBytes列出容量显示;

df和du的区别
参考Linux du命令和df命令区别

摘自《鸟哥的Linux私房菜》,更多精彩参考 http://cn.linux.vbird.org/
参考 https://blog.csdn.net/wisgood/article/details/17316663

你可能感兴趣的:(3 Linux 磁盘与文件系统管理)