文件系统特性

来源:互联网 发布:c语言中 ||是什么意思 编辑:程序博客网 时间:2024/06/01 21:26
之前讲过物理组成,即磁盘。可是操作系统怎么识别存储在磁盘的数据呢,这时候就需要一个媒介,这个媒介就是文件系统。磁盘分区为主要分区和扩展分区,扩展分区又分为逻辑分区,在此,能够被格式化作为数据访问的分区为主分区和逻辑分区,成为被操作系统识别的文件系统格式。在安装linux的时候,如果你自定义分区配置,会有选择挂载点的选项,这里一个挂载点就是一个文件系统。每个文件系统都会有它自己存放数据的方式。通常是分为三个数据结构:1.super block:记录在此文件系统的整体信息,包括inode/block的总量,使用量,剩余量,以及文件系统的格式与相关信息等;2.inode:记录文件的属性和权限,一个文件占用一个inode,同时记录此文件的数据所在的block号码;    3.block:实际记录文件的内容数据,若文件太大,会占用多个block,都记录在inode中,访问时按着inode记录的block号码去索引。![像此图,super block记录了inode使用了一个剩余三个,block使用了三个剩余三个等信息,像这样的数据访问方式称为索引式文件系统;而inode记录了一个文件的数据存储在1,3,6号block](http://img.blog.csdn.net/20171004160721982?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcXFfMzU4NjkzODk=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)当一个文件经过多次的删除,新添,编辑等操作时,block块趋向与分散化,这时当索引一个文件数据时速度会有所变慢。这时进行‘碎片整理’会有所改观,‘碎片整理’会将同一个文件所属的block回合在一起,这样读取数据时会容易很多。

ext2文件系统组成:在格式化的时候区分很多的block group,每个block group有以下区段组成:
1. data block: 有1kb,2kb,4kb。每个block最多存放一个文件的数据,文件过大使用多个block, 过小磁盘浪费,getconf PAGESIZE可查询

    2.inodetable(inode表格): 存放了很多的信息,文件的访问模式,所有者和组,大小,创建或状态改变时间,最近读取时间,最近修改时间,标志,真正内容的指向(pointer)。一个文件占用一个inode;一个inode大小为128bytes,分为12个直接,一个间接,一个双间接,一个三间接记录区,也就是说总记录为12个block+256个block+256*256个block+256*256*256个block,每个block的大小为1k,一个inode的128bytes可以记录的文件大小为16GB的信息。    3.superblock(超级块): 记录整个文件系统相关信息,没有这个superblock就没有文件系统了,操作时一定要小心。记录着block的大小1kb,2kb,4kb和inode的大小128bytes,总量,使用和未使用的数量, 文件系统挂载时间,最近写入时间,检验磁盘(fsck)时间等文件系统信息。还有一个validbit数值,0为以挂载,1为未挂载。可以作为block group的备份。(dumpe2fs查看)    4. File system Description(文件系统描述说明): 描述每个block group的开始和结束的block号码,以及说明每个区段(superblock ,bitmap,inodemap, datablock)介于哪一个block号码之间。    5. block bitmap (块对照表): 记录使用的和空闲的block号码。   6. inode bitmap(inode 对照表):记录使用和为使用的inode号码。

查看文件系统的命令:dumpe2fs [ -bh ] 设备文件名
参数:-b 列出保留为坏道的部分(一般用不到吧!)
-h 仅列出superblock的数据。

设备文件名:/dev/sd[a-p][1-15]:为SCSI,SATA,USB,Flash等接口的磁盘文件名/dev/hd[a-d][1-63]:为IDE接口的磁盘文件名如:dumpe2fs -h /dev/hdc2注意,dumpe2fs只能查看ext文件系统,不然回报错,你可以使用:blkid 文件设备名 或者 mount 查看文件属于哪个type文件系统。

目录树:
目录树的读取:inode先找到/的inode号码,获取/的block权限,如果允许进入/的block块,找到/etc的inode号码,再获取/etc的权限,如果允许则进入/etc的block块,持续这样,直到找到查询的文件。
ll -i 查找root目录内的文件所占用的inode号码
ll -d / /bin /var 查看文件的block块大小

ext2/ext3文件的访问和日志文件系统
添加一个文件时,先查看目录有没有w和x权限,有则根据inode bitmap没有使用的号码写入权限和属性,再根据block bitmap没有使用的号码,将实际的数据写入block再更新inode,最后同步更新到metadata(中间数据)superblock,inode bitmap,block bitmap等区段中。
日志文件系统是避免非正常关机时数据的一致性。有预备,实际写入,更新到metadata的操作,在ext3中才有这个功能。

linux文件系统的操作:
系统会优先加载一个文件内存中,以提高读写的速度,并标记为clean,当文件修改时,标记为Dirty,系统会异步把这些Dirty的文件写入硬盘中,以保持硬盘和内存的一致性。

linux支持的文件系统和VFS
使用ls -l /lib/modules/$(uname -r)/kernel/fs命令查看linux支持的文件系统
cat /proc/filesystems 查看系统加载到内存中支持的文件系统
VFS(Virtual Filesystem Switch)虚拟文件系统,这个在linux内核kernel的文件系统会自动帮我们去读取每一个分区上头的文件系统,这样我们就不用自己动手去识别文件系统了。

原创粉丝点击