wiredtiger取证wt转储文件本文包含一个正常的部分——如何打印信息直接从原始使用wt WiredTiger文件转储,其次是非常重要的,否则非法信息,怎么去MongoDB二进制数据在WT表。

看到“WiredTiger文件取证(第1部分:构建“wt”)”:

  • 如何构建“wt”实用程序命令吗
  • 一个简短的描述它的命令行语法
  • 如何设置wiredtiger_open()配置字符串需要

在这个页面的例子假设如下:

  • WiredTiger.config或WIREDTIGER_CONFIG or the -C option is being used to give “wt” the right config string. Having said that – an empty “wt” config might work OK for you, at least until wt printlog.
  • xxd bsondump,金桥安装。(见“Shell脚本格式化技巧”部分原因)。

[porto_content_box border_top_color = " " border_top_width =“2”bg_bottom_color =“红色”=“左”对齐)⚠警告:“wt”工具通常在读写方式打开文件,即使是命令你会认为是只读的。它会自动一步通过其正常的恢复过程的大部分时间,所以它可能会改变文件。

直到你知道它影响数据文件不会在你使用它只有宝贵的数据复制,复制拷贝的数据目录和学习放在第一位。[/ porto_content_box]

wt转储

wt转储命令可以用来显示WiredTiger表文件的全部内容。它将输出表对象的头然后每个键和值。

wt转储有一个强制性的论证:uri。一个uri通常是“表:“+ WT识别字符串,或“文件:”+(相对)文件路径。如。”表:收集- 4 - 9876544321”或“文件:收集- 4 - 9876544321.wt”。

”表:“自动前缀到uriwt转储如果你不指定任何类型。

文档:source.wiredtiger.com

wt转储文件的格式可以是:

  • “打印”键和值:将字符串打印ascii字符和\逃脱非输出字节的十六进制值。(又名形式打印)。
    如。82 \ \ \ \ \ 03 _id \ 00 00 00 00 \ 0 a \ \ \ \ ff_id \ 00 00 00 00 \ \ 03马克斯\ 00 00……
  • “六角”:键和值将显示连续0-9af十六进制字符。没有逃避或引用。
    如。82000000035 f6964000a000000ff5f696400…
  • “json”键将显示为自然类型(只有纯数字的MongoDB 4.4 / WiredTiger 10.0.0,我认为)。值将显示为utf - 16,这没有意义——这是插入空字节每秒字节。(我怀疑这是一个当前版本的缺陷。)
    如。“\ u0082 \ u0000 \ u0000 \ u0000 \ u0003 \ u005f \ u0069 \ u0064 \ u0000 \ u000a \ u0000 \ u0000 \ u0000 \ u00ff \ u005f \ u0069 \ u0064 \ u0000…。”

“打印”或“六角”输出一个固定格式的行:

行# 样本
1 WT库版本字符串 WiredTiger转储(10.0.0 WiredTiger版本)
2 “wt转储”格式类型 =十六进制格式
3 常量字符串“头”
4 URI 表:收集- 10 - 5841128870485063129
5 配置字符串表的创建(WT_SESSION::创建) access_pattern_hint = none, allocation_size = 4 kb, app_metadata =…
6 常量字符串“数据” 数据
7
8
第一个关键;它的价值 e85d689139ffffdfc1

6400000011747300010000003 a91685d12680000000000000000…

9
10
第二个关键;它的价值 e85d68913bffffdfc1

e700000011747300010000003c91685d12740001000000000000…。

(所有kv对重复)

wt转储的- j JSON输出模式更容易阅读的眼,但当前值编码UTF -16字符串实际上是无用的。我不能摄取至少使用我喜欢的JSON工具。如。什么是二进制值82 00 00 00 03 5 f 69 64(8个字节)将输出作为“\ u0082 \ u0000 \ u0000 \ u0000 \ u0003 \ u005f \ u0069 \ u0064”(16字节)。二进制长度已翻了一番每个目的价值之间空字节字节。

本文中使用Shell脚本格式技巧

  • xxd- r - p转换平原,[0-9a-fA-Z] *原始字节十六进制字符串。(注意“xxd rp”失败,静默失败。保持- r和p标记分隔在shell命令。)
  • bsondump使用BSON从二进制转换为JSON。使用安静。
  • 尾巴- n + 7跳过头的输出wt转储
  • awk是用来过滤掉钥匙(行号NR % 2 = = 1)或值(行号NR % 2 = = 0)的形式打印或十六进制模式wt转储
  • 金桥用于过滤和/或重新格式化bsondumpwt printlog输出。
    (理想金桥将用于摄取的输出wt - j转储直接,但错误null-padded, bytes-as-UTF-16字符串编码目前输出失败。)

