文章插图
一、文件系统特性1.1 结构体磁盘分区后还要进行格式化,操作系统才能使用这个文件系统 。每个操作系统能识别和使用的文件系统不完全相同,如windows98以前支持FAT,Windows2000后支持NTFS 。linux传统的操作系统是ext2(Linux second Extended file system,ext2fs) 。以前一个分区只能格式化为一个文件系统,而一些新的技术可以将一个分区格式化为多个文件系统(如LVM 逻辑卷) 。
较新的操作系统的文件会保存文件权限、文件所有者等信息,这些信息存放在inode,实际的文件数据保存到数据区块 。另外有一个超级区块记录整个文件系统的整体信息,包括inode与数据区块的总量、使用量、剩余量等 。
每个inode和区块都有编号,每个文件都会占用一个inode,在inode内放置区块号码 。超级区块定义:
文章插图
1.2 读取文件流程(基于linux0.11)一个普通用户要读取/etc/passwd :
- 看首字母是不是/,判断是绝对路径还是相对路径;绝对路径从root的inode开始找;
- 读root的inode数据块,从里面的dir_entry找有没有与/etc名称匹配的;
- 如果找到了,返回/etc的 inode_nr;
- 通过/etc的inode_nr,读取etc的inode;
- 通过etc的inode读取etc的数据块,etc是个目录,要查找目录里有没有和passwd匹配的名称;
- 如果找到了,返回passwd的inode_nr
- 通过passwd的inode_nr读取passwd中的数据 。
文章插图
其它函数可逐步跟踪查看 。
1.2.2 读取文件的入口/fs/read_write.c
文章插图
【Linux必备知识之文件系统】
1.2.3 fs/file_read.c普通文件读取示例
文章插图
1.2.4 fs/buffer.c 缓存读取函数示例
文章插图
1.2.5 kernel/blk_drv/ll_rw_blk.c到硬盘读数据
文章插图
make_request请求
文章插图
文章插图
add_request
文章插图
这里给一个队列插入了一个请求节点 。
队列的结构:
struct blk_dev_struct { void (*request_fn)(void); struct request * current_request;};/* blk_dev_struct is: * do_request-address * next-request */struct blk_dev_struct blk_dev[NR_BLK_DEV] = { { NULL, NULL },/* no_dev */ { NULL, NULL },/* dev mem */ { NULL, NULL },/* dev fd */ { NULL, NULL },/* dev hd */ { NULL, NULL },/* dev ttyx */ { NULL, NULL },/* dev tty */ { NULL, NULL }/* dev lp */};
后面要进入硬盘驱动环节,暂且不继续向下分析细节了 。二、常用的本地文件系统2.1 传统的文件系统,不带日志2.1.1 ext第一代扩展文件系统,于1992年4月发表,是为Linux核心所做的第一个文件系统 。采用Unix文件系统(UFS)的元数据结构,以克服MINIX文件系统性能不佳的问题 。
2.1.2 ext2第二代扩展文件系统,LINUX内核所用的文件系统 。它开始由Rémy Card设计,用以代替ext,于1993年1月加入linux核心支持之中 。ext2 的经典实现为Linux内核中的ext2fs文件系统驱动,最大可支持2TB的文件系统,至Linux核心2.6版时,扩展到可支持32TB 。
文章插图
文章插图
2.1.3 Minix早期Linux支持的文件系统,性能低下,没有时间标记,文件名最长14个字符 。只能使用64M硬盘分区 。
2.1.4 XiaMinix 修订的文件系统,解决文件名和支持的硬盘大小的问题 。
2.1.5 Msdos微软dos、windows和一些OS/2系统支持的文件系统,文件名格式是8.3 。
2.1.6 umsdosLinux兼容Msdos使用的文件系统,支持长文件名、权限、所有者设置 。
2.1.7 ISO 9660标准的CD-ROM文件系统 。此标准有不同的说明级别,一级,文件必须是8.3格式(文件名不得多于8个字符,后缀名不得多于3个字符),并且都得是大写字母 。目录也不得多于8个字符 。在二级和三级中,文件名可以达到32个字符 。
推荐阅读
- linux服务器内存异常,究竟在哪消耗了2.5G?
- 几条关于品茶的知识,品茶讲究什么
- 软件|知识是不是学得越多越有用呢?其实不是,而是需要的时候才有用
- 春季养生知识大全帮你健康过春季
- Linux网络API - socket地址API
- Kali linux 安装教程
- Linux操作系统的作业调度和进程调度
- 开启天文之路的 4 个 Python 工具 | Linux 中国
- 建议收藏 手摸手教你 CentOS 入门必备基础知识
- 6个MySQL GUI工具,数据库管理必备