【发布时间】:2022-01-17 13:02:46
【问题描述】:
因此,在文件系统中提取超级块(即,如果我的 sda 存储是 ext2 格式)很容易。我只需要跳过 1024 个字节就可以从 sda 存储中获取超级块
lseek(fd, 1024, SEEK_SET);
read(fd, &super_block, sizeof(super_block));
并且提取组描述符也非常容易(只有当我通过查看代码正确理解时)
lseek(fd, 1024 + [block_size_ext_1024_bytes]=1024, SEEK_SET);
read(fd, &block_group, sizeof(block_group));
or
lseek(fd, 1024 + 1024, SEEK_SET);
read(fd, &block_group, sizeof(block_group));
1024=基本偏移
但我并不感到舒服,因为我发现真正的挑战是提取 inode 只有我有文件名。我知道文件名存储在目录结构中,所以第一个挑战是从那里提取目录结构,在目录结构中我可以获得索引节点号。并且从 Inode 编号中我可以提取 inode 结构。但我不知道如何在 ext2 格式的图像中提取目录结构。谁能告诉我这个?谢谢
【问题讨论】:
-
磁盘上没有特定的“目录”结构。目录是一个普通文件,其中的数据是一个 inode-filename 映射。它有据可查,并且可以通过放置例如
ext2 inode directory在您最喜欢的搜索引擎中。 -
@Someprogrammerdude 你提到了
where the data is an inode-filename mapping那么它是与文件名的inode 编号映射还是这个映射是什么我需要两个东西来映射?那么is it my choice to keep this mapping info anywhere如果我将inode 编号映射到filaname?我可以在其中保存以从文件名中检索 inode 号。我可以将它保存在存储在其他计算机上的某个文本文件中吗?对吗? -
请阅读例如piazza.com/class_profile/get_resource/il71xfllx3l16f/…(我在 Google 中使用
ext2 inode directory时的第一击)。 -
@Someprogrammerdude 它说小软盘上的空闲块可以在从 41 到 -1439 的块中找到,软盘显示在你发送的 pdf 中。所以软盘设备上第一个空闲块的偏移量是
first_free_block=(Base offset+1024x41)如果使用 ext2 文件系统,这个偏移量对于大型存储设备也可以相同吗?你能告诉我这个吗
标签: c filesystems ext2