逸致

导航

学习笔记5

学习笔记: EXT2 文件系统

知识点归纳

EX2文件系统数据结构

通过mkfs创建虚拟硬盘

命令为:mke2fs [-b blksize -N ninodes] device nblocks

虚拟磁盘布局

超级块

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

    u32 s_blocks_count://文件系统中块总数
    u32 s_r_blocks_count://为超级用户保留的块数
    u32 s_free_blocks_count: //文件系统中空闲块总数
    u32 s_mtime://文件系统的挂接时间
    u32 s_wtime://最后一次对该超级块进行写操作的时间
    u32 s_magic ://魔数签名,用于确定文件系统版本的标志
    u32 s_inodes_per_group://表示每个组块的inode数目,查找文件inode所在块的位置很重要
    u32 s_mnt_count://文件系统挂接计数
    u32 s_max_mnt_count://文件系统最大挂接计数
    u32 s_state://文件系统的状态
    u16 s_magic;//魔术签名


块组描述符

Block#2:块组描述符,每组用一个块组描述符结构体来描述。

块和索引节点位图

BLOCK#8:块位图
BLOCK:9:索引节点位图,一个索引节点就是代表一个文件的数据结构。

索引节点

BLOCK#10:索引节点

直接块
间接块
双重间接块
三重间接块

数据块

紧跟在索引节点块后面的是文件存储数据块

目录条目

包含dir_entry结构,是一种可扩充结构

3级文件系统函数

支持系统文件支持文件系统的挂载、卸载和文件保护

挂载算法

mount filesys mount_point
可将某个文件系统挂载到mount_point目录上
卸载算法同理

卸载算法

交叉挂载点

*向下遍历
*向上遍历

文件保护

9个权限位

文件系统项目拓展

多个组-4KB大小块-管道文件-I/O缓冲

实践##

编程项目:编写一个c程序来显示设备上EXT2文件系统的块组描述符
相关的代码:

#include <stdio.h>
#include <fcntl.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <sys/ioctl.h>
#include <linux/fs.h>

int main() {
    int fd = open("/dev/sda1", O_RDONLY);  // 替换为你的设备路径,比如 "/dev/sdb1"
    if (fd == -1) {
        perror("open");
        return 1;
    }

    struct ext2_super_block superblock;
    if (ioctl(fd, EXT2_IOC_SUPERBLOCK, &superblock) == -1) {
        perror("ioctl");
        close(fd);
        return 1;
    }

    printf("Block Group Descriptor:\n");
    printf("Block Bitmap Block: %u\n", superblock.s_block_bitmap);
    printf("Inode Bitmap Block: %u\n", superblock.s_inode_bitmap);
    printf("Inode Table Block: %u\n", superblock.s_inode_table);
    printf("Free Blocks Count: %u\n", superblock.s_free_blocks_count);
    printf("Free Inodes Count: %u\n", superblock.s_free_inodes_count);
    printf("Used Directories Count: %u\n", superblock.s_used_dirs_count);

    close(fd);
    return 0;
}

运行结果:

苏格拉底挑战

  1. 知识点1:EXT2文件系统数据结构

    我在学习EXT2文件系统数据结构知识点,请你以苏格拉底的方式对我进行提问,一次一个问题。

 - 针对我EXT2文件系统数据结构知识点,我理解了吗?

 - 我的回答结束了,请对我的回答进行评价总结。

  1. 知识点2:三级文件操作系统

    我在学习使用三级文件操作系统知识点,请你以苏格拉底的方式对我进行提问,一次一个问题。

    • 针对我三级文件操作系统知识点,我理解了吗?

    • 我的回答结束了,请对我的回答进行评价总结。

问题与解决思路

在学习过程中,我遇到了以下问题,并使用chatgpt等AI工具解决:

  1. 问题1:缺少必要的头文件库


gpt回答添加头文件#include <ext2fs/ext2_fs.h>

posted on 2023-10-15 20:02  逸致  阅读(6)  评论(0编辑  收藏  举报