《信息安全系统设计与实现》学习笔记5

第11章 EXT2文件系统

教材学习内容总结

本章主要讲述了EXT2文件系统。首先描述了EXT2 文件系统的历史,并对比了 EXT3/EXT4 文件系统。用程序示例展示了EXT2的数据结构,并将文件系统的实现划分为3个级别,级别1扩展了基本文件系统,以实现文件系统树,级别2实现了文件内容的读/写操作,级别3实现了文件系统的挂载/装载和文件保护。

1、EXT2文件系统

(1)虚拟磁盘布局

(2)磁盘块内容

Block#0:引导块,用于容纳从磁盘引导操作系统的引导程序

Block#1:超级块,用于容纳关于整个文件系统的信息

Block#2:块组描述符块,EXT2将磁盘块分成几个组,每组用一个块组描述符结构体描述

Block#8:块位图,用来表示某种项的位序列

Block#9:索引节点位图,用来代表一个文件的数据结构
Block#10:索引节点块,每个文件都用一个128字节的独特索引节点结构体表示
目录条目:目录包含dir_entry结构

2、基本文件系统

(1)type.h文件

包含EXT2文件系统的数据结构类型,还包含打开文件表、挂载表、PROC结构体和文件系统常数。

(2)global.c文件

包含文件系统的全局变量。

(3)实用程序函数

util.c file:包含文件系统常用的实用程序函数
    get_block/put_block函数:该函数将虚拟磁盘块读/写到内存的缓冲区中。
    iget(dev,ino):该函数返回一个指针,指向包含INODE(dev,ino)的内存minode。
    The put(INODE *mip):该函数释放一个mip指向的用完的minode。
    getino():该函数实现文件系统树遍历算法。

(4)mount-root

mount_root.c文件:包含mount_root()函数,在系统初始化期间调用该函数来挂载根文件系统。

3、文件系统函数

文件系统结构

文件系统的实现分为三个级别。

    第1级别实现了基本文件系统树。
    第2级别实现了文件内容读/写函数。
    第3级别实现了文件系统的挂载、卸载和文件保护。

(1)1级文件函数

mkdir_creat.c      : make directory, create regular file
ls_cd_pwd.c        : list directory, change directory, get CWD path
rmdir.c            : remove directory
link_unlink.c      : hard link and unlink files
symlink_readlink.c : symbolic link files
stat.c             : return file information
misc1.c            : access,chmod, chown, utime, etc.

1)mkdir算法
mkdir pathname
创建一个带路径名的新目录

2)creat算法
创建一个空的普通文件

3)rmdir算法
rmdir实现
link命令:link old_file new_file

4)unlink算法
symlink命令:symlink old_file new_file

(2)2级文件函数

open_close_lseek.c :  open file for RBAD | WRITE|APPEND,close file and lseek
read.c             :  read from file descriptor of an opened regular file
write.c            :  write to file descriptor of an opened regular file
opendir_readdir.c  :  open and read directory
1)open算法
2)lseek
3)close算法

(3)3级文件函数

mount__umount.c    : mount/umount file systems
file_protection    : access permission checking
file-locking       : lock/unlock files
1)挂载算法
挂载操作命令:

2)卸载算法

4、实践

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

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

查看各分区挂载

查看超级块

5、问题

为什么每个块组中的块数是8192个?
答:因为用1个块作为位图保存本块组block的使用情况(bit为1表示对应的block被使用,bit为0表示对应的block空闲),1个block是1024字节,共有1024*8=8192个bit。所以,每个块组最多只能是81292个块。

posted @ 2021-10-17 11:24  djx20191313  阅读(47)  评论(0编辑  收藏  举报