【问题标题】:View the contents of a file at block level/sector level在块级别/扇区级别查看文件的内容
【发布时间】:2014-04-07 23:51:47
【问题描述】:

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

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

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

  2. debugfs /dev/sdb1

  3. 统计 -- (ETB0): 33409

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

简单来说,从块/扇区级别的两个文件中的图像文件(内核部分)中读取前几 MB 数据

期待您的回复。

【问题讨论】:

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


【解决方案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 个块。然后,我创建指向同一文件的第二个硬链接,并在指向同一 inode 的两个硬链接上使用 FIBMAP 请求。你会发现逻辑块地址会匹配:

hardlink1:
  0   51404606
  1   51404607

hardlink2:
  0   51404606
  1   51404607

【讨论】:

  • 我相信您的评论被截断了。您可能希望使用额外信息更新问题本身。
猜你喜欢
  • 2010-10-19
  • 2015-02-05
  • 2012-09-02
  • 2018-11-15
  • 2010-12-15
  • 2022-11-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多