linux文件系统

来源:互联网 发布:模拟星空软件下载 编辑:程序博客网 时间:2024/06/05 21:01

    了解文件系统首先了解磁盘上数据存放方式。在一个磁盘上数据的存取是一块为单位的,一个块大小一般为1KB,称为逻辑块。根据磁盘上的数据存放情况,分为引导块,超级块,节点位图,逻辑位图,i节点,数据区。

    <1>首先是引导块,占用一个逻辑块,存放的是操作系统的启动代码。一整块硬盘上可以分为多个区,每个分区可都可以算作一个设备。正如windows的c盘作为启动盘。linux中也有一个盘的引导块存放的是启动代码。非启动盘的引导块为空。

    <2>超级块,占用一个逻辑块,存放的整个文件系统的布局描述信息。所谓的布局描述信息就是比如整个文件系统i节点的数量,逻辑块的数量等。具体来说,描述超级块的d_super_block:

struct d_super_block {
                 unsigned short s_ninodes; //i节点个数
                 unsigned short s_nzones; //磁盘上全部的逻辑块的个数
                 unsigned short s_imap_blocks;  //i节点位图区所使用的逻辑块的个数
                 unsigned short s_zmap_blocks; //逻辑块位图区所使用的逻辑块的个数
                 unsigned short s_firstdatazone; //第一个数据块的逻辑块号
                 unsigned short s_log_zone_size; 
                 unsigned long s_max_size; // 最大文件长度
                 unsigned short s_magic;   //文件系统魔数
};
 在linux加载文件系统的时候会首先加载该超级块,并存放在super_block的一个空闲项中。
   <3>节点位图,逻辑位图各占用8个逻辑块,存放的是i节点和数据区的使用情况。在文件系统挂载的时候这两个部分也是先被加载。
   <4>i节点,存放的各个文件的节点信息,其中包括文件所有者,文件类型,文件存取权限,存取时间,修改时间,文件数据的磁盘地址,文件大小等信息。具体数据结构如下
/*磁盘上的i节点的数据结构描述*/
struct d_inode {
                 unsigned short i_mode;  
                 unsigned short i_uid;
                 unsigned long i_size;
                 unsigned long i_time;
                 unsigned char i_gid;
                 unsigned char i_nlinks;
                 unsigned short i_zone[9];
};
/*
另外当对数据进行修改的时候,修改的是数据区的内容,而与i节点数据无关,当修改文件权限的时候,修改的是i节点的信息。
    <数据区>数据区存放的是真实的数据内容。每个文件都有一个i节点,利用这个节点来索引数据。每个节点中有个i_zone[9]变量,其中i_zone[0]-i_zone[6] 这7个值可以直接索引数据块,如果数据足够到即超过7K就需要使用i_zone[7]二级索引,或者i_zone[8]更多级索引。

0 0
原创粉丝点击