在块级/扇区级查看文件的内容

时间:2014-04-07 23:51:47

标签: linux linux-kernel storage low-level-io

我想知道是否有命令在扇区/块级别查看文件的详细信息/内容? 意思是,我想要以下细节: 我有2个文件。我需要知道存储在块/扇区级别的内容是否对于这两个文件是相同的?是否有命令或工具来检查它?如果是这样,你能以正确的方式指导我吗? 我知道我正在比较的两个文件都在运行linux操作系统

额外信息: 这是我的情况。我有两个图像文件。我想看看块/扇区级别的两个图像文件的内容是否相同(内核代码所在的前几个mb)。假设两个图像文件都包含linux os,我知道两者的前几MB应该是相同的。所以,我做了以下几点:

  1. ls -i web-test.img - 将inode设为13

  2. debugfs / dev / sdb1

  3. stat< 13> - (ETB0):33409

  4. dd if = / dev / sdb1 of = success.txt ibs = 4096 count = 1 skip = 33409.o / p的内容不清楚txt。我需要查看其内容是否相同。
  5. 简单来说,在块/扇区级别的两个文件中读取图像文件(内核部分)中的前几个mb数据

    期待您的回复。

1 个答案:

答案 0 :(得分:0)

编辑:您将从其所在的文件系统中获取映像文件的inode。那么,你在debugfs中使用那个inode号码?因此,无论文件中的inode 13中出现的文件是什么,都是您正在使用的。这对我来说似乎很奇怪。

然而,也许你只是对那些不可读的内容感到困惑。我假设你正在使用某种文本编辑器,它将显示文件的ASCII表示。您可以使用md5sum对数据进行校验和,也可以使用cmp等二进制差异工具,而不是直观地检查数据。

如果您有两个指向同一inode的硬链接,则可以使用一系列ioctl FIBMAP个请求。这将返回给定块编号的逻辑块地址。例如:

int block_count;
struct stat statBuf;
int block;

fstat(fd, &statBuf);

block_count = (statBuf.st_size + statBuf.st_blksize - 1) / statBuf.st_blksize;

int i;
for(i = 0; i < block_count; i++) {
    block = i;
    ioctl(fd, FIBMAP, &block) < 0)
    printf("%3d %10d\n", i, block);
}

因此,如果我在具有4K块大小的文件系统上创建一个8K文件,它将包含2个块。然后,我创建了指向同一文件的第二个硬链接,并在同一个inode的两个硬链接上使用FIBMAP请求。您会发现逻辑块地址将匹配:

hardlink1:
  0   51404606
  1   51404607

hardlink2:
  0   51404606
  1   51404607