文件系统,是对磁盘数据进行组织和管理的一种机制。

可通过装载,以目录和文件的形式向用户层呈现。但,文件和目录其实只是文件系统的前端而已,只是文件系统的用户视图,其本质还在于这样的一个数据结构:inode。

那纯粹从inode角度来描述一个文件系统,会是什么情况?

伪文件系统,就是这样的一种表示,它不能装载,不可能从用户空间看到,但它不会带来任何的信息损失。看不到,不等于它不存在。

伪文件系统,包括1)负责管理块设备inode的bdev;2)负责处理管道的pipefs;3)处理套接字的sockfs; 这些都出现在 /proc/filesystems中。

伪文件系统对于内核来说,就是一个普通的文件系统,按通用方法来使用即可,对于用户来说,他不存在.

所有表示块设备的inode都保存在伪文件系统 bdev中,这些对用户层不可见。这使得可以使用标准的VFS函数,来处理块设备inode。

读取一个文件,首先必须确定文件块所属的磁盘块,也就是文件的元数据。由get_block函数(针对不同文件系统,有不同实现,祼设备也其对应函数),而这种对应关系会记录在buffer_head中,它记录了磁盘块和文件块之间的映射关系。读到的文件的元数据会缓存到该文件对应的块设备block_device的地址空间address_space,如果下次再读到同一文件,其元数据就可以从该文件对应bdev的cache中取得了。

如果,我们直接对块设备文件(如/dev/sdx)进行读写,那么块设备文件也会被缓存到内存中其对应的基树address_space中。对bdev这种特殊文件来说,其不光缓存常规文件的元数据,也会缓存真实的数据,dd命令就是这种应用。

可以通过dd if=/dev/sda of=/tmp/dest bs=1 count=4096命令,然后用free来查看cache的变化,记住在执行上述命令之前首先通过sysctl -w vm.drop_caches=3来清空文件的cache。对于文件系统层的代码来看,它根本不管你是块设备还是常规文件或者是一个字符设备文件,它只要你提供file_operations函数集合而不会平白无故给与任何文件系统以特权。

 

bdev文件系统的更多相关文章

  1. /proc/meminfo分析(一)

    本文主要分析/proc/meminfo文件的各种输出信息的具体含义. 一.MemTotal MemTotal对应当前系统中可以使用的物理内存. 这个域实际是对应内核中的totalram_pages这个 ...

  2. /proc 【虚拟文件系统】

    在安装新硬件到 Linux 系统之前,你会想要知道当前系统的资源配置状况. Linux 将这类信息全集中在 /proc 文件系统下./proc 目录下的文件都是 Linux 内核虚拟出来的,当你读取它 ...

  3. proc文件系统

    在shell终端里不带任何参数,直接运行mount命令可以显示正在挂载的文件系统.其中有这么一行 none on /proc type proc (rw) 这就是/proc文件系统.第一个域显示non ...

  4. 使用 /proc 文件系统来访问 linux操作系统 内核的内容 && 虚拟文件系统vfs及proc详解

    http://blog.163.com/he_junwei/blog/static/19793764620152743325659/ http://www.01yun.com/other/201304 ...

  5. 从ext2文件系统上读出超级块

    概述            本篇博客中,我们将仔细分析如何从格式化为ext2文件系统的磁盘中读取超级块并填充内存超级块结构,每次将一个格式化了ext2文件系统的磁盘(分区)挂载到挂载点的时候会调用该方 ...

  6. <解说linux下proc文件系统>

    proc文件系统的作用是访问系统内核信息 proc不是一个真实的文件系统,它不占系统的外存空间,只是以文件的形式为用户访问linux内核数据提供接口,因为系统内核总是动态的变化,所以我们所捕捉到的也只 ...

  7. linux文件系统学习

    linux系统支持很多种文件系统. 1. 如何确认当前系统挂载了哪些文件系统? 使用mount命令可以查看当前系统上已经挂载了哪些文件系统, sh-# mount rootfs on / type r ...

  8. 【转】linux文件系统之mount流程分析

    本质上,Ext3 mount的过程实际上是inode被替代的过程. 例如,/dev/sdb块设备被mount到/mnt/alan目录.命令:mount -t ext3 /dev/sdb /mnt/al ...

  9. 关于linux下的嵌入式文件系统以及flash文件系统选择

    嵌入式linux下常见的文件系统 • RomFS:只读文件系统,可以放在ROM空间,也 可以在系统的RAM中,嵌入式linux中常用来作 根文件系统 • RamFS:利用VFS自身结构而形成的内存文件 ...

随机推荐

  1. windows 开机自动登录,或者说是开机后自动进入桌面

    这篇文章,对于XP以及XP以上版本有效,包括Windows Server服务器操作系统. 1.原理 --Windows自动登录的原理是,开始后,自动输入登录所使用的账号的用户名和密码,并且自动进入桌面 ...

  2. html5 Canvas画图3:1px线条模糊问题

    点击查看原文地址: html5 Canvas画图3:1px线条模糊问题 本文属于<html5 Canvas画图系列教程> 接上一篇canvas画线条教程 上次我们讲到,canvas有时候会 ...

  3. Singal Page App:使用Knockout和RequireJS创建高度模块化的单页应用引擎

    Singal Page App 开篇扯淡 距离上一篇文章已经有好几个月,也不是没有时间记录点东西,主要是换了新的工作,在一家外资工作,目前的工作内容大多都是前端开发,新接触的东西因为时间原因,大多还不 ...

  4. 日志分析工具-ApexSQL介绍

    原文:日志分析工具-ApexSQL介绍 使用场景:业务数据异常变化,通过代码分析不出来的时候,迫不得已需要通过日志来分析 下载地址:http://www.apexsql.com/Download.as ...

  5. [翻译]初识SQL Server 2005 Reporting Services Part 1

    原文:[翻译]初识SQL Server 2005 Reporting Services Part 1 构建和部署基本报表 如果曾经存在一项工作使得“真正的”开发者给他的上司泡蘑菇,那就是构建报表.毕竟 ...

  6. Python 3语法小记(九) 异常 Exception

    常见异常: Exception                        所有异常的基类 AttributeError                 特性应用或赋值失败时引发 IOError  ...

  7. log4net项目中如何配置,以下详解

    log4net.config配置文件 <?xml version="1.0" encoding="utf-8"?> <log4net debu ...

  8. 【转】删除修改Eclipse里的SVN账户

    转自http://msongli.iteye.com/blog/1186648 引自: http://wanghongxu.iteye.com/blog/539806 http://jxdwuao.i ...

  9. 【转】android中TextAppearanceSpan的使用

    android中TextAppearanceSpan的使用 Posted on April 17, 2011 在android中如何想word中一样对文字进行丰富的风格设置呢? TextAppeara ...

  10. TortoiseGit for windows安装与配置

    1. 下载地址 TortoiseGit与Language Packs下载: https://code.google.com/p/tortoisegit/wiki/Download?tm=2 msysg ...