@yanglt7
2018-03-13T14:40:54.000000Z
字数 1664
阅读 940
Linux
目录
当在 Linux 下的档案系统建立一个目录时,档案系统会分配一个 inode 与至少一块 block 给该目录。其中, inode 记录该目录的相关权限与属性,并可记录分配到的那块 block 号码;而 block 则是记录在这个目录下的档名与该档名占用的 inode 号码资料。
档案
当在 Linux 下的 ext2 建立一个一般档案时, ext2会分配一个 inode 与相对于该档案大小的 block 数量给该档案。
若要新增一个档案,此时档案系统的行为是:
一般来说,我们将 inode table 与 data block 称为资料存放区域,至于其他例如 superblock、block bitmap 与 inode bitmap 等区段就被称为 metadata(中介资料)。因为 superblock,inode bitmap 及 block bitmap 的资料是经常变动的,每次新增、移除、编辑时都可能会影响到这三部分的资料。
资料的不一致(Inconsistent)状态
当档案在写入档案系统时因为不知名原因导致系统中断,导致最后一个同步更新中介资料的步骤没有做完,此时就会发生 metadata 的内容与实际资料存放区产生不一致(Inconsistent)的情况。
在早期的 Ext2 档案系统中,如果发生这个问题,那么系统在重新开机的时候,就会借由 Superblock 当中记录的 valid bit(是否有挂载)与 filesystem state(clean 与否)等状态来判断是否强制进行资料一致性的检查。若有检查时则以 e2fsck 这个程序来进行的。
日志式档案系统(Journaling filesystem)
在 filesystem 中规划出一个区块,该区块专门记录写入或修订档案时的步骤。
非同步处理(asynchronously):
当系统载入一个档案到记忆体后,如果该档案没有被更动过,则在记忆体区段的档案资料会被设定为 clean 。
但如果记忆体中的档案资料被更改过,此时该记忆体中的资料会被设定为 Dirty 。此时所有的动作都还在记忆体中执行,并没有写入到磁碟中。
系统会不定时的将记忆体中设定为 Dirty 的资料写回磁碟,以保持磁碟与记忆体资料的一致性。也可以利用 sync 指令来手动 强迫写入磁碟。
档案系统与记忆体的关系: