zoukankan      html  css  js  c++  java
  • Unix文件系统基本结构

    UNIX文件系统是UNIX系统的心脏部分,提供了层次结构的目录和文件。文件系统将磁盘空间划分为每1024个字节一组,称为块(block)(也有用512字节为一块的,如:SCO XENIX)。编号从0到整个磁盘的最大块数。
     
    一个磁盘分成一个或多个分区,每个分区可以包含一个文件系统


    一个分区分为三部分:
    + 超级块, 文件系统中第一块被称为超级块。这个块存放文件系统本身的结构信息,比如每个区域的大小,未被使用的磁盘块的信息。
    + i节点, 超级块的下一个部分就是i节点表,文件系统中的每个文件在该表中都对应一个i节点。i节点是固定长度的记录项,它包含有关文件的大部分信息。Linux文件系统使用 索引节点i 来记录文件信息,索引节点是一个结构,用固定长度,它包含了一个文件的长度、创建及修改时间、权限、所属关系、磁盘中的位置等信息。
    + 数据区, 文件的内容保存在这个区域上,磁盘上所有块的大小都一样,如果文件包含了超过一个块的内容,则文件内容会存放在多个磁盘块中,并把磁盘块的分配情况记录在文件的i节点中的磁盘序列表中。
     
    仔细观察一个柱面组的i节点和数据块部分,可以看到下图所示情况



     
    一个文件系统维护了一个索引节点的数组 即为目录项,目录项中的每一项包括文件索引节点i的节点号和文件名,所以目录只是将文件的名称和它的索引节点号结合在一起的一张表。
     
    对于一个文件来说有唯一的索引节点与之对应,而一个索引节点却可以有多个文件名与之对应,因此磁盘上的同一个文件可以通过不同的路径去访问它。
     
    在上图中有两个目录项指向同一i节点。每个i节点有一个链接计数器,其值是指向该i节点的目录项数。只有当链接计数器减少为0时,才可删除该文件。这也就是为什么解除对一个文件的链接操作并不总是意味着,释放该文件占用的磁盘块的原因。而且删除一个目录项的函数被称为unlink而不是delete的原因。
     
    每个文件系统都对它们的i节点进行编号,因此目录项中的i节点指向同一文件系统的i节点,不能使一个目录项指向另一个文件系统的i节点,因此硬连接不能跨越文件系统。
     
    当在不更换文件系统情况下为一个文件更名时,该文件的实际内容并未移动,只需构造一个指向现有i节点的新目录项,并解除与旧目录项的链接。这就是mv命令的通常操作方式。
     
    介绍完文件系统之后,下边了解一下符号链接(软链接)和硬链接的区别
     
    可以用ln命令对一个已经存在的文件建立一个新的连接,而不复制文件的内容。连接有软连接和硬连接之分,软连接又叫符号连接。
     
    符号链接是指向一个文件的间接指针,硬链接直接指向文件的i节点。
     
     硬连接                               软连接     
     硬链接指向文件的i节点                它的数据是它所连接的文件的路径名,是指向一个文件的间接指针 
     目录不能有硬连接,但超级用户可以     目录也适用
     不能跨越文件系统                     可以跨越文件系统
     文件在磁盘中只有一个拷贝             也是只有一份拷贝
     索引节点的引用为0时才可以删除文件    可以删除原有文件保留连接文件,没有防误删功能  
     可以防止误删除
  • 相关阅读:
    Using Apache Maven
    Getting Started(Google Cloud Storage Client Library)
    【iOS】PLA 3.3.12
    【Android】System.exit(0) 退出程序
    【iOS】Ineligible Devices || “无法下载应用程序”
    【iOS】No suitable application records found
    【Android】Failed to convert @drawable/picture into a drawable
    【SVN】eclipse 安装 SVN 插件
    【SVN】SVN Working copy is too old
    【Android】Android sdk content loader 0%
  • 原文地址:https://www.cnblogs.com/qianye/p/2786345.html
Copyright © 2011-2022 走看看