如果我在磁盘上有一个文件(为了讨论而创建一个健康的文件,但我可能有一个以前的文件,可能在某些调试活动中损坏了):
/tmp/tmp.gEJmJSc2zQ> echo "hello" > hello.txt
我可以看到这个文件,即使它很小,实际上使用了一个完整的 4KiB 块,正如预期的那样(这是我的文件系统上的块大小,默认的 Ubuntu 20.04):
/tmp/tmp.gEJmJSc2zQ> ls -lsh hello.txt
4,0K -rw-rw-r-- 1 jrmet jrmet 6 juni 6 14:27 hello.txt
我知道如何获取有关文件使用的特定块的更多信息:
/tmp/tmp.gEJmJSc2zQ> filefrag -b4096 -v hello.txt
Filesystem type is: ef53
File size of hello.txt is 6 (1 block of 4096 bytes)
ext: logical_offset: physical_offset: length: expected: flags:
0: 0.. 0: 14582783.. 14582783: 1: last,eof
hello.txt: 1 extent found
我的问题是:如何从头到尾检查包含此文件的完整 4KiB 块的完整原始二进制数据(即不仅仅是文件的原始二进制数据,我已经知道如何做到这一点 :) )xxd
?是否有一个特定的命令可以向我展示这个,和/或 和 的智能dd
组合xxd
?我会很好的解决方案,要么在编辑器中打开 4KiB 块的完整原始二进制数据,xxd
和/或将这些二进制数据转储到磁盘上的文件的方法(然后我知道如何检查任何工具啦xxd
)。
ext2
debugfs
/ext3/ext4 文件系统调试器有一个block_dump
命令输出字节类似于xxd
命令的默认输出格式。与似乎没有关闭空字节省略的方法不同,因此您将看到任意 数量的连续 32 字节序列的单个 - 如果它实际上是“完整”,您只会看到“完整”块.xxd
*
该命令的语法提供绝对块偏移量(
blocks
例如从 debugfs 命令获得),或相对于由尖括号中的索引节点号或绝对路径组成的“filespec”的偏移量。例如,给定
文件系统被确认为
然后(交互地)
或者
或者
如果您需要以非交互方式执行此操作,则该
-f
选项允许从文件或标准输入 ex 中读取命令。或者您可以使用该
-R
选项执行单个请求默认情况下,文件系统以只读模式打开。