• [OS][FS]查看ext3文件系统分区的superblock


    本文将介绍怎样读取一个分区的superblock:

    1. 首先我们查看一下在磁盘上有哪些分区,通过fdisk -l

    image

    这里有三个分区,我们下面查看/dev/sda3(这是一个device file)

    2. 从/dev/sda3拷贝1024B-2048B(这就是superblock的位置)到一个叫superblock的文件

    image

    这里我们用到了dd这个工具,它在对磁盘进行这样读写操作时非常有用,具体请见man。

    bs=1k 每次读写的块大小

    skip=1 偏移多少块开始读(这里块为bs=1k,偏移1,表示从1k开始读)

    count=1 读的大小(这里表示读1k)

    if,of 分别表示从哪里读和写到哪里去。

    这里你也许会问为什么要从1k处开始读,并且就读1k的大小呢?下图就是一个分区的物理存储结构:

    Partition_Structure

    从图中我们可以看到第一个Block的第一个1k处是存储的Boot Block,而superblock是从1k开始,大小为1k。

    3. 查看superblock文件

    用vim打开我们刚才从/dev/sda3复制出来的superblock文件,由于是二进制文件,我们在用vim打开之后要用:%!xxd转换成16进制形式。

    image

    到这里其实我们已经看到了在磁盘上superblock的形式了。下面我想验证一个这个superblock的正确性。

    首先,通过查看/usr/include/linux/ext3_fs.h头文件中的struct ext3_super_block:

    image

    我们可以知道在superblock的头上记录着inodes的个数和block的个数,它们分别是32位。

    那从superblock中可以看出:

    inodes_count: 0000 3a04(注意:这里是小数端) –> 043a0000 = 70909952

    blocks_count: fdc4 3904 –> 0439c4fd = 70894845

    那么该如何验证这个结果呢?linux为我们提供了dumpe2fs这个工具:

    dumpe2fs /dev/sda3 |less
    我们可以看到如下的输出(一部分)

    image

    到这里,有关如果看superblock的方法,这里就全部都讲完了,同样我们可以用dd查看磁盘上任意的部分。

  • 相关阅读:
    SQL Server 中关于EXCEPT和INTERSECT的用法
    SQL SERVER 索引中聚集索引分析和Transact-SQL语句优化
    DATEDIFF() 返回2个日期之间的间隔
    CharIndex()
    poj1470 Closest Common Ancestors [ 离线LCA tarjan ]
    2014 蓝桥杯 预赛 c/c++ 本科B组 第九题:地宫取宝(12') [ dp ]
    hdu 2438 Turn the corner [ 三分 ]
    poj 3295 Tautology [ 栈 ]
    hdu 4923 Room and Moor [ 找规律 + 单调栈 ]
    1597: [Usaco2008 Mar]土地购买 [ dp+斜率优化 ] 未完
  • 原文地址:https://www.cnblogs.com/xumaojun/p/8531991.html
Copyright © 2020-2023  润新知