Linux-fs
wh8_2011
这个作者很懒,什么都没留下…
展开
-
Linux 文件系统剖析
基本的文件系统体系结构Linux 文件系统体系结构是一个对复杂系统进行抽象化的有趣例子。通过使用一组通用的 API 函数,Linux 可以在许多种存储设备上支持许多种文件系统。例如,read 函数调用可以从指定的文件描述符读取一定数量的字节。read 函数不了解文件系统的类型,比如 ext3 或 NFS。它也不了解文件系统所在的存储媒体,比如 AT Attachment Packet转载 2015-11-16 23:08:12 · 427 阅读 · 0 评论 -
Linux虚拟文件系统(内核初始化<一>)
Linux虚拟文件系统在内核初始化的start_kernel()函数中主要调用两个函数来实现。[cpp] view plain copy print?asmlinkage void __init start_kernel(void) { …… vfs_caches_init_early(); ……转载 2016-02-15 17:50:13 · 772 阅读 · 0 评论 -
Linux虚拟文件系统(内核初始化<二>)
这部分主要对linux虚拟文件系统内核初始化部分做些补充。关于shrinker,inode和dentry cache初始化阶段都需要注册自己的shrinker,用于缩减cache。两个操作原理类似。shrinker数据结构介绍[cpp] view plain copy print?/* * A callback you转载 2016-02-15 17:51:16 · 575 阅读 · 0 评论 -
Linux虚拟文件系统之文件系统安装(sys_mount())
对于前面的根目录文件系统的安装中涉及到了mount系统调用的调用,这里我们考虑一个文件系统将被安装在一个已经安装文件系统之上的情形,即调用mount系统调用实现。mount系统调用被用来安装一个普通文件系统,他的服务例程为sys_mount()。 [cpp] view plain copy print?/*sys_mount系统调用*/ /*d转载 2016-02-15 17:53:13 · 884 阅读 · 0 评论 -
关于VFS文件系统中的superblock、inode、d_entry和file数据结构
Linux下的文件系统中宏观上主要分为三层:一是上层的文件系统的系统调用;二是虚拟文件系统VFS(Virtual File System)层,三是挂载到VFS中的各种实际文件系统。 VFS是一种软件机制,只存在于内存中,每次系统初始化期间Linux都会先在内存中构造一棵VFS的目录树(也就是源码中的namespace)。VFS主要的作用是对上层应用屏蔽底层不同的调用方法,提转载 2016-02-19 14:54:20 · 828 阅读 · 0 评论 -
linux内核装载vfs过程
linux虚拟文件系统是设备驱动程序的之上的一个抽象层,致力于提供给应用程序一个统一的操作文件的接口。虚拟文件系统的各个数据结构之间的关系比较复杂,画了一张各个数据结构之间的关系图在 http://download.csdn.net/detail/lonewolfxw/4588935,这个清晰的给出了各结构的关系。1. 目录查找linux的虚拟文件系统最核心的结构就是dentry缓存,转载 2016-02-21 17:34:40 · 1405 阅读 · 0 评论 -
Linux ext2文件系统小结
1.ext2文件系统整体布局一个磁盘可以划分成多个分区,每个分区必须先用格式化工具(例如某种mkfs命令)格式化成某种格式的文件系统,然后才能存储文件,格式化的过程会在磁盘上写一些管理存储布局的信息。下图是一个磁盘分区格式化成ext2文件系统后的存储布局。文件系统中存储的最小单位是块(Block),一个块究竟多大是在格式化时确定的,例如mke2fs的-b选项可以设定块大小为转载 2016-08-15 21:35:35 · 565 阅读 · 0 评论 -
Linux虚拟文件系统小结
1.inode1).inode简介inode 是 UNIX/Linux 操作系统中的一种数据结构,其本质是结构体,它包含了与文件系统中各个文件相关的一些重要信息,例如文件及目录的基本信息,包含时间、档名、使用者及群组等。在 UNIX/Linux中创建文件系统时,同时将会创建大量的 inode 。通常,文件系统磁盘空间中大约百分之一空间分配给了 inode 表。在Linux系统中,内转载 2016-08-15 21:36:36 · 487 阅读 · 0 评论 -
EXT2的文件系统装载之内核函数ext2_fill_super分析
在安装ext2fs的时候,存放ext2文件系统的磁盘分区上的大部分数据结构的信息都会被拷贝到RAM(操作系统内存)中,从而使得内核避免了许多后续的操作,变得简单。由于ext2磁盘数据结构都保存在ext2磁盘分区的块中,所以当需要经常更新一些数据结构时,内核会利用页高速缓存来实现。在实际mount一个文件系统的时候,ext2文件系统依赖于虚拟文件系统的一个标准函数(mount_bdev)来实转载 2016-08-16 09:26:08 · 1183 阅读 · 0 评论 -
do_mpage_readpage函数详细分析
/* * This is the worker routine which does all the work of mapping the disk * blocks and constructs largest possible bios, submits them for IO if the * blocks are not contiguous on the disk.转载 2016-08-18 10:08:13 · 2105 阅读 · 0 评论 -
关于vfsmount的理解
struct vfsmount { struct list_head mnt_hash; struct vfsmount *mnt_parent; /* fs we are mounted on */ struct dentry *mnt_mountpoint; /* dentry of mountpoint */ struct dentry *mnt_root;转载 2016-08-10 09:43:04 · 1115 阅读 · 0 评论 -
linux文件系统之mount流程分析
本质上,Ext3 mount的过程实际上是inode被替代的过程。例如,/dev/sdb块设备被mount到/mnt/alan目录。那么mount这个过程所需要解决的问题就是将/mnt/alan的dentry目录项所指向的inode屏蔽掉,然后重新定位到/dev/sdb所表示的inode索引节点。在没有分析阅读linux vfs mount代码的时候,我的想法是修改dentry所指向的inode索引转载 2016-08-10 09:54:29 · 1130 阅读 · 0 评论 -
linux文件系统初识
文件系统是linux的一个十分基础的知识,同时也是学习linux的必备知识。 本文将站在一个较高的视图来了解linux的文件系统,主要包括了linux磁盘分区和目录、挂载基本原理、文件存储结构、软链接硬链接、和常见目录的介绍。相信有了这些知识对于深入的学习linux会有一定的帮助。文章例子主要是基于ubuntu发行版。 如有不对之处请大家多多指出。1.Linux转载 2016-08-10 10:40:26 · 442 阅读 · 0 评论 -
EXT2 文件系统
认识ext文件系统硬盘组成与分割文件系统特性Linux 的 EXT2 文件系统(inode)与目录树的关系EXT2/EXT3 文件的存取与日志式文件系统的功能Linux 文件系统的运行挂载点的意义其他 Linux 支持的文件系统与 VFS认识 EXT2 文件系统Linux最传统的磁盘文件系统(filesystem)使用转载 2016-08-15 09:05:19 · 397 阅读 · 0 评论 -
我所认识的EXT2(一)
前言:本文是笔者自己在学习文件系统中的一些体会,写出来和大家分享一下。本文首先是介绍了下文件系统的一些理论概念,然后分析了ext2文件系统的原理和部分源码。 文件系统是什么: 人们在认识一件陌生事物时一开始总是从事物的定义、作用和结构入手的。那么首先文件系统的定义是什么呢?从网上抓下来的:“文件系统是操作系统用于明确磁盘或分区上的文件的方法和数据结构;即在磁盘上组织转载 2016-08-15 11:14:27 · 3458 阅读 · 0 评论 -
我所认识的EXT2(二)
Ø EXT2中块组的划分块组是非常重要的概念,首先请朋友们弄清楚分区和块组是完全不同的概念,分区至多只能有4个(3个主分区和1个扩展分区,如果4个分区不够用,只能用逻辑分区),分区的作用就是对磁盘进行分割,分区之后才能用文件系统对分区进行格式化;块组是基于文件系统的概念,EXT2在分区的基础上格式化后会形成至少1个以上的块组。那么在EXT2中是用什么规则来划分块组的呢?由于EXT2规定,转载 2016-08-15 11:15:08 · 647 阅读 · 0 评论 -
深入解析 ext2 文件系统
很久以来,就想写一篇关于ext 家族文件系统的文章,源于我刚工作的时候,曾经一不小心rm -rf,误删除了很多文件,当时真想有个数据恢复软件能帮我把数据回复了。当然学习数据恢复,首先要学习文件系统。最近工作原因,好长时间没看学习Linux kernel 相关的东西,感觉面目可憎。扯远了,开始我们的ext2 文件系统的探索之旅。 那些介绍ext2特征的套话我就不说了,任转载 2016-08-15 11:16:40 · 2692 阅读 · 0 评论 -
Linux虚拟文件系统之文件读取(sys_read())
在文件成功打开之后,进程将使用内核提供的read和write系统调用,来读取或修改文件的数据。内核中文件读写操作的系统调用实现基本都一样,下面我们看看文件的读取。[cpp] view plain copy print?/*sys_read()*/ SYSCALL_DEFINE3(read, unsigned int, fd, char转载 2016-02-15 17:56:31 · 3997 阅读 · 0 评论 -
Linux虚拟文件系统之文件打开(sys_open())
在文件读写之前,我们必须先打开文件。从应用程序的角度来看,这是通过标准库的open函数完成的,该函数返回一个文件描述符。内核中是由系统调用sys_open()函数完成。[cpp] view plain copy print?/*sys_open*/ SYSCALL_DEFINE3(open, const char __user *, filen转载 2016-02-15 17:55:16 · 1196 阅读 · 0 评论 -
Linux虚拟文件系统之文件系统卸载(sys_umount())
Linux中卸载文件系统由umount系统调用实现,入口函数为sys_umount()。较于文件系统的安装较为简单,下面是具体的实现。[cpp] view plain copy print?/*sys_umont系统调用*/ SYSCALL_DEFINE2(umount, char __user *, name, int, flags)转载 2016-02-15 17:54:11 · 1070 阅读 · 0 评论 -
Linux文件系统(五)---三大缓冲区之buffer块缓冲区
在文件系统中,有三大缓冲为了提升效率:inode缓冲区、dentry缓冲区、块缓冲。(内核:2.4.37)二、块buffer缓冲区0、整体来说,Linux 文件缓冲区分为page cache和buffer cache,每一个 page cache 包含若干 buffer cache。》 内存管理系统和 VFS 只与 page cache 交互,内存管理系转载 2015-11-17 09:45:15 · 2891 阅读 · 0 评论 -
Linux文件系统(七)---系统调用之open操作(三) 之 open_namei函数
Open系统调用下面看看open_namei函数:这个函数的基本的功能是:首先我们知道filename,也就是知道路径了,那么我们可以根据上级目录项对象,查询下一级的目录项对象,如果在目录项缓存找到下一级的目录项对象,则直接返回,并填充nd的挂载点对象和目录项对象。否则,构建一个子目录项对象,并分配一个新的inode结构,将子目录项对象和inode结构相关联。这转载 2015-11-17 09:48:38 · 1158 阅读 · 0 评论 -
Linux 文件系统(一)---虚拟文件系统VFS----超级块、inode、dentry、file
一:什么是文件系统,其实一句话就是管理这块文件的机制(组织方式,数据结构之类...)Linux系统中存在很多的文件系统,例如常见的ext2,ext3,ext4,sysfs,rootfs,proc...很多很多。。。我们知道每个文件系统是独立的,有自己的组织方法,操作方法。那么对于用户来说,不可能所有的文件系统都了解,那么怎么做到让用户透明的去处理文件呢?例如:我想写文件,那就直接r转载 2015-11-17 09:41:42 · 2360 阅读 · 0 评论 -
Linux 文件系统(二)---执行过程及结构间的关系
一、首先,看看磁盘,超级块,inode节点在物理上整体的分布情况:(图示来自:www.daoluan.net) 对于一个分区,对应一个文件系统,一个文件系统其实本质上还是磁盘的一部分,所以可以包括多个柱面。对于柱面上的数据,主要看看inode节点位图、block位图,i节点,数据块。inode节点位转载 2015-11-17 09:42:39 · 446 阅读 · 0 评论 -
Linux 文件系统(三)---dup和fork函数执行后的文件情况
对于dup和fork函数来说,前者是复制一个文件描述符,后者是复制进程,同时相关的文件信息也会被复制。一、对于Dup之前已经知道,对于一个进程来说,有一个files_struct来管理所有的相关文件,最终的反应形式其实就是一个文件数组而已: 所谓文转载 2015-11-17 09:43:32 · 569 阅读 · 0 评论 -
Linux文件系统(四)---三大缓冲区之inode缓冲区 (内存inode映像 )
在文件系统中,有三大缓冲为了提升效率:inode缓冲区、dentry缓冲区、块缓冲。(内核:2.4.37)一、inode缓冲区为了加快对索引节点的索引,引入inode缓冲区,下面我们看Linux/fs/inode.c代码。inode缓冲区代码1、一些数据结构:之前已经说过,有多个链表用于管理inode节点:[c转载 2015-11-17 09:44:18 · 3996 阅读 · 0 评论 -
Linux文件系统(六)---三大缓冲区之 目录缓冲区dcache
在文件系统中,有三大缓冲为了提升效率:inode缓冲区、dentry缓冲区、块缓冲。 (内核:2.4.37)为什么这个缓冲区会存在,不好意思,我说了废话,当然和前面一样的,为了提升效率,例如我们写一个.c的helloworld文件,简单的过程是编辑,编译,执行。。。那么这个过程都是需要找到所在的文件位置的,如果每次都从根开始找并且还有构造相应的目录项对象,是很费时的转载 2015-11-17 09:46:49 · 1018 阅读 · 0 评论 -
Linux文件系统(七)---系统调用之open操作(二) 之 get_unused_fd
Open系统调用/* 2 */:这一步是需要找到一个没有使用的文件描述符fd看一下sys_open函数中调用的这个函数get_unused_fd:[cpp] view plaincopyprint?738 /* 739 * Find an empty file descriptor entry, and转载 2015-11-17 09:47:45 · 1023 阅读 · 0 评论 -
Linux文件系统(七)---系统调用之open操作(一)
(内核2.4.37)一、当我们打开一个文件的时候,需要获得文件的文件描述符(前面已经说过其实就是文件数组下标),一般是通过函数open来完成,这个系统调用在头文件中声明定义,我们看一下源码:[cpp] view plaincopyprint?530 static inline long open(const cha转载 2015-11-17 09:49:32 · 886 阅读 · 0 评论 -
如何实现一个文件系统
如何实现一个文件系统摘要本章目的是分析在Linux系统中如何实现新的文件系统。在介绍文件系统具体实现前先介绍文件系统的概念和作用,抽象出了文件系统概念模型。熟悉文件系统的内涵后,我们再近一步讨论Linux系统中和文件系统的特殊风格和具体文件系统在Linux中组成结构,逐步为读者勾画出Linux中文件系统工作的全景图。最后在事例部分,我们将以romfs文件系统作实例分析实现文件系转载 2015-11-24 09:17:50 · 2134 阅读 · 0 评论 -
初窥Linux 之 ext2/ext3文件系统
Linux最传统的磁盘文件系统(filesystem)使用的是ext2,所以要了解文件系统就得要由ext2开始。一、文件系统特性磁盘分区完毕后还需要进行格式化,之后操作系统才能够使用这个分区。这是因为每种操作系统所设置的文件属性/权限并不相同,为了存放这些文件所需的数据,因此就需要将分区进行格式化,以成为操作系统能够利用的文件系统格式。传统的磁盘与文件系统的应用中,一个分区转载 2015-11-25 10:58:29 · 390 阅读 · 0 评论 -
Linux缓存机制之块缓存
作者:bullbat 在Linux内核中,并非总使用基于页的方法来承担缓存的任务。内核的早期版本只包含了块缓存,来加速文件操作和提高系统性能。这是来自于其他具有相同结构的类UNIX操作系统的遗产。来自于底层块设备的块缓存在内存的缓冲区中,可以加速读写操作。 与内存页相比,块不仅比较小(大多数情况下),而且长度可变的,依赖于使用的块设备(或文件系统)。随着日渐倾转载 2015-11-27 10:30:19 · 1813 阅读 · 0 评论 -
sysfs文件系统
sysfs是一个基于内存的文件系统,它的作用是将内核信息以文件的方式提供给用户程序使用。该文件系统的目录层次结构严格按照内核的数据结构组织。除了二进制文件外(只有特殊场合才使用),sysfs文件内容均以ASCII格式保存,且一个文件只保存一个数据,另外,一个文件不可大于一个内存页(通常为4096字节)。sysfs提供一种机制,使得可以显式的描述内核对象、对象属性及对象间关系。sysfs有两组接转载 2016-01-21 10:16:33 · 726 阅读 · 1 评论 -
Linux虚拟文件系统(概述)
Linux虚拟文件系统是一个内核软件层,用来处理与UNIX标准文件系统相关的所有系统调用。其健壮性表现在能为各种文件系统提供一个通用的接口。Linux虚拟文件系统支持的文件系统可以划分为三种主要的类型:磁盘文件系统这些文件系统管理在本地磁盘分区中可用的磁盘空间或者其他可以起到磁盘作用的设备(比如说一个USB闪存)。网络文件系统这些文件系统允许访问属于其他网络转载 2016-02-15 17:45:57 · 785 阅读 · 0 评论 -
Linux虚拟文件系统(节点路径搜索)
前面对linux虚拟文件系统的架构以及设计到的数据结构有了一个整体的认识,这里看看linux内核怎么根据给定的文件路径名在内存中找到和建立代表着目标文件或目录的dentry结构和inode结构。文件路径的搜索是文件系统中最基本也是最重要的一部分之一,后面我们会看到,文件的打开、关闭等等操作都将涉及到文件路径的搜索。下面我们看看linux内核中时怎么实现的。一、搜索中所用数据结构转载 2016-02-15 17:47:09 · 603 阅读 · 0 评论 -
Linux虚拟文件系统(安装根文件系统)
安装根文件系统式系统初始化的关键部分。Linux内核允许根文件系统放在很多不同的地方,比如硬盘分区、软盘、通过NFS共享的远程文件系统以及保存在ramdisk中。内核要在变量ROOT_DEV中寻找包含根文件系统的磁盘主设备号。当编译内核时,或者像最初的启动装入程序传递一个合适的“root”选项时,根文件系统可以被指定为/dev目录下的一个设备文件。安装根文件系统分为两个阶段:1,内转载 2016-02-15 17:52:12 · 588 阅读 · 0 评论 -
把块存放在页高速缓存中
VFS(映射层)和各种文件系统以叫做“块”的逻辑单位组织磁盘数据。在Linux内核的旧版本中,主要有两种不同的磁盘高速缓存:页高速缓存和缓冲区高速缓存,前者用来存放访问磁盘文件内容时生成的磁盘数据页,后者把通过VFS(管理磁盘文件系统)访问的块的内容保留在内存中。 从2.4.10的稳定版本开始,缓冲区高速缓存其实就不存在了。事实上,由于效率的原因,不再单独分配块缓冲区;相反,把它们转载 2016-09-27 09:56:00 · 483 阅读 · 0 评论