Inode构建的ext3文件树

如何入手才能更好的理解一个文件系统呢?个人认为首先应该从文件系统在磁盘上的元数据分布入手,其次再看文件系统的软件实现,例如内存中的结构以及元数据操作方式等等。这里我想通过ext3在磁盘上的元数据信息来认识一下ext3文件树。

考虑一下,如果想要实现一个文件系统,我们需要在磁盘上存储哪些基本要素?通过何种方式组织起文件与目录之间的关系?如何管理实际的物理资源块?在ext3文件系统中,inode这个数据结构承担了重要角色,组织起了整个ext3文件系统框架。另外,在ext3文件系统中采用物理资源分组管理的办法,并采用bitmap位图信息描述物理块被使用情况。

文件系统在磁盘上的数据分布如下图所示:

Ext3采用块组的方式组织所有的物理磁盘空间,superblock和block set description信息可以采用稀疏存储的方式在块组中保存。每个块组中有两个最重要的成员:

1,inode块及其bitmap。Inode Bitmap用于描述这个块组中inode资源块的使用情况,blk for inodes是用来存储inode的资源块。需要分配一个inode时,文件系统需要将对应的bitmap置位。

2,blks块及其bitmap。在每个块组中绝大部分的空间被数据资源块占有,并且采用block bitmap对其使用情况进行描述。需要分配一个资源块时,文件系统需要将对应的bitmap置位。

Inode是ext3文件系统的纽带,其采用何种方式将文件系统表述出来的呢? 下图说明了采用inode建立的文件系统树。

在ext3文件系统中,必须有一个root inode,该inode在磁盘上的位置是固定的,在文件系统启动的时候,root inode是文件系统的入口。Root inode描述的是一个目录项,即其指向的数据块中存储着目录项。每个目录项会指向下一个inode,如果目录项描述的是一个普通文件,那么下一个inode会分配物理块,并且将文件数据存储到物理块中;如果目录项描述的是下一级目录,那么,下一个inode分配的block中会存储下一级目录的目录项。通过inode和目录项,ext3构建起了一颗庞大的文件树。

一旦脑海中拥有以inode为基础的文件树之后,阅读分析ext3的软件实现代码就相对容易了。另外,如果我们想要做ext3的文件系统数据恢复,那么我们也需要理解这样一颗文件树,以及数据结构的详细定义。

本文出自 “存储之道” 博客,请务必保留此出处http://alanwu.blog.51cto.com/3652632/1092313

查看本栏目更多精彩内容:http://www.bianceng.cn/database/storage/

时间: 2024-08-01 19:33:22

Inode构建的ext3文件树的相关文章

JavaScript实现的经典文件树菜单效果_javascript技巧

本文实例讲述了JavaScript实现的经典文件树菜单效果.分享给大家供大家参考.具体如下: 这是一款简单的JavaScript文件树菜单,经典的树形菜单,特别是文件夹的样式比较经典,折叠和展开也很流畅自然,不过本款菜单有一个缺点,就是菜单的数据写在JS的数组里,这样一来多多少少对菜单内容的修改造成一定麻烦. 先来看看运行效果截图: 在线演示地址如下: http://demo.jb51.net/js/2015/js-file-tree-style-menu-codes/ 具体代码如下: <!DO

php实现从ftp服务器上下载文件树到本地电脑的程序_php技巧

复制代码 代码如下: /* 用ftp_nlist()函授时,返回的数组值会有两种类型:因服务器不同而异 a:单独的文件名 b:包含目录的文件名. 如果挪用,请注意更改此处. */ <?php function download_file($dir,$fc,$_FILE_) { $fn=ftp_nlist($fc,".");//列出该目录的文件名(含子目录),存储在数组中 $size=sizeof($fn); $dir=($dir=="")?$dir:('/'.

请问一下用ExtJs在Asp.net上构建一个动态的树?

问题描述 请问一下用ExtJs在Asp.net上构建一个动态的树?请吧源码发给我谢谢! 解决方案 解决方案二:<html><head><scripttype="text/javascript"src="js/ext/ext-base.js"></script><scripttype="text/javascript"src="js/ext/ext-all.js">&l

使用GWT和RESTful Web服务构建动态的组织树

简介 最近几年,Web 应用程序开发的潮流是创建富 Internet 应用程 序,其中大多数是使用 Asynchronous JavaScript + XML (Ajax) 实现的.但是 ,由于编写 JavaScript 代码比较复杂,这种方法并不容易,尤其是很难构建大 型 Web 应用程序.因此出现了 GWT:它让我们能够使用 Java 编程而不是 Ajax 构建功能丰富的响应性的 Web 界面.GWT 还提供 Java 开发的所有优势,比如 出色的 IDE 支持和高级调试功能.GWT 可以显

EXT3文件系统故障

一个网站服务器.数据卷为1TB硬盘一块,未做RAID,EXT3文件系统,未知原因,远程无法访问,到机房查询故障后发现文件系统无法mount,未做fsck.管理员为了安全,试图将整个硬盘dd到另一块相同的硬盘上再做分析及数据恢复工作,但dd备份时只能备份前320M数据,后面的无法读取,试图调整起始位置依然无济于事.因机房环境很吵,无法分辨硬盘是否有异响. 用户问了几个问题: 1.初步估计的故障是什么?数据恢复的可能性有多大? 答:最有可能的情况有两个:坏道或磁头不稳定.如果是坏道原因,可以通过专业

c++构建哈夫曼树-用c++构建一个哈夫曼树

问题描述 用c++构建一个哈夫曼树 输入字符个数,权值,打印哈夫曼树,编码和译码,源代码,可以用c-free运行的那种,求各位大神帮忙解答,要完整的代码拜托了 解决方案 http://wenku.baidu.com/link?url=soJMJxpwqcyygmDD3--Q8O4FUz2v7fjaZbwzWL04tAFjGbaTBoVBI49LIa5XIAfGODAr5UQdu_fHjXZnGWoDMuvnUKsjIBSolWTCbB2dL8i 解决方案二: http://download.cs

HDU2527 构建哈夫曼树的灵巧运用

上课老师说了知道哈夫曼树叶子 不构图求二叉树的权 就是在构造哈夫曼树的时候运用构图的方法 把 每个结点的值加起来就是该数的权 证明 W=∑叶子权*该叶子层数 除了叶子的结点和就是这个树的权  构造一个树就知道了 结点的权 肯定是下一层结点的和 就好像  W=∑叶子权*该叶子层数 这个公式运用了 乘法分配律一样=  =  #include <iostream> #include<cstdio> #include<cstring> #include<algorithm

php 递归遍历文件树代码

> ../b.php教程 和 ../a.php,结果就会在扫描报告上面出现两次,很是奇怪.    代码如下 复制代码 //Update at 2010.07.25 - 以下代码作废 $path = '..'; function get_filetree_scandir($path){ $tree = array(); foreach(scandir($path) as $single){ if(is_dir('../'.$single)){ $tree = array_merge($tree,g

ext3文件系统恢复被删文件

大家都知道,在linux系统中是没有回收站的概念的,一旦rm命令删除某个文件之后,就找不回来.不过其实这时还是有救的,之前大概清楚个概念,知道有救,但如何救就没怎么详细去了解了.那么这次我们来实际操作下. 其实为什么说还有救呢?说这个之前需要对ext3文件系统有个大概的了解. 在ext3文件系统中我们创建一个文件时,它首先会在ext3文件系统的inode表申请个inode号,然后再将文件的信息以及数据写入.那么inode号又是什么呢? inode号里面包括两部分,一个是metadata,即是元数