记录输出不受WT二进制格式

wt转储的输出的影响WiredTiger二进制格式使用。它将相同的表格格式类型,不管和修饰词如马克斯页面大小,关键的前缀,等等。

这意味着wt转储不会教给你的“物理”格式的数据。你唯一可以看到与此相关的是配置中使用的字符串WT_SESSION::创建当一个表是第一次。每次都是头部分所示wt转储运行。

通知你有很多空的和/或未使用的选项配置字符串,所以不要花一个选项的存在意味着它是被使用。如。以上我们看到lsm选项,尽管所有的桌子mongodb使btree(您可以确认的“格式= btree”选项)。

wt验证子命令- d选项显示的物理布局。可以说wt统计也是如此。但是这些不会被覆盖。

探索在MongoDB数据目录的元数据表

WiredTiger

打哈欠。只是一个版本字符串。把它看成是纯文本。

WiredTiger.turtle

相当无聊。URI指向WiredTiger版本信息。wt,配置字符串以打开它。把它看成是纯文本。

乌龟会很神奇,如果不在文件将被重塑。

WiredTiger.config

这是WiredTiger数据文件。它有点像“wt”实用程序的资源文件命令。它不会由任何程序。它只会由你,或者一些不错的同事,拯救你于指定- c选项每次运行“wt”命令。看到以前的博客文章学习什么。

WiredTiger.lock

只是一个典型的锁文件。除了包含纯文本“WiredTiger锁文件”。自动创建和覆盖。

WiredTiger.wt

这是主WiredTiger存储引擎的元数据表。本身,它也是一个WiredTiger表,WiredTiger。海龟文件指向。

  • 在这个表的URI字符串:
    • 表:Wiredtiger表
    • 文件:文件
    • 系统:几个特殊的系统值,
    • colgroup:指定表格中Colgroups。
      表(Colgroups是一对一的方式MongoDB使用WiredTiger;我倾向于忘记他们的存在。)
  • 表/文件/ colgroup WiredTiger-flavoured JSON配置字符串指定表格中WiredTiger使用时打开这些对象在其他API函数。

这个文件的全部内容是ascii-printable,键和值。WT所有print-safe c字符串标识符和配置值。你不会把它作为与其他表文件虽然容易!他们都包含二进制数值类型和BSON键和/或值。

WiredTiger.wtisMongoDB的收藏目录和索引等。_mdb_catalog。wt(见后)。

有一个特殊的命令,只这集合——硬编码的抛售wt列表。默认情况下,过滤器的输出只是钥匙,此外,它排除了"系统:" +表/文件清单。即使你使用“- v”选项,它将仍然排除本身。

奖金练习:转储WiredTiger的内容。wt元数据文件像只是任何其他wt表

在其他记录,WiredTiger。wt文件包括“表:xxxx”键指向每一个表的URI。每个表除了本身。

所以你可以运行命令等- 0 - 4131298130356306083 wt转储集合,或- 8 - 5834121039240263510 wt转储索引wt转储_mdb_catalogwt转储sizeStorer,但你不能运行wt转储WiredTiger

诀窍是使用的URI“文件:在前面。你还需要与“完整的文件名。wt”后缀,因为它是一个文件,而不是一个表URI。(wt转储假设”表:“作为类型前缀如果没有提供。)

_mdb_catalog.wt

这是目录/ MongoDB用户看到的模式。

每个值是BSON的内容,你可以在上面的反序列化输出。只有一个文档,不是为一个集合,“isFeatureDoc”(见上图)。除了这一个,琐碎的例外,每个对象的字段有:

  • 如“ns”。”测试。foo”、“配置。块”、“local.oplog.rs”
  • “识别”的惟一标识符字符串WT表mongodb集合。如。“收集- 7 - 5834121039240263510”
  • “idxIdent”:对象清单鉴别(ify)每个索引的集合(烦人他们分开内的索引定义”。索引”对象;见下文)。
  • “医学博士”的元数据的集合。它有这些字段:
    • “ns”(再一次)
    • “选项”选项将通过创建命令集合。大多数集合将只有(自动分配)收集在这个对象UUID的价值,但是如果有一个非默认选项,如集合限制:真这里定义的。
    • “索引”的数组索引规格,你会看到的,如果你运行db.collection.getIndexes ()。

