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

学习笔记5

时间:2023-10-15 20:35:02浏览次数:30  
标签: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; // 每组片段总数
    // ... 更多非必要字段 ...
};

块组描述符块

  1. 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; // 空闲索引节点数
    // ... 更多字段 ...
};

块位图和索引节点位图

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

索引节点结构

  1. 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]; // 直接块和间接块
    // ... 更多字段 ...
};



目录条目

  1. 目录文件数据结构: 用于表示目录文件中的目录条目.
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工具查看这个分区的超级块和块组描述表信息:

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

注意: 请注意,上述信息是通过dumpe2fs工具查看的特定文件系统的超级块和块组描述表信息。

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

相关文章

  • 学期2023-2024-1 20231403 《计算机基础与程序设计》第三周学习总结
    作业信息这个作业属于哪个课程<班级的链接>(如2022-2023-1-计算机基础与程序设计)这个作业要求在哪里2023-2024-1计算机基础与程序设计第三周作业)这个作业的目标自学教材:计算机科学概论第2章,第3章,C语言程序设计第2章并完成云班课测试作业正文https://www.cnblog......
  • 2023-2024-1 20231411李宇轩 《计算机基础与程序设计》第3周学习总结
    这个作业属于哪个课程2022-2023-1-计算机基础与程序设计这个作业要求在哪里[2022-2023-1计算机基础与程序设计第三周作业]https://www.cnblogs.com/rocedu/p/9577842.html#WEEK03这个作业的目标学习计算机科学概论第2章,第3章并完成云班课测试作业正文https://......
  • 学习笔记5
    知识点归纳EXT2文件系统EXT2文件系统是一种用于Linux操作系统的文件系统。它是EXT文件系统的第二个版本,与其前身相比具有许多改进和增强功能。EXT2文件系统提供了可靠的数据存储和管理,可以在硬盘上组织文件和目录,并提供了文件权限、访问控制、日志记录等功能。EXT2文件系统使用......
  • 2023-2024学年 20213423 《计算机基础与程序设计》第三周学习总结
    第三章是《计算机科学概论》中一个非常重要的章节,它涵盖了计算机的内部结构和工作原理。通过学习这一章,我更深入地了解了计算机是如何运行的,以及其中涉及到的各种关键组件和概念。以下是我学习这一章的一些心得体会:首先,我学到了计算机的基本组成部分,包括中央处理单元(CPU)、内存、......
  • 学习笔记5
    第11章Diffle-Hellman协议  Diffle-Hellman协议主要用于密钥交换,使得在不安全线路上通信的两个人能够以这样的方式协商得到密钥:两个人都能得到相同的密钥,并且这个密钥不会泄露给监听二人会话的其他人。11.1群11.2基本的DH  在基本的DH协议中,首先选取一个大素数$p$和群$......
  • 第十一章学习笔记
    第十一章学习笔记一、课本知识1.EXT2文件系统TheSecondExtendedFileSystem(ext2)文件系统是Linux系统中的标准文件系统,是通过对Minix的文件系统进行扩展而得到的,其存取文件的性能极好。在ext2文件系统中,文件由inode(包含有文件的所有信息)进行唯一标识2.硬盘组成与分割磁......
  • 学习笔记5 第十一章的自学归纳
    学习笔记5第十一章的自学归纳EXT2文件系统EXT2第二代扩展文件系统(英语:secondextendedfilesystem,缩写为ext2),是LINUX内核所用的文件系统。它开始由RémyCard设计,用以代替ext,于1993年1月加入linux核心支持之中。EX2文件系统数据结构创建虚拟硬盘mke2fs[-bblksize-Nn......
  • 汽车操控原理学习之 -- 行走系统
    一、轮胎对操控的影响轮胎花纹对轮胎操控的影响轮胎的花纹不仅仅是为了好看,轮胎的花纹还关系到能否完全地发挥轮胎的性能,如:牵引制动转弯排水静音等等性能简单来说,胎面花纹最重要的三大作用是:提升抓地力降低噪音增加排水性不过这三者之间本身就是互相牵制甚至是冲......
  • 汽车操控原理学习之 -- 悬架系统
    一、悬挂倾角对操控的影响现实中的汽车底盘并不像普通的玩具车、四驱模型车、玩具遥控车那么简单地将四个轮平行安放且完全垂直于地面,而是为了各种目的把车轮设计成在各个方向按一定的轻微的角度来安放。对于改装爱好者而言,了解四轮定位参数是相当有必要的一门必修课,因为牵一发......
  • 汽车操控原理学习之 -- 动力系统
    一、动力对汽车操控的影响及其相关物理原理本质上说,动力对汽车操控有两方面影响:加速快慢极速高低本质上,决定”加速快慢“和”极速高低“的都是”功率“,或者说”轮上功率“。而发动力是汽车功率的唯一来源,而变速箱的作用是根据不同形式工况(例如上坡、低速起步、高速再加速、......