gpt4 book ai didi

linux - 访问 ext3/ext4 期刊

转载 作者:行者123 更新时间:2023-12-03 17:31:26 24 4
gpt4 key购买 nike

ext3 和 ext4 文件系统具有日志功能。有没有可能有一些 API 来获取有关文件的详细信息或事件?
某种允许用户空间程序访问文件的日志条目的 API。甚至日志事件,例如“文件 x 已删除”。
这似乎是 some kind of documentation但我不确定它是否正确。

最佳答案

debugfs logdump您可以使用 logdump 显示有关文件系统日志的信息。来自 debugfs 的命令.
例如,sudo debugfs -R 'logdump -S' /dev/sda3产量

Journal features:         journal_incompat_revoke journal_checksum_v3
Total journal size: 512M
Total journal blocks: 131072
Max transaction length: 131072
Fast commit length: 0
Journal sequence: 0x004bd0ae
Journal start: 109412
Journal checksum type: crc32c
Journal checksum: 0x157eebb7

Journal starts at block 109412, transaction 4968622
Found expected sequence 4968622, type 5 (revoke table) at block 109412
Found expected sequence 4968622, type 1 (descriptor block) at block 109413
Found expected sequence 4968622, type 2 (commit block) at block 109419
Found expected sequence 4968623, type 1 (descriptor block) at block 109420
Found expected sequence 4968623, type 2 (commit block) at block 109422
Found expected sequence 4968624, type 1 (descriptor block) at block 109423
Found expected sequence 4968624, type 2 (commit block) at block 109425
Found expected sequence 4968625, type 1 (descriptor block) at block 109426
// rest omitted
我意识到 debugfs不是 API,但它访问日志。
读取日志的字节
要获取日志的原始字节,您可以使用 debugfs再次。它的 cat命令接受一个 inode 编号并打印 inode 指向的地址的数据。
假设日志的 inode 编号为 8:
sudo debugfs -R 'cat <8>' /dev/sda3 | hexdump -C
这将以十六进制打印日志的字节。您应该看到 magic number of the journal's format ,jbd2,开头:
c0 3b 39 98
期刊使用 big-endian byte order而 ext4 使用小端。
jls jls来自 The Sleuth Kit还打印有关该期刊的信息。
例如, sudo jls /dev/sda3产量
JBlk    Description
0: Superblock (seq: 0)
sb version: 4
sb version: 4
sb feature_compat flags 0x00000000
sb feature_incompat flags 0x00000011
JOURNAL_REVOKE
sb feature_ro_incompat flags 0x00000000
1: Unallocated Commit Block (seq: 4936768, sec: 1613471034.3277057792)
2: Unallocated Descriptor Block (seq: 4936769)
3: Unallocated FS Block 42991838
4: Unallocated FS Block 0
5: Unallocated Commit Block (seq: 4949171, sec: 1613574032.1117509120)
6: Unallocated Descriptor Block (seq: 4949172)
7: Unallocated Commit Block (seq: 4960433, sec: 1613729975.4288594432)
8: Unallocated Descriptor Block (seq: 4960434)
// rest omitted
jls的源代码是 here .
DIY
或者,您可以咨询 ext4 wiki使用您必须自己编写的程序来解析日志。步骤大致如下:
  • 读取文件系统后 1024 字节开始的 ext4 super 块。
  • 从 super 块的偏移量 0xE0 读取日志 inode 编号。日志的 inode 编号通常为 8。这是记录在 here 中的。 .
  • 从日志中阅读您需要的数据,记住它是大端的,而不是 ext4 是小端的。期刊结构描述here .
  • 关于linux - 访问 ext3/ext4 期刊,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11114575/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com