linux文件系统:
  操作系统的文件数据除了文件实际内容外,还有非常多的属性,如文件权限(rwx)与文件属性(所有者、群组、时间参数等)。
  文件系统通常将这两部分数据存放在不同的块。权限属性放到 inode 中,实际数据放到 data block 中。
还有一个超级块(super block)会记录文件系统的整体信息,包括 inode 与block 的数量、使用量等。
 
  inode:记录文件属性,一个文件占用一个inode,同时记录此文件的数据所在的block号码;
  block:实际记录文件的内容,若文件太大时会占用多个 block ;
  super block:记录文件系统的整体信息,包括inode/block 的总量、使用量、剩余量,以及文件系统的格式与相关信息等。
 
  每个inode与block都有编号,而每个文件系统都会占用一个inode,inode中有文件数据放置的block号码。我们可以找到文件的 inode,然后找出文件所放置数据的block号码,之后读出数据。这种数据访问方式成为索引式文件系统。这种文件系统一般不太需要经常进行磁盘碎片整 理。
  而 U 盘等为FAT文件格式,每个block号码都记录在前一个block号码中,因此数据的读取性能较差,用久了得进行碎片整理。
 
  linux的Ext2文件系统一开始就将 inode 与block规划好了,除非重新格式化(或者利用resize2fs等命令更改文件系统大小),否则 inode 与block 固定后就不再变动。
 
  如果文件系统太大,将所有的inode 与 block 放在一起很难管理,因此Ext2文件系统在格式化的时候基本上是区分为多个块组(block group),每个块组都有独立的inode/block/super block系统。
 
data block (数据块)
  Ext2 文件系统支持的block 有 1K,2K,4K三种。在格式化时 block已经固定,且每个block都有编号。但要注意,由于block大小不同,会导致该文件系统能够支持的最大磁盘容量与最大单一文件容量并不相同。
  使用的block太小,则一个文件要用多两个block,inode 记录也会增加,降低读写性能。
  若block太大,文件小的时候则会使剩余空间不能用了,会浪费资源。
 
inodetable (inode表格)
  再说一下inode.inode记录的文件数据至少要包含以下内容:
  该文件的访问模式;
  该文件的所有者与所有组;
  该文件的大小;
  该文件的创建或者状态改变时间(ctime);
  最近一次的读取时间(atime);
  最近修改时间(mtime);
  该文件真正内容的指向。
  inode 还有一下特色:
   每个inode大小均固定为 128bytes;
   每个文件都会占用一个inode;
   系统读文件时需要先找到 inode,并分析inode所记录的权限与用户是否符合,若符合才能够读取         block的内容。
  但是有一个问题,需要记录的文件属性特别多,而且一个文件可能有很多很多block,而inode又太小(记录一个block要用4byte),怎么 办?linux的解决办法是:将inode记录block号码的区域定义为12个直接、一个间接、一个双间接与一个三间接记录区。总共可记录的block 数量为:                 12+256+256*256+256*256*256(K)=16G     这只符合block大小为1K时的情况。
 
Superblock (超级块)
  这里面记录文件系统的整体情况。比如文件系统的挂载时间、最近一次写入数据的时间、最近一次检验磁盘(fsck)的时间等。还有一个validbit数值,若此文件系统已经被挂载,validbit的值为 0 ,若未被挂载,则validbit值为 1 。
 
  了解了文件系统的概念之后,当然是要查看这个文件系统,用下面的命令:
#dumpe2fs [-bh] 设备文件名
-b  列出保留为坏道的部分
-h  仅列出superblock的数据,不会列出其他的区段内容。
  例如:
#dumpe2fs /dev/hdc2
 

