zoukankan      html  css  js  c++  java
  • linux文件系统底层原理

    Linux文件系统中的文件是数据的集合,文件系统不仅包含着文件中的数据而且还有文件系统的结构,所有Linux 用户和程序看到的文件、目录、软连接及文件保护信息等都存储在其中。

    底层原理图:

    在讲解各个block前,先介绍下inode

    inode简介

    要理解inode,就先要理解文件的存储方式。我们都知道,文件是存储在硬盘上的。硬盘的最小单位是扇区,每个扇区的大小为512字节。
    如果系统在读取硬盘数据的时候按扇区一个一个来读取,那效率就太低了,而是一次连续性读取多个扇区,所以设计者又将多个扇区整合成一个块(block),所以,块就是文件存取的最小单位。一个块的大小为4k。
    我们现在已经有了块的概念,文件数据就是存放在块中。但光有数据还是不行啊?为了方便管理文件,我们还需要文件的元信息,比如文件的属性,创建时间,权限,所占的块大小,数量等等。这些信息就是inode信息。所以硬盘在分区的时候会分为两个区域,一个区域存放数据,一个区域存放inode信息。
    每一个文件都有一个对应的inode。

    inode信息

    使用stat指令可查看对应文件的inode信息:

    具体内容如下:
    文件名
    inode编号
    文件拥有者uid
    文件的所属用户组 gid
    文件的可读,可写,可执行权限 :Access: (0755/drwxr-xr-x)
    文件的时间戳:

    • access time : 文件上一次打开的时间
    • modify time:文件内容上一次修改的时间
    • change time :文件的inode信息上一改变的时间

    硬链接数:links
    文件数据的所占用的块:blocks
    文件所占用的字节数 size
    等等。
    Linux下一切皆文件,每个文件都有对应的inode信息。

    关于inode编号,这里多说以下,每个文件都对应一个inode编号,操作系统用inode号码来识别文件,对于系统来说,文件名知识inode编号便于识别的别称或绰号。
    表面上,打开文件是通过文件名,实际上要执行下面三个步骤:
    1、查找文件的inode编号
    2、根据inode编号,找到inode信息
    3、根据inode信息找到文件对于所在的block,进行数据的读写。

    inode大小

    一个inode节点的大小一般为128字节或者256字节。inode节点的数量在硬盘格式化的时候就已经给定了。所以当Linux上创建文件过多时,就可能发生inode用光,无法创建新文件的问题。

    查看inode信息指令

    查看每一个目录下每个文件的inode号
    ls -i

    查看对应文件的inode信息
    stat [file]

    查看硬盘上的inode总数和适用情况
    df -i

    查看硬盘上块(1k-blocks)的总数和使用情况
    df -k

    super block:负责掌控全局,即管理所有的inode编号

    inode block:负责存储文件的元信息

    directory block:负责存储目录下的文件信息,即一条条记录,包括文件名和inode编号

    data block(即剩余的block):负责存储文件的内容

    查看文件示意图:

    删除文件的示意图:

    -----文件并没有真正的删除,只有覆盖才有可能真正的删除(即新建的文件恰好使用该块存储数据即把原来的数据覆盖了)

    -----格式化:即重新构建这些block块

  • 相关阅读:
    Fiddler抓包
    用powershell Crescendo模块,把【linux字符命令】包装成【powershell对象命令】
    初探设计模式-单例模式
    dev的CheckedListBoxControl的使用
    git的安装及使用(三)----SSH连接
    go——杂碎小知识
    goland安装+打印hello world
    git的安装及使用(二)
    git的安装及使用(一)
    xxx
  • 原文地址:https://www.cnblogs.com/junjind/p/8999349.html
Copyright © 2011-2022 走看看