首页 > 其他分享 >学习笔记5

学习笔记5

时间:2023-10-15 17:22:15浏览次数:33  
标签:count ... 文件系统 笔记 学习 索引 u32 节点

EXT2文件系统

EXT2(The Second Extended File System)是Linux的标准文件系统,一直以来被广泛使用。EXT3是EXT2的扩展版本,增加了一个日志系统。

文件系统背景

  • Linux标准文件系统: EXT2是Linux的标准文件系统,多年来一直被广泛使用。
  • EXT3的扩展: EXT3是EXT2的扩展版本,主要增加了一个日志系统,用于提高文件系统的容错性和恢复速度。

EXT2文件系统数据结构

虚拟磁盘布局

  1. Block#0 - 引导块: 通常用于引导程序,文件系统不使用。
  2. Block#1 - 超级块: 包含整个文件系统的信息,包括文件总数、块总数、保留块数、空闲块数等。

超级块结构

struct ext2_super_block {
u32 s_inodes_count; // 索引节点总数
u32 s_blocks_count; // 块总数
u32 s_r_blocks_count; // 保留块总数
// ... 其他字段 ...
u32 s_blocks_per_group; // 每组块总数
u32 s_clusters_per_group; // 每组片段总数
// ... 更多非必要字段 ...
};

块组描述符块

  • Block#2 - 块组描述符块: 文件系统将磁盘块划分为多个块组,每个块组包含一定数量的块。块组描述符用于描述块组的信息。

      struct ext2_group_desc {
      u32 bg_block_bitmap; // 块位图块号
      u32 bg_inode_bitmap; // 索引节点位图块号
      u32 bg_inode_table; // 索引节点表开始块号
      // ... 其他字段 ...
      u16 bg_free_blocks_count; // 空闲块数
      u16 bg_free_inodes_count; // 空闲索引节点数
      // ... 更多字段 ...
      };
    

块位图和索引节点位图

  • Block#8 - 块位图 (Bmap): 用于表示磁盘块的分配状态。
  • Block#9 - 索引节点位图 (Imap): 用于表示索引节点的分配状态。

索引节点结构

  • Block#10 - 索引节点表: 包含文件和目录的索引节点。

      struct ext2_inode {
      u16 i_mode; // 文件模式和权限
      u16 i_uid; // 所有者用户ID
      u32 i_size; // 文件大小
      u32 i_atime; // 最后访问时间
      u32 i_ctime; // 创建时间
      u32 i_mtime; // 最后修改时间
      // ... 其他字段 ...
      u32 i_block[15]; // 直接块和间接块
      // ... 更多字段 ...
      };
    

目录条目

  • 目录文件数据结构: 用于表示目录文件中的目录条目。

      struct ext2_dir_entry_2 {
      u32 inode; // 索引节点号
      u16 rec_len; // 条目长度
      u8 name_len; // 文件名长度
      u8 file_type; // 文件类型
      char name[EXT2_NAME_LEN]; // 文件名
      };
    

遍历EXT2文件系统树

遍历算法:遍历EXT2文件系统的基本算法包括读取超级块、块组描述符、InodeBegin块,然后从根目录开始搜索。

文件系统结构

文件系统层次结构: 文件系统通常通过层次结构来组织,包括基本文件系统、文件读写功能、系统挂载、卸载和文件保护。

util.c中的实用程序函数

get_block/put_block: 这两个函数用于从虚拟磁盘块读取数据并将数据写入内存中的缓冲区。get_block 用于读取,而 put_block 用于写入。

iget(dev, ino): iget 函数返回一个指向包含给定设备(dev)和索引节点号(ino)的内存 minode 结构的指针。这是用于索引节点的缓存,以提高文件系统性能。

*put(INODE mip): put 函数释放不再需要的 minode 结构。这是内存中索引节点缓存的管理。

getino(): 您提到 "getino" 函数实现文件系统树遍历算法。这可能是一个自定义函数,用于在文件系统中查找特定的索引节点。

文件系统操作
mkdir命令: mkdir 命令用于创建新目录。它在指定的位置创建一个新目录,使用户能够组织文件和子目录。

rmdir命令: rmdir 命令用于删除目录。只有在目录为空时才能成功删除目录。

2级文件系统操作: 您提到2级文件系统包括 open、close、lseek、read、write、opendir 和 readdir。这些函数是用于文件的打开、关闭、读写以及目录操作的函数。它们构成了文件系统的核心操作。

挂载操作命令: mount 命令用于将一个文件系统挂载到另一个文件系统中,使其成为现有文件系统的一部分。这允许您将不同的文件系统组合在一起,以便共享文件和资源。




实践

用dumpe2fs工具查看这个分区的超级块和块组描述表信息

