Linux笔记 (12)

Linux笔记 (12)

标签(空格分隔): Linux


一、与目录树的关系

  1. 目录
    当在 Linux 下的档案系统建立一个目录时,档案系统会分配一个 inode 与至少一块 block 给该目录。其中, inode 记录该目录的相关权限与属性,并可记录分配到的那块 block 号码;而 block 则是记录在这个目录下的档名与该档名占用的 inode 号码资料。

  2. 档案
    当在 Linux 下的 ext2 建立一个一般档案时, ext2会分配一个 inode 与相对于该档案大小的 block 数量给该档案。

  3. 目录树读取

  4. filesystem 大小与磁碟读取效能

二、EXT2/EXT3/EXT4 档案的存取与日志式档案系统的功能

若要新增一个档案,此时档案系统的行为是:

  • 先确定使用者对于欲新增档案的目录是否具有 w 与 x 的权限,若有的话才能新增;
  • 根据 inode bitmap 找到没有使用的 inode 号码,并将新档案的权限/属性写入;
  • 根据 block bitmap 找到没有使用的 inode 号码,并将实际的资料写入 block 中,且更新 inode 的 block 指向资料;
  • 将刚刚写入的 inode 与 block 资料同步更新 inode bitmap 与 block bitmap,并更新 superblock 的内容。

一般来说,我们将 inode table 与 data block 称为资料存放区域,至于其他例如 superblock、block bitmap 与 inode bitmap 等区段就被称为 metadata(中介资料)。因为 superblock,inode bitmap 及 block bitmap 的资料是经常变动的,每次新增、移除、编辑时都可能会影响到这三部分的资料。

  1. 资料的不一致(Inconsistent)状态
    当档案在写入档案系统时因为不知名原因导致系统中断,导致最后一个同步更新中介资料的步骤没有做完,此时就会发生 metadata 的内容与实际资料存放区产生不一致(Inconsistent)的情况。
    在早期的 Ext2 档案系统中,如果发生这个问题,那么系统在重新开机的时候,就会借由 Superblock 当中记录的 valid bit(是否有挂载)与 filesystem state(clean 与否)等状态来判断是否强制进行资料一致性的检查。若有检查时则以 e2fsck 这个程序来进行的。

  2. 日志式档案系统(Journaling filesystem)
    在 filesystem 中规划出一个区块,该区块专门记录写入或修订档案时的步骤。

  • 预备:当系统要写入一个档案时,会先在日志记录区块中记录某个档案准备要写入的资讯;
  • 实际写入:开始写入档案的权限与资料;开始更新 metadata 的资料;
  • 结束:完成资料与 metadata 的更新后,在日志记录区块当中完成该档案的记录。

三、Linux 档案系统的运作

非同步处理(asynchronously):
当系统载入一个档案到记忆体后,如果该档案没有被更动过,则在记忆体区段的档案资料会被设定为 clean 。
但如果记忆体中的档案资料被更改过,此时该记忆体中的资料会被设定为 Dirty 。此时所有的动作都还在记忆体中执行,并没有写入到磁碟中。
系统会不定时的将记忆体中设定为 Dirty 的资料写回磁碟,以保持磁碟与记忆体资料的一致性。也可以利用 sync 指令来手动 强迫写入磁碟。

档案系统与记忆体的关系:

  • 系统会将常用的档案资料放置到主记忆体的缓冲区,以加速档案系统的读/写;
  • 承上,因此 Linux 的实体记忆体最后都会被用光,这是正常的情况,可加速系统效能。
  • 可以手动使用 sync 来强迫记忆体中设定为 Dirty 的档案回写到磁碟中;
  • 若正常开机时,开机指令会主动呼叫 sync 来将记忆体的资料回写入磁碟内;
  • 但若不正常开机(如跳电、宕机或其他不明原因),由于资料尚未回写到磁碟内,因此重新开机后可能会花很多时间在进行磁碟检验,甚至可能导致档案系统的损毁(非磁碟损毁)。

四、挂载点的意义(mount point)

  • 将档案系统与目录树结合的动作称为挂载;
  • 挂载点一定是目录,该目录为进入该档案系统的入口;
  • 同一个 filesystem 的某个 inode 只会对应到一个档案内容(同一个档案占用一个 inode)
posted @ 2018-04-24 23:41  Y_momo  阅读(71)  评论(0)    收藏  举报