从 inode 出发了解文件系统的大部分概念

查看原文

本文从 inode 开始解释所有文件系统的概念,是对新手来说很好的文章,每个概念都只花了大约一句话,像 main 函数调用触发了所有子函数一样精美,如果用两个词来描述这篇文章,那就是 very cool。

  • inode 是数据结构,由 Linux 和其它 Unix-like 操作系统里的文件系统提供,存储除了文件名和文件内容外的所有信息。
  • 数据结构是 c struct,可以存储多种数据类型(例如整型,浮点,等等)。
  • 文件系统是关于目录的层级结构, 也叫目录树,这些目录用于组织文件。
  • 文件是一个有名字的,用户层面上看数据是连续块的,在存储器(storage)里被持久化存储的信息。
  • 文件的元信息是关于文件非内容部分的信息,包括文件大小,物理位置(存储器块的地址),文件 owner,group,权限,几种时间戳,以及指向 inode 的硬链接的引用计数。
  • 存储器是长时间存储数据的中介,例如硬盘和磁带。这个时间可以是数年或数十年。
  • 目录是文件,类型是DIR,内容是其下的文件的文件名到 inode 的映射表。
  • 创建文件时,发生的事情是:分配文件系统里一个唯一的 inode number 数字给文件名,将这个键值对写到父亲目录的内容里。
  • 用户或程序根据文件名找文件,发生的事情是:操作系统根据文件名逐级查找 inode。
  • 硬链接是目录表中的一个条目,文件名对应的 inode number 指向已经存在的文件的 inode。
  • 空间不够,可以是硬盘不够,也可能是文件系统放不下那么多 inode 节点(硬盘可能还够,多发生于小文件太多)
  • ls 可以查看 file inode number: ls -i。ls 默认列出当前目录的所有对象。
  • 当前目录是用户目前在文件系统上工作的目录。
  • df 可以查看 inode 的挂载的文件名字和大小对应关系,其中 -h 可以查看带单位的大小。特别地,df 可以查看还剩下多少 inode 可以被挂载。
  • 挂载是指逻辑上连接上文件系统。

衍生思考:这篇文章本身的组织结构就像一棵树,就像它介绍的 file system,非常棒!