注意
本文档适用于 Ceph 开发版本。
cephfs-journal-tool
目的
如果 CephFS 日志损坏,可能需要专家干预才能将文件系统恢复到工作状态。
The cephfs-journal-tool
该工具提供功能以帮助专家检查、修改和从日志中提取数据。
警告
该工具是危险的因为它直接修改文件系统的内部数据结构。备份,小心,并寻求专家建议。如果你不确定,不要运行此工具。作为预防措施,cephfs-journal-tool 不在活动文件系统上工作。
语法
cephfs-journal-tool [options] journal <inspect|import|export|reset> cephfs-journal-tool [options] header <get|set> <trimmed_pos|expire_pos|write_pos|pool_id> <value> cephfs-journal-tool [options] event <get|splice|recover_dentries> [filter] <list|json|summary|binary>
该工具以三种模式运行:journal
, header
和event
,分别表示整个日志、头部和日志内的事件。
日志模式
这应该是你评估日志状态的起点。
inspect
报告日志的健康状况。这将识别任何缺失的对象或在存储的日志中的损坏。请注意,这不会识别事件本身的不一致,只是表明事件存在并且可以解码。import
和export
以稀疏文件格式读取和写入日志的二进制转储。将文件名作为最后一个参数传递。导入操作检查导入的日志 FSID 是否与在线集群的 FSID 匹配。使用--force
跳过 FSID 检查。导出操作可能无法可靠地用于损坏的日志(缺失对象)。reset
截断日志,丢弃其中的任何信息。使用--force
执行硬重置,而不会尝试从磁盘恢复。
示例:日志检查
# cephfs-journal-tool journal inspect
Overall journal integrity: DAMAGED
Objects missing:
0x1
Corrupt regions:
0x400000-ffffffffffffffff
示例:日志导入/导出
# cephfs-journal-tool journal export myjournal.bin
journal is 4194304~80643
read 80643 bytes at offset 4194304
wrote 80643 bytes at offset 4194304 to myjournal.bin
NOTE: this is a _sparse_ file; you can
$ tar cSzf myjournal.bin.tgz myjournal.bin
to efficiently compress it while preserving sparseness.
# cephfs-journal-tool journal import myjournal.bin
undump myjournal.bin
start 4194304 len 80643
writing header 200.00000000
writing 4194304~80643
done.
Note
在进行任何进一步操作之前,明智的做法是使用journal export <backup file>
命令创建日志备份。
头部模式
get
输出日志头部的当前内容set
修改头部的一个属性。允许的属性是trimmed_pos
,expire_pos
,write_pos
和pool_id
.
示例:头部获取/设置
# cephfs-journal-tool header get
{ "magic": "ceph fs volume v011",
"write_pos": 4274947,
"expire_pos": 4194304,
"trimmed_pos": 4194303,
"stream_format": 1,
"layout": { "stripe_unit": 4194304,
"stripe_count": 1,
"object_size": 4194304,
"pool_id": 2,
"pool_ns": ""}}
# cephfs-journal-tool header set trimmed_pos 4194303
Updating trimmed_pos 0x400000 -> 0x3fffff
Successfully updated header.
事件模式
事件模式允许详细检查和操作日志的内容。事件模式可以对日志中的所有事件进行操作,或者可以应用过滤器。
后跟cephfs-journal-tool event
的参数包括一个操作、可选的过滤器参数和输出模式:
cephfs-journal-tool event <action> [filter] <output>
操作:
get
从日志中读取事件splice
删除日志中的事件或区域recover_dentries
从日志中恢复 dentries。它执行选择性的离线重播,只读取 dentries 并如果它们的版本大于当前后备存储中的版本,则将它们写入后备存储。
过滤:
--range <int begin>..[int end]
只包括 begin(包含)到 end(不包含)范围内的活动--path <path substring>
只包括引用包含指定字符串的元数据的活动--inode <int>
只包括引用包含指定 inode 的元数据的活动--type <type string>
只包括此类型的事件--frag <ino>[.frag id]
只包括引用此目录片段的活动--dname <string>
只包括引用目录片段中的此命名 dentry 的活动(只能与--frag
--client <int>
结合使用:只包括此客户端会话 ID 的活动
过滤器可以基于 AND 基础组合(即每个过滤器的事件交集)。
输出模式:
binary
: 将每个事件作为二进制文件写入,文件夹名称由--path
json
: 将所有事件写入由--path
指定的单个文件,作为 JSON 序列化的对象列表。summary
: 将读取的事件的摘要写入标准输出,以人类可读的格式list
: 将每个事件的类型以人类可读的简洁列表形式写入,以及事件影响的文件路径。
示例:事件模式
# cephfs-journal-tool event get json --path output.json
Wrote output to JSON file 'output.json'
# cephfs-journal-tool event get summary
Events by type:
NOOP: 2
OPEN: 2
SESSION: 2
SUBTREEMAP: 1
UPDATE: 43
# cephfs-journal-tool event get list
0x400000 SUBTREEMAP: ()
0x400308 SESSION: ()
0x4003de UPDATE: (setattr)
/
0x40068b UPDATE: (mkdir)
diralpha
0x400d1b UPDATE: (mkdir)
diralpha/filealpha1
0x401666 UPDATE: (unlink_local)
stray0/10000000001
diralpha/filealpha1
0x40228d UPDATE: (unlink_local)
diralpha
stray0/10000000000
0x402bf9 UPDATE: (scatter_writebehind)
stray0
0x403150 UPDATE: (mkdir)
dirbravo
0x4037e0 UPDATE: (openc)
dirbravo/.filebravo1.swp
0x404032 UPDATE: (openc)
dirbravo/.filebravo1.swpx
# cephfs-journal-tool event get --path filebravo1 list
0x40785a UPDATE: (openc)
dirbravo/filebravo1
0x4103ee UPDATE: (cap update)
dirbravo/filebravo1
# cephfs-journal-tool event splice --range 0x40f754..0x410bf1 summary
Events by type:
OPEN: 1
UPDATE: 2
# cephfs-journal-tool event recover_dentries summary
Events by type:
LID: 1
SUBTREEMAP: 1
Errors: 0
# cephfs-journal-tool event get --inode=1099511627776 list
0x40068b UPDATE: (mkdir)
diralpha
0x400d1b UPDATE: (mkdir)
diralpha/filealpha1
0x401666 UPDATE: (unlink_local)
stray0/10000000001
diralpha/filealpha1
0x40228d UPDATE: (unlink_local)
diralpha
stray0/10000000000
# cephfs-journal-tool event get --frag=1099511627776 --dname=filealpha1 list
0x400d1b UPDATE: (mkdir)
diralpha/filealpha1
0x401666 UPDATE: (unlink_local)
stray0/10000000001
diralpha/filealpha1
# cephfs-journal-tool event get binary --path bin_events
Wrote output to binary files in directory 'bin_events'
Options
--rank=<filesystem>:{mds-rank|all}
用于指定文件系统、MDS 排名或所有排名。--journal=<mdlog|purge_queue>
日志类型。默认值是mdlog
,这是唯一支持事件模式的选项。当purge_queue
使用时,日志扫描器创建一个 PurgeItem 对象并将其添加到 EventMap 以进行处理。
由 Ceph 基金会带给您
Ceph 文档是一个社区资源,由非盈利的 Ceph 基金会资助和托管Ceph Foundation. 如果您想支持这一点和我们的其他工作,请考虑加入现在加入.