首页 > 其他分享 >2022-2023-1 20201324《信息安全系统设计与实现(上)》第11章

2022-2023-1 20201324《信息安全系统设计与实现(上)》第11章

时间:2022-10-01 18:23:35浏览次数:50  
标签:11 文件 EXT2 文件系统 索引 2022 2023 磁盘 节点

目录

1 EXT2文件系统

Linux一直将EXT2作为默认文件系统。EXT3是EXT2的扩展。EXT3中增加的主要内容是一个日志文件,他将文件系统的变更记录在日志中。日志可在文件系统崩溃时更快地从错误中恢复。没有错误的EXT3文件系统与EXT2文件系统相同。EXT3的最新扩展时EXT4。EXT4的主要变化是磁盘块的分配。在EXT4中,块编号为48位。EXT4是分配连续的磁盘块,称为区段

2 EXT2文件系统数据结构

(1)通过mkfs创建虚拟磁盘

在Linux下,命令

mke2fs [-b blksize -N ninodes] device nblocks

在设备上创建一个带有nblocks个块(每个块大小为blksize字节)和ninodes个索引节点的EXT2文件系统。设备可以是真实设备,也可以是虚拟磁盘文件。如果未指定blksize,则默认块大小为1KB。
举例:

dd if=/dev/zero of=vdisk bs=1024 count=1440
mke2fs vdisk 1440

可在一个名为vdisk的虚拟磁盘文件上创建一个EXT2文件系统,有1440个大小为1KB的块。

(2)虚拟磁盘布局

EXT2文件系统的虚拟磁盘布局如图

EXT2将磁盘分为若干个块结构,每个块结构负责特定功能,包含:引导块、超级块、块组描述符块、块位图、索引点位图、索引节点、数据块和其它数据块。

Block#0:引导块。B0是引导块,文件系统不会使用它。它用来容纳一个引导程序,从磁盘引导操作系统

Block#1:超级块。在硬盘分区中字节偏移量为1024)B1是超级块,用于容纳整个文件系统的信息

Block#2:块组描述符块。EXT2将磁盘块分成几个组。每个组有8192个块(硬盘上的大小为32K)。每组用一个块组描述符结构体描述)

Block#8:块位图(Bmap)bg_block_bitmap)位图用来表示某种项的位序列,例如,磁盘块或索引节点。位图用于分配和回收项。在位图中,0位表示对应项处于FREE状态,1位表示对应项处于IN_USE状态。一个软盘有1440块。

Block#9:索引节点位图(Imap)(bg_inode_bitmap)一个索引节点就是用来代表一个文件的数据结构。EXT2文件系统是使用有限数量的索引节点创建的。各索引节点的状态用B9中Imap中的一个位表示。在EXT2 FS中,前10个索引节点是预留的。

Block#10:索引(开始)节点(bg_inode_table)每个文件都用一个128字节(EXT4中的是256字节)的独特索引节点结构体表示。

i_block[15]数组包含指向文件磁盘块的指针,这些磁盘块有:

  • 直接块:i_block[0]至i_block[11]指向直接磁块盘
  • 间接块:i_block[12]指向一个包含256个块编号的磁盘块,每个块编号指向一个磁盘块
  • 双重间接块:i_block[13]指向一个指向256个块的块,每个块指向256个磁盘块
  • 三重间接块:i_block[14]对于小型EXT2文件可忽略

3 邮差算法

邮差算法是指将一个二元(多元)应表转换为一个一元的线性表的转换算法。邮差算法在文件访问上有重大意义,一个良好的算法可以大大加快文件访问速度。同时使用邮差算法和位屏蔽可以实现快速访问多维的数据个体,而不用转向复杂的结构体。具体的实现方式可以通过邮差算法将索引节点转为磁盘上的索引节点来完场。

(1)将索引节点号转换为磁盘上的索引节点

在EXT2文件系统中,每个文件都有一个唯一的索引节点结构。在文件系统上,索引节点从inode_table块开始。每个磁盘包含

INODES_PER_BLOCK = BLOCK_SIZE / sizeof(INODE)

个索引节点。每个索引节点都有一个唯一的索引节点结构。在文件系统磁盘上,索引节点从inode_table块开始。每个磁盘块包含

INODES_PER_BLOCK = BLOCK_SIZE / sizeof(INODE)

个索引节点。每个索引节点都有一个唯一的索引节点号,ino = 1,2,...,从1开始线性计数。已知一个ino,如1234,那么哪个磁盘块包含该索引节点,以及哪个索引节点在该块中?我们需要知道磁盘块号,因为需要通过块来读/写一个真正的磁盘。

block = (ino -1) / INODES_PER_BLOCK + inode_table;
inode = (ino - 1) % INODES_PER_BLOCK;

同样,将EXT2文件系统中的双重和三重间接逻辑块号转换为物理块号也依赖于邮差算法。
将线性磁盘块号转换为CHS = (柱面、磁头、扇区)格式:软盘和旧硬盘使用CHS寻址,但文件系统始终使用线性块寻址。在调用BIOS INT13时,可用该算法将磁盘块号转换为CHS。

