1

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

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

  1. ls -i web-test.img -- 得到 inode 为 13

  2. 调试文件 /dev/sdb1

  3. 统计 <13> -- (ETB0): 33409

  4. dd if=/dev/sdb1 of=success.txt ibs=4096 count=1 skip =33409.o/p的内容不是clear txt.我需要看看它的内容是否相同。

简而言之,从块/扇区级别的两个文件中的图像文件(内核部分)中读取前几 mb 的数据

期待你的答复。

4

1 回答 1

1

编辑:您正在从它所在的文件系统中获取图像文件的 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 个块。然后,我创建指向同一个文件的第二个硬链接,并在FIBMAP指向同一个 inode 的两个硬链接上使用该请求。你会发现逻辑块地址会匹配:

hardlink1:
  0   51404606
  1   51404607

hardlink2:
  0   51404606
  1   51404607
于 2014-04-08T00:13:46.343 回答