您的位置:首页 > 其它

硬件知识——文件系统

2014-02-27 19:10 106 查看
所谓的磁盘分区就是告诉操作系统,这个分区的可存取区域从A磁柱面到B磁柱面

指定的分区磁柱面范围信息存放在第一个分区(MBR)的分区表(patition table)中

linux中,IDE硬盘最多有59个逻辑分区(hd5~hd63),sata硬盘最多有11个逻辑分区(sd5~sd15)

文件系统包括数据外还有很多信息,比如在linux中还有文件权限、文件属性
文件系统通常把权限和属性放在inode块中,而把实际的数据放在data block中,还有一个superblock用来记录文件系统的整体信息,包括inode和data block的总量、使用量、剩余量等

索引式文件系统(如ext2/ext3):
inode和data block的每个小区都有编号,inode区记录了每个文件的权限信息,也有文件所在的block信息,所以inode可以作为索引



如上图,操作根据文件的inode信息,排列读取顺序,然后一口气将4个block的内容读出

非索引式文件系统(FAT)
USB就是用的非索引式
没有inode,每个block编号都记录在前一个block中



如果文件分布的block分布得太离散(比如没有按一个方向在磁盘上顺序分布过去),磁头就没办法在磁盘转一圈就读到所有资料,有可能需要转好几圈才能读取到,所以FAT文件系统常常用久了就要进行磁盘重组,就是将属于同一个文件的blocks整合在一起,这样资料读取就比较容易





data block
ext2文件系统支持的block大小有1k、2k、4k三种

block的大小和数量在格式化时就确定了

每一个block最多只能放一个文件的数据

如果文件大于block的大小,则占用多个block

如果文件小于block的大小,则该block剩余的容量就不能再被其他文件使用了

block太大有可能会导致浪费,太小则会导致大文件占用更多block,inode要记录多个block,最后导致操作系统读取数据地性能下降

inode table
 该档案癿存取模式(read/write/excute);

 该档案癿拥有者与群组(owner/group);

 该档案癿容量;

 该档案建立或状忞改变癿时间(ctime);

 最近一次癿读取时间(atime);

 最近修改癿时间(mtime);

 定义档案特性的旗标(flag),如 SetUID...;

 该档案真正内容的指向 (pointer);

每个inode大小均为固定的128bytes
每个档案只会占用一个inode,因为文件系统能够建立的档案数和inode的数量有关
系统读档案的时候先找到inode,分析inode所记录的权限是否符合,符合才能实际读取档案的内容

由于inode中要记录的数据特别多(光是block号码的记录就有可能很多),所以应该是把inode定义为:
12个直接、1个间接、1个二间接与1个三间接纪录区
直接就是可以直接取得block号码,间接就是再拿一个block来当做block号码的纪录区。
以较小的1k block说明:
12个直接:12*1k = 12k
间接:256*1k = 256k,每个block记录会花去4bytes,所以1k的block可以包含256个block记录
二间接:256*256*1k = 256^2k
三间接:同上,256^3k
全部加起来,最后一个inode能够容纳的档案最大为16GB
这个计算方法不适用于2k/4kblock,因为大于2K的block会受到ext2文件系统本身的限制。

superblock
Superblock 是记录整个 filesystem 相关信息的地方, 没有 Superblock ,就没有这个 filesystem

了。他记录的信息主要有:

 block 与 inode 的总量;

 未使用与已使用的 inode / block 数量;

 block 与 inode 癿大小 (block 为 1, 2, 4K,inode 为 128 bytes);

 filesystem 的挂载时间、最近一次写入数据的时间、最近一次检验磁盘 (fsck) 的时间等文件系统

癿相关信息;

 一个 valid bit 数值,若此文件系统已被挂载,则 valid bit 为 0 ,若未被挂载,则 valid bit 为

1 。

一般来说,superblock的大小为1024bytes,可以用dumpe2fs命令来查看
每一个block group都可能含有一个superblock的备份,用于进行superblock的救援

Filesystem description
用于描述每个block group的开始于结束的block号码,以及说明每个区段(superblock、bitmap、inodemap、data block)分别位于哪一个block号码之间,也可以通过dumpe2fs来查看

block bitmap
从block bitmap中可以知道哪些block是空的,因此我们的系统就可以很快速地找到可使用的空间来处理文件

inode bitmap
作用类似于block bitmap

目录
当在ext2文件系统建立一个目录时,ext2会分配一个inode和至少一个block给该目录,inode记录该目录的相关权限和属性,并可记录分配到的那块block号码,而block则记录在这个目录下的文件名和对应的inode号码。



目录不会只占用一个block,如果在目录底下的文件太多而导致一个block不足以记录所有的表项时,linux会给该目录分配多一些block
可以用ls -li 查看目录下每个文件的inode号码
可以用ll 命令查看目录使用block大小(都是1024的倍数)



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

目录树的读取
由上可知,文件的inode本身并不记录文件名,文件名的记录是在目录的block中的,所以才会有“新增、删除、更名文件名与目录的w权限有关”。我们要读取某个文件时,必须先经过目录的inode和block,才能读取到那个待读文件的inode,最后才能读取到文件的内容。

由于目录树是从根目录开始读起,因此系统通过挂载点可以找到挂载点的inode(通常一个文件系统的最顶层inode从2号开始),此时就能根据根目录的inode内容,并依据inode读取根目录的block内的文件名数据,再一层一层读正确的文件名。

日志式文件系统
为了避免文件系统不一致问题,我们在filesystem中规划出一个区块,专门记录写入或者修改文件时的步骤:预备、实际写入、结束。
在这样的程序当中,万一数据的记录过程当中发生了问题,那么我们的系统只要去检查日志记录区块,

就可以知道那个档案发生了问题,针对该问题来做一致性的检查即可,而不必针对整块 filesystem 去

检查, 这样就可以达到地速修复 filesystem 的能力了!这就是日志式档案最基础癿功能啰~

异步处理:
当系统加载一个文件到内存后,如果该文件没有被更动过,则在内存区段的数据会被设定为“干净的(clean)”,如果被改动过了,则被设定为“脏的(dirty)”,此时所有的动作还在内存执行,还没写回硬盘,系统会不定时地将内存中设定为dirty的数据写入硬盘。可以使用sync指令手动强迫写入硬盘

挂载点的意义:
每个filesystem都有独立inode、block、superblock等信息,这个文件系统需要能够连接到目录树才能被我们使用,将文件系统和目录树结合的动作称为“挂载”,挂载点一定是目录,该目录作为进入该文件系统的入口。并不是有任何文件系统都能使用,必须要挂载到目录树的某个目录后,才能使用该文件系统。

比如有三个挂载点:/ , /boot , /home,
调用ls -lid / /boot /home时,可以看到三个目录的inode都是2,因为filesystem最顶层的目录的inode一般都是2号
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: