美文网首页
3 Linux 磁盘与文件系统管理

3 Linux 磁盘与文件系统管理

作者: 少博先生 | 来源:发表于2019-10-27 00:55 被阅读0次

    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 磁盘与文件系统管理

          本文链接:https://www.haomeiwen.com/subject/cvuyvctx.html