linux源代码阅读笔记 linux文件系统(转)的更多相关文章

  1. linux源代码阅读笔记 linux文件系统(二)

    上一篇文章说到linux文件系统中分为超级块,inode块,block块.inode块给出文件的权限,修改时间,大小等信息. 但是实际上,文件的数据是存储在block块中的.而inode块中给出了存储 ...

  2. linux源代码阅读笔记 linux文件系统(三)

    当系统申请一个新的inode时.系统并不会对磁盘进行读写.它会在存储在内存的inode表(inode_table)中寻找一个空闲的位置. 如果找到了,直接返回该inode.否则要等待一个空闲的位置. ...

  3. linux源代码阅读笔记 find_entry分析

    78 static struct buffer_head * find_entry(struct m_inode * dir, 79 const char * name, int namelen, s ...

  4. linux源代码阅读笔记 高速缓冲区管理

    高速缓冲区是文件系统访问块设备中数据的必经要道,为了访问文件系统等块设备上的数据,内核可以每次都访问块设备,进行读写操作. 为了提高系统性能,内核在内存中开辟一个高速数据缓冲区.在Linux内核中,高 ...

  5. linux源代码阅读笔记 free_page_tables()分析

    /* 77 * This function frees a continuos block of page tables, as needed 78 * by 'exit()'. As does co ...

  6. linux源代码阅读笔记 get_free_page()代码分析

    /* 34 * Get physical address of first (actually last :-) free page, and mark it 35 * used. If no fre ...

  7. linux源代码阅读笔记 fork和execve的区别

    1. man exec就可以知到: The exec() family of functions replaces the current process image with a new proce ...

  8. linux源代码阅读笔记 八进制

    c语言中,众所周知,以0x开头的数是16进制数.例如 0x8FFF 然而较少使用的是八进制数.它以0开头.例如 01234

  9. 非常好!!!Linux源代码阅读——内核引导【转】

    Linux源代码阅读——内核引导 转自:http://home.ustc.edu.cn/~boj/courses/linux_kernel/1_boot.html 目录 Linux 引导过程综述 BI ...

随机推荐

  1. 利用word2vec对关键词进行聚类

    1.收集预料 自己写个爬虫去收集网页上的数据. 使用别人提供好的数据http://www.sogou.com/labs/dl/ca.html 2.对预料进行去噪和分词 我们需要content其中的值, ...

  2. Spring MVC的启动过程

    一.概述 下面一个基本的运用springMVC的的web.xml的配置,这里要注意两个地方,一个是ContextLoadListener,一个是DispatcherServlet.web容器正是通过这 ...

  3. callback调用测试

    <html> <head> <script> var context="全局"; var testObj={ context:"初始& ...

  4. Windows Server 2008 R2(x64) IIS7+PHP5(FastCGI)环境搭建

    相关软件下载: 1.PHP下载地址: http://windows.php.net/downloads/releases/php-5.4.4-nts-Win32-VC9-x86.zip 如果是win2 ...

  5. 值类型的Constructor

    使用C#的时候我们最熟悉的是类,也就是Reference Type,翻译成中文是引用类型.但是C#还有另外的一种类型往往被我们用的最多缺经常被忽视,这种类型就是值类型(Value Type). 值类型 ...

  6. 所有外包项目威客网站列表----来自程序员接私活网qxj.me

    猪八戒    http://www.zhubajie.com/  有佣金,建议别去坑死了 csto      http://www.csto.com/ 开源中国众包   https://zb.osch ...

  7. 关于CSS中的PX值(像素)

    场景: 人物:前端实习生「阿树」与 切图工程师「玉凤」事件:设计师出设计稿,前端实现页面 玉凤:树,设计稿发给你啦,差那么点像素,就叼死你┏(  ̄へ ̄)=☞阿树:~(>_<)~毛问题噶啦~ ...

  8. 【转】你需要知道的Python用法

    在使用Python多年以后,我偶然发现了一些我们过去不知道的功能和特性.一些可以说是非常有用,但却没有充分利用.考虑到这一点,我编辑了一些的你应该了解的Pyghon功能特色. 带任意数量参数的函数 你 ...

  9. 失败经历--在windows下安装meld

    缘起 在linux下,最早用的比较工具是vim,这是作为一个vimer的自尊(其实没有关系吧).终于有一天,在比较同一个项目的两个版本的时候,比较了两三个文件后,看着vim里面花花绿绿的颜色,实在是受 ...

  10. c++线程传参问题

    std::thread可以和任何可调用类型一起工作,可调用对象和函数带有参数时,可以简单地将参数传递给std::thread的构造函数 例如: #include<iostream> #in ...