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
- Linux文件系统
- linux文件系统
- Linux文件系统
- Linux文件系统
- linux 文件系统
- LINUX 文件系统
- Linux文件系统
- linux文件系统
- Linux文件系统
- Linux 文件系统
- Linux 文件系统
- linux 文件系统
- linux 文件系统
- Linux文件系统
- Linux文件系统
- linux文件系统
- Linux 文件系统
- linux文件系统
- ubuntu搭建TPM emulator过程
- 一些有意思的面试题
- Teradata 数据库技术概略之一 —— Teradata数据库的架构组成
- Android异步处理三:Handler+Looper+MessageQueue深入详解
- 二分匹配
- linux文件系统
- Teradata 数据库技术概略之二 —— 数据分布机制(1) 概述
- JAVA内存溢出
- Codeforces Round #261 (Div. 2) B. Pashmak and Flowers【水】
- Android异步处理四:AsyncTask的实现原理
- [Shell]crontab 执行任务调用shell脚本,相对路径无法找到
- Teradata 数据库技术概略之四 —— 数据分布机制(3) Hash Map
- Java数据库连接步骤
- Teradata 数据库技术概略之三 —— 数据分布机制 哈希算法