确认东西匹配MongoDB的图景

如果你想证明你自己的信息_mdb_catalog WiredTiger表匹配的结果listDatabases (show dbs) listCollections(显示集合),和listIndexes (db.collection.getIndexes())在MongoDB,你可以搜索这些shell命令的文件:

集合及其指数的名单,与WT鉴别(ify)字符串

列表的集合,他们创建的选项字符串:

索引定义(又名指数规格):

输出一个一样WT鉴别表(ify)值与集合名称空间

输出一个一样WT鉴别表(ify)值与索引

以下输出三列:WT识别价值,集合名称,索引名称。

sizeStorer.wt

只是一个表的BSON值。MongoDB商店和BSON文档数据大小和记录计数为每个MongoDB在这里集合。钥匙不是mongodb收集ns价值虽然——他们是WT URI /鉴别价值。你必须映射到的输出wt转储_mdb_catalog找出哪些数量和大小的集合。

storage.bson

不是一个WiredTiger的一部分。几个storage-engine-related选项被保存到一个文件在dbPath数据目录MongoDB层上面可以重启知道directoryPerDB等选项使用上次使用的数据。

把它用bsondump storage.bson(安静)

应用程序(= MongoDB)表

- * .wt集合指数- * .wtMongoDB的文件包含的数据收集和索引,你观察作为一个客户端连接到MongoDB实例。

这些都不是WiredTiger元数据我们将讨论他们在接下来的博客(WiredTiger文件取证第3部分:查看所有的MongoDB数据)。首先虽然可以使用wt转储- x系列- * * * - n + 7 | |尾awk的{NR % 2 = 0} | bsondump安静方法对早期的bsondump _mdb_catalog- * .wt集合

通知你这些文件不包含任何的自己的MongoDB目录信息。你可以看到数据,但你不能看到集合的索引,甚至一个集合的mongodb ns(名称空间)。你总是需要转储的BSON数据_mdb_catalog wiredtiger表信息来得到。

WiredTiger的事务日志文件

/ WiredTigerLog》杂志上。NNNNNNNN文件是WiredTiger的事务日志文件,写前日志。这是唯一一个在磁盘上保存写道,尚未被刷新到收集- *。wt - *和索引。wt文件在一个检查站。

你通常不需要关注具体的日志文件号码当你与他们合作,他们作为一个序列,从一开始就被自动迭代。

你把他们wt printlog而不是wt转储。输出始终是JSON,但是额外的十六进制版本的键和值在操作可以包括通过使用- x选项。

这只是一个起动器使用看wiredtiger事务日志文件(又名mongodb文件)》杂志上。的意思lsn数字;如何识别集合行动[].fileid;如何找到oplog写道;为什么没有写多收藏,是物质的一天。

你可以忽略WiredTigerPreplog. *文件,它们是空的。他们预先分配的文件系统,以减少可能发生的延迟,做open()系统调用;他们只是第二WiredTigerLog更名为。*文件时,它是必要的。

总结

wt转储是主要的命令将使用看WiredTiger表。wt列表是一个倾倒的快捷方式从最顶层的表记录的一个子集(WiredTiger.wt)。

wt printlog是需要查看的命令完全不同的事务日志文件。的写前日志WiredTiger,被称为在MongoDB》杂志上。

知道如何遵循WiredTiger元数据的层次结构,其次是MongoDB目录,是至关重要的,开始反省MongoDB的数据目录中。

另一个关键的理解是,WiredTiger存储键和值与任何类型的指标作为原始二进制值,所以你必须提前知道这些,和/或成为一个熟练的二进制侦探。它的长和短虽然是:WiredTiger的元数据很简单,ascii-printable字符串;所有其他表通常BSON或纯整数类型。(好吧,一个额外的:一个特殊的脱水keystring包装格式,定义的MongoDB层,在指数- * .wt文件。)

查看下一个博客(WiredTiger文件取证第3部分:查看所有MongoDB的数据),看看如何将数据放在一起,并提取任何信息,你觉得如MongoDB用户。

雷竞技下载官网MongoDB Percona分布是一个免费的MongoDB数据库选择,给你一个解决方案,结合了最好的和最重要的开放源码社区的企业组件,设计和测试一起工作。

今天下载Mongo雷竞技下载官网DB Percona分布!

订阅
通知的
客人

0评论
内联反馈
查看所有评论