lil*_*njn 11 linux ext3 inode ext4
在 linux 中,给定原始磁盘设备的偏移量,是否可以映射回分区 + inode?
例如,假设我知道字符串“xyz”包含在 /dev/sda 上的字节偏移量 1000000 处:(例如 xxd -l 100 -s 1000000 /dev/sda 显示以“xyz”开头的转储)
1)如何确定偏移量 1000000 位于哪个分区(如果有)?(我想这很容易,但为了完整起见,我将其包括在内)
2) 假设偏移量位于分区中,我该如何查找它属于哪个 inode(或确定它是空闲空间的一部分)?大概这是特定于文件系统的,在这种情况下,有人知道如何为 ext4 和 ext3 执行此操作吗?
小智 16
我只需要做类似的事情,所以我想我会分享我的解决方案。
您可以通过检查 udisks --show-info 输出的“偏移量”和“大小”元素来查看驱动器字节偏移量属于哪个分区;例如
user@host:~$ sudo udisks --show-info /dev/sda1 | grep -i 'offset'
offset: 1048576
alignment offset: 0
Run Code Online (Sandbox Code Playgroud)
从磁盘偏移量中减去这个偏移量,得到分区中的字节偏移量。所以 /dev/sda 中的磁盘偏移量 (10000000) 是 /dev/sda1 中的分区偏移量 (10000000 - 1048576) = 8951424
您可以使用以下命令找出分区中的块大小:
user@host:~$ sudo tune2fs -l /dev/sda1 | grep -i 'block size'
Block size: 4096
Run Code Online (Sandbox Code Playgroud)
将分区字节偏移除以块大小来确定块偏移,本例中为 8951424 / 4096 = 2185
运行以下命令以找出占用该块的 inode:
user@host:~$ sudo debugfs -R "icheck 2185" /dev/sda1
debugfs 1.41.11 (14-Mar-2010)
Block Inode number
2185 123456
Run Code Online (Sandbox Code Playgroud)
然后使用以下命令找出该 inode 的文件名:
user@host:~$ sudo debugfs -R "ncheck 123456" /dev/sda1
debugfs 1.41.11 (14-Mar-2010)
Inode Pathname
123456 /tmp/some-filename.txt
Run Code Online (Sandbox Code Playgroud)
在http://www.randomnoun.com/wp/2013/09/12/determining-the-file-at-a-specific-vmdk-offset上有更详细的描述
归档时间: |
|
查看次数: |
7169 次 |
最近记录: |