Linux系统磁盘节点,linux 下面向磁盘逻辑结构的信息隐藏系统

这是课程设计题目,已经看了两周相关的东西,现在还是没有一点思路,各位帮忙给点提示吧

|

这个东西你要参考linux下的ext2文件系统和ext3文件系统,明白清楚ext2的具体文件的存储方法。

ext2文件系统的数据块大小一般为 1024B、2048B 或 4096B

ext2文件系统采用的索引节点(inode):索引节点采用了多重索引结构,主要包括12个直接指针和3个间接指针。直接指针包含12个直接指针块,他们直接指向包含文件数据的数据块,紧接在后面的3个间接指针是为了适应文件的大小变化而设计的。

假设数据块大小为1024B ,利用12个直接指针,能保存最大为12KB的文件,当文件超过12KB时,则要利用单级间接指针,该指针指向的数据块保存有一组数据块指针,这些指针依次指向包含有实际数据的数据块,如果每个指针占用4B,则每个单级指针数据块可保存 1024/4=256 个数据指针,因此利用直接指针和单级间接指针可保存 1024*12+1024*256=268 KB的文件。当文件超过268KB时,再利用二级间接指针,直到使用三级间接指针。

利用直接指针、单级间接指针、二级间接指针、三级间接指针可保存的最大文件大小为:

1024*12+1024*256+1024*256*256+1024*256*256*256=16843020 KB,约 16GB

若数据块大小为2048B,指针占4B,则最大文件大小为: 2048*12+2048*512+2048*512*512+2048*512*512*512=268,960,792 KB 约 268GB

若数据块大小为4096B,指针占4B,则最大文件大小为: 4096*12+4096*1024+4096*1024*1024+4096*1024*1024*1024=4,299,165,744 KB ,约 4TB

注: 命令 tune2fs -l /dev/sda5  可查看文件系统

ext2文件系统最大文件名长度: 255个字符

ext2文件系统的缺点:

ext2在写入文件内容的同时并没有同时写入文件meta-data,其工作顺序是先写入文件的内容,然后等空闲时候才写入文件的meta-data。若发生意外,则文件系统就会处于不一致状态。

在重新启动系统的时候,linux会启动 fsk ( file system check) 的程式,扫描整个文件系统并试图修复,但不提供确保。

二. EXT2和EXT3

EXT2是linux上标准的文件系统,EXT3是在EXT2基础上增加日志形成的,其思想还是可以追溯到早期UNIX家族发展的基于超级块和inode的经典概念。/dev/sda#n表示/dev/sda硬盘上的第#n个分区,如果一个分区备格式化为ext2或ext3文件系统,那么整个分区的布局如图〖二〗所示:

图二:EXT2文件系统分区结构

分区上的扇区是从0开始编号的,每个扇区512bytes,一个块(block)大小一般是1k、2k、3k和4k,具体大小可在创建文件系统时指定,如果不指定块大小那么会根据分区的大小自动相应选择一个。分区开始的1024bytes存放引导程序boot,接下来的1024bytes存放超级块super block,组描述字group descriptors起始于一个新块,并单独占用一个块空间,之后的所有块被组织成块组,块组才是真正存放文件的场所。超级块含有整个文件系统的一些全局参数,如:卷名、全局唯一标识符、状态、块大小、总块数、每组inode数,总i节点数、每组块数等等,super block在文件mount时被读入内存,直到umount时被释放,由于超级块对于文件系统来说至关重要,所以超级块一般在第1、3、5、7和9组的首块中存有副本。

一个块组描述字占用32个字节,其中三个主要指针分别指到这个块组的i节点表、i节点位图和块位图。块组的设计是为了拉近inode和它的数据块的距离,这样就可以提高磁盘存取性能,一个块组的具体结构示意图见图二右边部分。

inode是EXT2文件系统的精华,一个inode对应一个文件,inode编号是全局性的,从1开始,描述参考图〖三〗。

inode中存放文件的一些重要属性,如权限、文件大小、访问时间、修改时间、创建时间、文件属主ID、组ID、块数等。Inode包含15个指针,前12个直接指向数据块,后三个依次是一次间接、二次间接和三次间接指向数据块。

文件系统的目录不同于普通文件的结构,是一种固定格式的文件,里面的每一个条目代表目录中的一个文件,示意图见图〖四〗。

图〖四〗:目录条目示意图

三.实现方法

每个文件的创建都会有一个i节点,它包括该文件的所有信息。要想在载体文件中隐藏信息,必须要清楚文件的属性信息,即必须清楚i节点的内容和怎样操作i节点。

模块功能如下:文件存储过程,操作i节点,信息隐藏,信息提取。

我们的隐藏提取信息的想法是:由于要隐藏的信息不是很大,假设是小于1kb的,我们可以先将一个文件写入磁盘中,然后通过系统调用调出该文件的i节点信息,然后申请一个空盘块,令i节点的指针指向该盘块,写入要隐藏的信息,保持原来的块数不变,那么当读取该文件时,不会读到隐藏信息的内容,当需要提取隐藏信息时,我们再通过调出该文件的i节点信息,将其属性快数加一,然后写入,当重新读该文件时,便可以读到相应的隐藏信息内容。

Inode.c程序主要设计文件系统i节点信息的访问和管理。

操作i节点:定义一个iget()函数,功能是从设备上取指定节点号的i节点,处理过程是扫描整个i节点表,来找相应的i节点,最后返回找到的i节点指针。

read_inode()函数:主要功能是读取指定i节点的信息:从设备上读取含有指定i节点信息的i节点盘块,然后复制到指定的i节点结构中。为了确定i节点所在的设备逻辑块号,必须首先读取相应设备上的超级块,以获取用于计算逻辑块号的每块i节点数信息。在计算出i节点所在的逻辑块号后,就把逻辑块读入一缓冲块中,然后把缓冲块中相应位置处的i节点内容复制到参数指定的位置处。

Bmap()函数:主要功能是:文件数据块映射到盘块的处理操作,该函数把指定的文件数据块block对应到设备上逻辑块上,并返回逻辑块号。如果自己指定指针置位盘块,则在设备上对应逻辑块不存在时就申请新磁盘块,返回文件数据块block对应在设备上的逻辑块号(盘块号)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值