日期:2014-05-16 浏览次数:20735 次
13.Linux 的EXT3文件系统
在标准的ext3文件系统中,将每个文件的内容分为两个部分存储,一个是文件的属性,另一个是文件的内容。ext3规划出inode与块来分别存储文件的属性(放在inode中)与文件的内容(放置在块区域中)。当分区被格式化为ext3的文件系统时,它一定会有inode表与块区域这两个区域。
inode是记录“该文件的相关属性,以及文件内容放置在哪一个块内”的信息。块是记录“文件内容数据”的区域。indoe除了记录文件的属性外,同时还必须具有指针(pointer)的功能,即指向文件内容放置的块之中,让操作系统可以正确获取文件的内容。
inode记录的信息主要有:
该文件的拥有者与用户组(owner/group)
该文件的访问模式(rwx)
该文件的类型(type)
该文件建立或状态改变的时间(ctime)、最近一次的读取时间(atime)、最近修改的时间(mtime)
该文件的大小
定义文件属性的标志(flag),如SetUID...
该文件真正内容的指针(pointer)
一个inode的大小为128字节
在linux的ext3文件系统建立一个目录时,ext3会给该目录分配一个inode与至少一个块。inode记录该目录的相关属性,并指向分配到的哪个块。块记录在这个目录下的相关文件(或目录)的关联性
在linux的ext3文件系统建立普通文件时,ext3会给该文件分配至少一个inode与相对于该文件大小的块数量。假设一个块为4kb,要建立一个100kb的文件,linux将分配一个inode与25个块来存储该文件
inode本身并不记录文件名,而是记录文件的相关属性,文件名记录在目录所属的块区域,文件的相关连接回记录在目录的块数据区域
要读取一个文件的内容时,linux会先由根目录/获取该文件的上层目录所在的inode,再由该目录所记录的文件关联性(在该目录所属的块区域)获取该文件的inode,最后通过inode内提供的块指针,来获取最终的文件内容
?
操作系统根目录/的相关数据可获取/etc目录所在的inode,并读取/etc这个目录的所有相关属性
根据/etc的inode的数据,可以获取/etc目录下所有文件的关联数据是放置在哪一个块中,并前往该块读取文件的关联性内容
由上一步骤的块中,可以知道crontab文件的inode所在地,并前往该inode
由上一步骤的inode中,可以获取crontab文件的所有属性,并且前往由inode所指向的块区域,顺利获取crontab的文件内容
?
块与inodes在一开始格式化时就已经固定了
一个分区能够容纳的文件数与inode有关
一般来说,每4kb的硬盘空间分配一个inode
一个inode的大小为128字节
块为固定大小,支持1024/2048/4096字节等
块越大,损耗的硬盘空间也越多
对于单一文件,如块大小为1024,最大为16G,若为4096,则为2TB
对于整个分区,若块大小为1024,最大为2TB,若为4096,则为32TB
?
14.当建立一个ext3的文件系统时,它拥有超级块(superblock)、组描述(group description)、块位图(block bitmap)、inode位图(inode bitmap)、inode表(inode table)、数据块(data blocks)等区域
SuperBlock(超级块):是记录整个文件系统相关信息的地方,没有它就没有这个文件系统,主要信息有:
-块与inode的总量
-未使用与已使用的inode/块数量
-一个块与一个inode的大小
-文件系统的载入时间、最近一次写入数据的时间、最近一次检验磁盘(fsck)的时间等文件系统的相关信息
-有效位(valid bit)数值,若此文件系统已被载入,则有效位为0,未被载入,则为1
Group Description(组描述):记录此块由何处开始记录
Block bitmap(块位图):此处记录块是否使用
Inode bitmap(inode位图):此处记录inode是否使用
Inode table(inode表):为每个inode的数据存放区
Data Blocks(数据块):为每个块的数据存放区
?
#dumpe2fs /dev/hda1 获取文件系统内的这个信息
?
15.ext3的数据访问是通过日志与元数据以及数据存放区记录的
linux支持的文件系统有哪些:
#ls -l /lib/modules/`uname -r`/kernel/fs
系统当前已启用的文件系统有:
#cat /proc/filesystems
?
16.磁盘与目录的容量
#df -ahTi 列出所有的文件系统,人性化,该分区的文件系统名称,inode数量
#du -ahs
?
17.硬连接只是在某个目录下的块多写入一个关联数据,并不会用掉inode与磁盘空间