4 1级文件系统函数

mkdir:创建带路径名的新目录
creat:创建新的空文件
rmdir:删除为空的目录
link:链接两个文件
unlink:断连两个文件
symlink:实现任意两文件,包括文件夹的链接
readlink:读取符号文件的目录文件名并返回文件名长度

(1)手动实现mkdir

#include <stdio.h>
//#include <process.h>
#include<pthread.h>
#include <sys/dir.h>
	int main(void){
	int status;
	printf("please input the name of dir:");
	char s[100];
	scanf("%s",s);
	status = mkdir(s);
	if(!status)  
		printf("Directory created\n");
	else
		printf("Unable to create directory\n");
	system("dir"); /*显示创建后当前文件夹下的文件信息*/	
	return 0;
}

(2)手动实现rmdir

#include <stdio.h>
//#include <process.h>
#include<pthread.h>
#include <sys/dir.h>
int main(void){
	int status;
	printf("please input the name of dir:");
	char s[100];
	scanf("%s",s);
  	status = rmdir(s);
	if(!status) 
		printf("\n\nDirectory deleted\n");
	else
		perror("Unable to delete directory");
	system("dir");/*显示删除后当前文件夹下的文件信息*/	
    return 0;
}

5 2级文件系统函数

open:打开文件
lseek:依据偏移量再读取文件内容
close:关闭文件
read:从读取文件读取数据
write:向文件写入数据
opendir/readdir:将目录视作文件,再打开/读

6 3级文件系统函数

挂载命令:
mount filesys mount_point
卸载算法
交叉挂载
文件保护
文件锁定

标签:11,文件,EXT2,文件系统,索引,2022,2023,磁盘,节点
From: https://www.cnblogs.com/cqszxy2020/p/16747538.html

相关文章

  • 备库执行采集awr报告时,报错ORA-01110 ORA-01157
    系统:CentOS7.964位数据库:Oracle11.2.0.464位环境:rac(双节点)+dg问题描述:备库执行采集awr报告时,报错ORA-01110、ORA-01157,如下所示:press<return>tocontinue,otherw......
  • 2022.10.1
    B.CrazyBinaryString给01串,问最长的01数量相等的子串和子序列长度。#include<bits/stdc++.h>usingnamespacestd;map<int,int>M;intn;chars[100005];intma......
  • 2022-2023-1 20221404 《计算机基础与程序设计》第5周学习总结
    2022-2023-120221404《计算机基础与程序设计》第5周学习总结作业信息班级链接(2022-2023-1-计算机基础与程序设计)作业要求(2022-2023-1计算机基础与程序设计第......
  • CAXA CAPP工艺图表 2022软件安装包和安装教程
    CAXACAPP工艺图表2022软件简介:CAXACAPP工艺图表2022是一款CAD软件使用辅助软件,打造了全新的工艺编制软件平台,具有多文档、多环境的特点,使用户在编制工艺文档、或绘制工......
  • win 11 VMware workstations b不可恢复的错误(vcpu-2)
    首先检查一下电脑有没有开启CPU虚拟化,我的已经开启了,按照百度的方法去控制面板卸载程序里面,找到VMware右击更改弹出的安装程序点修复,,结果修复出错了,显示写入文件D:\vm\gl......
  • 2022高联P2数论
    P2:设整数\(n(n>1)\)恰有k个互不相同的质因子,记n的所有正约数之和为\(\sigma(n)\).求证:\(\sigma(n)|(2n-k)!\).既然已给出了质因子个数和\(\sigma(n)\),那么就可设出\(n\)......
  • 20222年10月1日
      今天是国庆节,阳光明媚,微风徐来,桂花香飘十里,美好的一天!我接受上天的馈赠!感恩上天!  唯有阅读,写作,烘培美食,养花,练字,瑜伽让人幸福愉悦!唯有美景,美食,美文不可辜负! ......
  • 2022-2023-1 20221322《计算机基础与程序设计》第五周学习总结
    作业信息这个作业属于哪个课程<班级的链接>(2022-2023-1-计算机基础与程序设计)这个作业要求在哪里<作业要求的链接>(2022-2023-1计算机基础与程序设计第四周作业......
  • 2022-2023-1 20221305 《计算机基础与程序设计》第五周学习总结
    教材学习内容总结了解pep/9的使用方法将汇编语言转化为机器语言学习简单的伪代码,为写程序提供基本思路了解黑盒白盒测试的原理和使用条件教材学习中的问题和解决过程......
  • 学期(如2022-2023-1) 学号(如:20221425) 《计算机基础与程序设计》第五周学习总结
    学期(如2022-2023-1)学号(如:20221425)《计算机基础与程序设计》第五周学习总结作业信息这个作业属于哪个课程<班级的链接>(如2022-2023-1-计算机基础与程序设计)这......