文件属性在实际文件系统上存储在哪里?

文件属性在实际文件系统上存储在哪里?

我正在创建一个程序,它获取文件的十六进制转储,以便我可以将其传输到某个地方,并重建文件,但是十六进制转储仅包含文件内容,我还需要获取文件属性,那么我在哪里获取该文件的属性,然后将它们应用于我从该十六进制转储创建的新文件?我为此使用了 bash,但实际上并不是关于代码,而是关于在哪里找到它,尽管您可以将其与代码有关,因为显然我需要一些命令。我正在运行 Ubuntu GNOME 15.04,带有 GNOME Shell 和 GNOME 3.16。

答案1

文件属性存储在 inode 中。每个 inode 存储的属性列在POSIX Inode 规范。当我们使用ls -lstat任何其他获取文件属性的程序时,都会使用stat(2)下面的系统调用。

现在 inode 是文件系统相关的属性,它们在创建文件系统时被创建为固定数字。有一个程序dumpe2fs可以读取文件系统的超级块ext*,以便我们可以了解一些情况,例如:

sudo dumpe2fs -h /dev/sda1

现在我们来检查一下 inode 相关的属性:

$ sudo dumpe2fs -h /dev/sda1 | grep -i 'inode.*:'

Inode count:              9379840
Free inodes:              9297243
Inodes per group:         8192
Inode blocks per group:   512
First inode:              11
Inode size:               256
Journal inode:            8

正如您所看到的,您获得了足够的信息,例如第一个 inode、inode 大小、inode 数量等。如果您将其乘以Inode countInode size您就会得到为 inode 保留了多少。

文件复制程序(例如cprsync具有-a(存档)选项,可以复制文件 inode 上存储的属性,因此您需要在可能使用的程序中查找这些或类似的选项。

为了保存文件的属性,然后稍后使用它,您可以检查这是来自吉尔斯的回答

答案2

这可能不是一个完整的答案,但这是我从研究中发现的。

文件属性存储在inodes“inode 表”中,并且通常分散在整个文件系统中。通常,要查找 inode 表的位置(至少在ext3文件系统中),您可以运行:

sudo dumpe2fs /dev/<device> | fgrep 'Inode table'

您可以在 inode 所在的块中对原始数据进行十六进制转储(笔记我还没有尝试过这个命令!):

sudo dd if=/dev/<device> ibs=4096 skip=<inode block> count=1 | hexdump

<device>和替换<inode block>为您要查看的 inode 表的块偏移量。

来源:Linux问题, 所以问题

相关内容