Nicole2333

导航

Linux笔记1-文件系统与目录树的关系

http://cn.linux.vbird.org/linux_basic/0230filesystem_1.php

磁盘分区意即指定分割槽的起始与结束磁柱

磁盘分区完毕后还需要进行格式化(format):每个操作系统所配置的文件属性/权限并不相同,格式化是将这些磁盘分区变成操作系统能够利用的『文件系统格式(filesystem)』

那么文件系统是如何运行的呢?这与操作系统的文件数据有关

 文件系统通常会将文件内容、文件的属性等信息分别存放在不同的区块

综上,查询一个文件的数据过程如下  知道inode --》知道block号码--》读取文件内容

整个Linux系统使用的是目录树架构,但是我们的文件数据其实是放置在磁盘分区槽当中的, 现在的问题是『如何结合目录树的架构与磁碟内的数据』呢? 这个时候就牵扯到『挂载(mount)』的问题啦!

Linux 文件系统 Ext2 就是使用这种 inode 为基础的文件系统啦!

将所有的 inode 与 block 通通放置在一起将是很不智的决定,因为 inode 与 block 的数量太庞大,不容易管理。

Ext2 格式化后有点像底下这样:

 

文件系统最前面有一个启动扇区(boot sector),这个启动扇区可以安装启动管理程序

 


  • 文件系统与目录树的关系(挂载)

所谓的『挂载』就是利用一个目录当成进入点,将磁盘分区槽的数据放置在该目录下; 也就是说,进入该目录就可以读取该分割槽的意思。这个动作我们称为『挂载』

  • 挂载的意义

每个 filesystem 都有独立的 inode / block / superblock 等信息,这个文件系统要能够链接到目录树才能被我们使用。 将文件系统与目录树结合的动作我们称为『挂载』。挂载点一定是目录,该目录为进入该文件系统的入口。 因此并不是你有任何文件系统都能使用,必须要『挂载』到目录树的某个目录后,才能够使用该文件系统的。

  • 文件:

当我们在 Linux 下的 ext2 创建一个一般文件时, ext2 会分配一个 inode 与相对于该文件大小的 block 数量给该文件。例如:假设我的一个 block 为 4 Kbytes ,而我要创建一个 100 KBytes 的文件,那么 linux 将分配一个 inode 与 25 个 block 来储存该文件! 但同时请注意,由于 inode 仅有 12 个直接指向,因此还要多一个 block 来作为区块号码的记录喔!

  • 目录树读取:

 举例来说,如果我想要读取 /etc/passwd 这个文件时,系统是如何读取的呢?

    1. / 的 inode:
      透过挂载点的信息找到 /dev/hdc2 的 inode 号码为 2 的根目录 inode,且 inode 规范的权限让我们可以读取该 block 的内容(有 r 与 x) ;

    2. / 的 block:
      经过上个步骤取得 block 的号码,并找到该内容有 etc/ 目录的 inode 号码 (1912545); 

    3. etc/ 的 inode:
      读取 1912545 号 inode 得知 vbird 具有 r 与 x 的权限,因此可以读取 etc/ 的 block 内容; 

    4. etc/ 的 block:
      经过上个步骤取得 block 号码,并找到该内容有 passwd 文件的 inode 号码 (1914888); 

    5. passwd 的 inode:
      读取 1914888 号 inode 得知 vbird 具有 r 的权限,因此可以读取 passwd 的 block 内容; 

    6. passwd 的 block:
      最后将该 block 内容的数据读出来。

 filesystem 最顶层的目录之 inode 一般为 2 号

posted on 2019-11-05 21:20  Nicole2333  阅读(217)  评论(0)    收藏  举报