(base)
1.
dumpe2fs 1.42.13 (17-May-2015)
Filesystem volume name:  <none>
Last mounted on: <not available>
Filesystem UUID: a00715b2-528b-4ca6-8c2b-953389a5ab00
Filesystem magic number: 0xEF53
Filesystem revision #:  1 (dynamic)
Filesystem features:   ext_attr resize_inode dir_index filetype sparse_super
large_file
Filesystem flags: signed_directory_hash
Default mount options:  user_xattr acl
Filesystem state: clean
Errors behavior: Continue
Filesystem OS type:Linux
Inode count:   128
Block count:   1024
Reserved block count:   51
Free blocks:   986
Free inodes:   117
First block:   1
Block size:1024
Fragment size:  1024
Reserved GDT blocks:   3
Blocks per group: 8192
Fragments per group:   8192
Inodes per group: 128
Inode blocks per group:  16
Filesystem created:Thu Sep 8 10:35:47 2022
Last mount time: n/a
Last write time: Thu Sep 8 10:35:47 2022
Mount count:   0
Maximum mount count:   -1
Last checked:   Thu Sep 8 10:35:47 2022
Check interval:  0 (<none>)
Reserved blocks uid:   0 (user root)
Reserved blocks gid:   0 (group root)
First inode:   11
Inode size:128
Default directory hash:  half_md4
Directory Hash Seed:   e5c519af-d42e-43b5-bc8d-c67c5a79bcbe
Group 0: (Blocks 1-1023)
superblock at 1, Group descriptors at 2-2

标签:count,...,文件系统,笔记,学习,索引,u32,节点
From: https://www.cnblogs.com/zsy1748774883/p/17765845.html

相关文章

  • springboot的学习--bean的作用域
    bean默认会在springboot项目运行即容器启动时被创建,我们可以用@Lazy注解来延迟初始化,该注解可以将bean对象的创建延迟到第一次使用时创建 我们也可以使用@Scope注解来配置作用域,如果不配置,一般是@Scope(”singleton")默认单例,而使用@Scope("prototype")配置可以在每次使用该bean的......
  • vue学习六
    <divid="app6"><divv-for="iteminlist">{{item}}</div></div><script>constapp6=newVue({el:'#app6',data:{list:["1&qu......
  • C#基础学习
    简介C#是一个简单的、现代的、通用的、面向对象的编程语言,它是由微软(Microsoft)开发的。C#是微软公司发布的一种由C和C++衍生出来的面向对象的编程语言、运行于.NETFramework和.NETCore(完全开源,跨平台之上的高级程序设计语言。C#看起来与Java有着惊人的相似;它包括了诸如单一......
  • 【高级机器学习算法】6.机器学习应用建议
    模型评估模型评估是机器学习中非常重要的一部分,它可以帮助我们评估模型的好坏,从而选择最优的模型。评估方式在机器学习中,我们通常会将数据集划分为训练集和测试集,训练集用于训练模型,测试集用于评估模型的好坏。评估指标训练误差:模型在训练集上的误差,用于衡量模型在训练集上......
  • 学习笔记5
    第十一章ext2文件系统11.1~11.2ext2文件系统、块ext2文件系统是linux最为常用的文件系统,ext2是(TheSecondExtendedFileSystem)的简称。ext2文件系统的布局如图所示。Block#0:引导块:B0是引导块,文件系统不是用它,它用来容纳一个引导程序,从磁盘引导操作系统的时候会用到它。B......
  • vue学习五
    <divid="app5"><button@click="exchange(-5)">点我减五</button><button@click="exchange(5)">点我加五</button></div><script>constapp5=newVue({......
  • 20211105李宜时信息安全系统设计与实现第五周自学笔记
    20211105李宜时信息安全系统设计与实现第五周自学笔记:EXT2文件系统和三级文件系统EXT2文件系统EXT2(ExtendedFileSystem2)是一种广泛用于Linux操作系统的文件系统。它是EXT文件系统家族的第二个版本,设计用于提供高性能和可靠性的存储解决方案。以下是一些关于EXT2文件系统的关......
  • 信息安全系统设计与实现 学习笔记5
    EXT2文件系统通过mkfs创建虚拟硬盘mke2fs[-bblksize-Nninodes]devicenblock创建一个nblocks个块和ninodes个索引节点EXT2文件系统。虚拟磁盘布局超级块Block#1:超级块(在硬盘分区中字节偏移量为1024)s_first_data_block:0表示4KB块大小,1表示1KB块大小。s_log_block_siz......
  • 《信息安全系统设计与实现》第六周学习笔记
    EXT2文件系统数据结构通过mkfs创建虚拟磁盘命令mke2fs[-bblksize-Nninodes]devicenblocks下面的命令可在一个名为vdisk的虚拟磁盘文件上创建一个EXT2文件系统,有1440个大小为1kb的块ddif=/dev/zeroof=vdiskbs=1024count=1440mke2fsvdisk1440虚拟磁盘布......
  • 数字游戏学习对学生数学学习自我效能感、动机、焦虑和成绩的影响
    (Effectsofdigitalgame-basedlearningonstudents’selfefficacy,motivation,anxiety,andachievementsinlearningmathematics) BeijingNormalUniversity2014一、摘要研究目的:本研究在电子书上开发了一个基于数学游戏的学习环境,帮助儿童减少数学焦虑,提高数学学......