zoukankan      html  css  js  c++  java
  • 《Unix/Linux系统编程》第十一章学习笔记

    第十一章 EXT2文件系统

    11.1 EXT2文件系统

    多年来,Linux一直使用EXT2作为默认文件系统。EXT3是EXT2的扩展。EXT3中增加的主要内容是一个日志文件,它将文件系统的变更记录在日志中。日志可在文件系统崩溃时更快地从错误中恢复。

    11.2 EXT2文件系统数据结构

    1.通过mkfs创建虚拟磁盘
    在Linux下,命令
    make2fs [-b blksize -N ninodes] device nblocks
    在设备上创建一个带有nblocks个块(每个块大小为blksize字节)和ninodes个索引节点的EXT2文件系统。
    若未指定blksize,则默认块大小为1KB
    若未指定ninoides,mke2fs将根据nblocks计算一个默认的ninodes数

    2.虚拟磁盘布局

    简单的EXT2文件系统布局

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

    3.超级块
    Block#1:超级快 B1是超级块,用于容纳整个文件系统的信息。

    4.块组描述符
    Block#2:块组描述符 EXT2将磁盘块分成几个组。每个组有8192个块。每组用一个块组描述符结构体来描述。

    5.块和索引节点位图
    Block#8:块位图
    Block#9:索引节点位图

    6.索引节点
    Block#10:索引(开始)节点 每个文件都用一个128字节的唯一索引节点结构体表示。

    7.数据块
    紧跟在索引节点块后面的是文件存储数据块。
    8.目录条目
    目录包含dir_entry结构,即

    11.3 邮差算法

    一个城市有M个街区,编号从0到M-1.每个街区有N座房子,编号从0到N-1.每座房子有一个唯一的街区地址,用(街区,房子)表示。已知某个街区地址BA=(街区,房子),怎么把他转换为线性地址LA。
    Linear_address LA=N*block + house;
    Block_address BA=(LA/N,LA%N);

    11.4 编程示例

    1.显示超级快
    (1)打开虚拟磁盘读取:int fd = open ("vdisk", O_RDONLY)
    (2)将超级块读入char buf[1024]中

    char buf[1024];
    lseek(fd,1024,SEEK_SET);
    int n=read(fd,buf,1024);
    int n = read(fd,buf,1024);
    

    11.5遍历EXT2文件系统树

    • 将路径名转换为索引节点
      INODE *path2inode(int fd, char *pathname)

    11.6 EXT2文件系统的实现

    1.文件系统的结构

    2.文件系统的级别
    分为三个级别,第一级别实现了基本文件系统树,第二级别实现了文件内容读/写函数,第三级别实现了文件系统的挂载、卸载和文件保护。

    11.7 基本文件系统

    1.type.h文件
    这类文件包含EXT2文件系统的数据结构类型。此外还包含打开文件表、挂载表、PROC结构体和文件系统常数。
    2.global.c文件
    这类文件包含文件系统的全局变量。

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

  • 相关阅读:
    HDFS文件系统
    使用cmake安装单实例mysql
    python读取数据库表数据并写入excel
    linux文件行数统计
    ORACLE清空回收站操作
    Oracle 11g静默安装
    图解Java设计模式之职责链模式
    图解Java设计模式之策略模式
    图解Java设计模式之状态模式
    图解Java设计模式之解释器模式
  • 原文地址:https://www.cnblogs.com/ruier/p/15412321.html
Copyright © 2011-2022 走看看