首页 > 系统相关 >《Unix/Linux系统编程第十一章学习笔记》

《Unix/Linux系统编程第十一章学习笔记》

时间:2022-10-03 20:44:05浏览次数:52  
标签:EXT2 编程 文件系统 11.2 索引 Unix Linux 磁盘 节点

第11章 EXT2文件系统

11.1 EXT2文件系统

多年来,Linux一直将EXT2作为默认文件系统。EXT3是EXT2的扩展。EXT3中增加的主要内容是一个日志文件,他将文件系统的变更记录在日志中。日志可在文件系统崩溃时更快地从错误中恢复。没有错误的EXT3文件系统与EXT2文件系统相同。EXT3的最新扩展时EXT4。EXT4的主要变化是磁盘块的分配。在EXT4中,块编号为48位。EXT4是分配连续的磁盘块,称为区段
我们的重点是论述文件系统设计和实现的原则,强调简单性以及与Linux的兼容性。我们选择EXT2文件系统。


11.2 EXT2文件系统数据结构

11.2.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的块。

11.2.2 虚拟磁盘布局

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

11.2.3 超级块

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

11.2.4 块组描述符

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

11.2.5 块和索引节点位图

Block#8:块位图(Bmap)(bg_block_bitmap)位图用来表示某种项的位序列,例如:磁盘块或索引节点。位图用于分配和回收项。
Block#9:索引节点位图(bg_inode_bitmap)一个索引节点就是用来表示一个文件的数据结构。EXT2文件系统是使用有限数量的索引节点创建的。各索引节点的状态用B9的Imap中的一个位表示。

11.2.6 索引节点

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文件可忽略
11.2.7 数据块

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

11.2.8 目录条目

目录包含dir_entry结构,即

struct ext2_dir_entry_2{
    u32 inode;
    u16 rec_len;
    u8 name_len;
    u8 file_type;
    char name[EXT2_NAME_LEN];
};

dir_entry是一种可扩充结构。

标签:EXT2,编程,文件系统,11.2,索引,Unix,Linux,磁盘,节点
From: https://www.cnblogs.com/qwer6653/p/16751188.html

相关文章

  • 《Unix&Linux系统编程》第七章学习笔记
    第11章EXT2文件系统Linux一直使用EXT2作为默认文件系统。EXT3是EXT2的扩展,增加了一个日志文件,它将文件系统的变更记录在日志中,日志可在文件系统崩溃时更快地从错误中恢复......
  • java网络编程--3 TCP
    java网络编程--3TCP1.6、TCP客户端连接服务器Socket发送消息packagecom.ssl.lesson02;importjava.io.IOException;importjava.io.OutputStream;importja......
  • 什么是Linux
    导读对于刚刚接触Linux的人来说,Linux到底是个什么往往不好解释。因为太过于常见而难以向从未接触过的新人作介绍,简单理解成哈利刚刚走入九又四分之三车站,一下子和原有的世......
  • 《Unix/Linux系统编程》第五周学习笔记
    《Unix/Linux系统编程》第五周学习笔记EXT2文件系统ext2功能Ext2(第二扩充文件系统)是一种功能强大、易扩充、性能上进行全面的优化的文件系统,也是目前Linux文件系统实际......
  • Tubian Linux 0.44,增加了对无线网卡的支持
    Github主页(提供下载):https://github.com/jinshulumengchuang/Tubian-Linux123网盘下载:https://www.123pan.com/s/XjkKVv-JO9Uvhttps://www.123pan.com/s/XjkKVv-BO9Uvhtt......
  • js函数式编程讲解
    什么是函数式编程是一种编程范型,它将电脑运算视为数学上的函数计算,并且避免使用程序状态以及易变对象。函数式编程更加强调程序执行的结果而非执行的过程,倡导利用若干简......
  • ASP.NET Core – Thread, Task, Async 线程于异步编程
    前言平常写业务代码,很少会写到多线程.久了很多东西都忘光光了.刚好最近在复习RxJS.有一篇是讲scheduler的.会讲到JavaScript异步相关的资讯.既然如果那就一次......
  • java网络编程--2 IP,端口,通信协议,TCP/UDP对比
    java网络编程--2IP,端口,通信协议,TCP/UDP对比1.3、IPip地址:InetAddress唯一定位一台网络上的计算机127.0.0.1:本机localhostIP地址的分类ipv4/ipv6IPV4......
  • js函数式编程讲解
    什么是函数式编程是一种编程范型,它将电脑运算视为数学上的函数计算,并且避免使用程序状态以及易变对象。函数式编程更加强调程序执行的结果而非执行的过程,倡导利用若干简......
  • GUI编程
    我们要怎么学?是什么,怎么玩,怎么用组件窗口弹窗面板文本框列表框按钮图片监听事件键盘事件破解工具1.简介GUI的核心技术:SwingAW......