我想知道是否有命令在扇区/块级别查看文件的详细信息/内容? 意思是,我想要以下细节: 我有2个文件。我需要知道存储在块/扇区级别的内容是否对于这两个文件是相同的?是否有命令或工具来检查它?如果是这样,你能以正确的方式指导我吗? 我知道我正在比较的两个文件都在运行linux操作系统
额外信息: 这是我的情况。我有两个图像文件。我想看看块/扇区级别的两个图像文件的内容是否相同(内核代码所在的前几个mb)。假设两个图像文件都包含linux os,我知道两者的前几MB应该是相同的。所以,我做了以下几点:
ls -i web-test.img - 将inode设为13
debugfs / dev / sdb1
stat< 13> - (ETB0):33409
简单来说,在块/扇区级别的两个文件中读取图像文件(内核部分)中的前几个mb数据
期待您的回复。
答案 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