注意
本文档适用于 Ceph 的开发版本。
灾难恢复
元数据损坏和修复
如果文件系统具有不一致或丢失的元数据,则被视为损坏。您可能会通过健康消息发现损坏,或者在某些不幸的情况下,从正在运行的 MDS 守护程序中的断言中发现损坏。
元数据损坏可能是由于底层 RADOS 层中的数据丢失(例如,多个磁盘故障导致所有 PG 副本丢失),或由于软件错误造成的。
CephFS 包含一些可能能够恢复损坏的文件系统的工具,但要安全地使用它们需要对 CephFS 内部结构有扎实的理解。这些潜在危险操作的文档位于单独的页面上:高级:元数据修复工具。
数据池损坏(受丢失的数据 PG 影响的文件)
如果在数据池中丢失了 PG,则文件系统将继续正常运行,但某些文件的某些部分将简单地丢失(读取将返回零)。
丢失数据池 PG 可能会影响许多文件。文件被分成许多 RADOS 对象,因此要识别哪些文件受到了特定 PG 丢失的影响,需要扫描存储文件数据的所有 RADOS 对象。此类扫描对于识别必须从备份中恢复哪些文件非常有用。
危险
此命令不会修复任何元数据,因此在这种情况下恢复文件时,必须删除损坏的文件并替换它,以便获得新的 inode。不要在原位覆盖损坏的文件。
如果您知道对象已从 PG 中丢失,请使用 pg_files 子命令扫描可能因此损坏的文件
cephfs-data-scan pg_files <path> <pg id> [<pg id>...]
例如,如果您丢失了 PG 1.4 和 4.5 中的数据,并且想知道 /home/bob 下哪些文件已损坏
cephfs-data-scan pg_files /home/bob 1.4 4.5
输出是潜在损坏文件路径的列表。每行列出一个文件。
注意
此命令充当正常的 CephFS 客户端,以查找文件系统中的所有文件并读取其布局。这意味着 MDS 必须启动并运行才能使用此命令。
使用 first-damage.py
卸载所有客户端。
如果可能,刷新日志
ceph tell mds.<fs_name>:0 flush journal使文件系统失效
ceph fs fail <fs_name>从日志中恢复目录项。如果 MDS 成功刷新了日志,则这将是一个空操作
cephfs-journal-tool --rank=<fs_name>:0 event recover_dentries summary重置日志
cephfs-journal-tool --rank=<fs_name>:0 journal reset --yes-i-really-mean-it运行
first-damage.py以列出损坏的目录项python3 first-damage.py --memo run.1 <pool>(可选)删除损坏的目录项
python3 first-damage.py --memo run.2 --remove <pool>注意
使用
--memo指定一个不同的文件来保存已经遍历过的对象。这使得分离在不同、独立运行期间创建的数据成为可能。此命令的效果是从快照或头部(在当前层次结构中)删除目录项。inode 的链接将丢失。但是,inode 可能会在未来的数据扫描恢复期间在
lost+found中恢复。