dsstbox

概述

openGauss部署资源池化模式且开启ss_enable_dss功能情况下,为了对dss管理的文件系统进行分析、修复元数据文件的能力,资源池化提供了dsstbox管理工具。当前dsstbox工具主要有两个功能:

  • ssrepair:提供可以修改DSS元数据的能力。
  • ssminer:解析dss侧历史redo日志信息。

命令

  • 显示帮助信息

    dsstbox -h
    dsstbox --help
    
  • 显示所有帮助信息

    dsstbox -a
    dsstbox --all
    
  • 显示dss的版本号

    dsstbox -v
    dsstbox --version
    
  • 修改元数据

    dsstbox ssrepair <-v vol_path> <-t type> [-i meta_id] [-s au_size] <-k key_value>
    
  • 打印指定vg的所有有效历史redo信息。

    dsstbox ssminer <-g vg_name> [-D DSS_HOME]
    
  • 打印指定vg以start_lsn开始的number条有效历史redo信息。如果不包含number参数,则打印start_lsn开始的所有有效历史redo日志信息。如果start_lsn和number同时为0,则仅打印redo_ctrl信息。

    dsstbox ssminer <-g vg_name> <-s start_lsn> [-n number] [-D DSS_HOME]
    
  • 打印指定vg以index+offset组合位置开始的number条有效历史redo信息。如果不包含number参数,则打印index+offset组合位置开始的所有有效历史redo日志信息。如果不包含offset参数和number参数,则仅打印index块对应的所有有效历史redo信息。

    dsstbox ssminer <-g vg_name> <-i index> [-o offset] [-n number] [-D DSS_HOME]
    

    说明:

    • vol_path: 要修改的磁盘卷组路径。只支持绝对路径,长度不能超过63,字符仅支持数字、大小写字母以及 '_','-','.'。
    • type: 要修改的元数据类型。当前支持的类型包括:core_ctrl、volume_ctrl、root_ft_block、volume_header、software_version、fs_block、ft_block、fs_aux_block。
      • core_ctrl、volume_ctrl、root_ft_block 仅位于入口卷上,因此只允许对入口卷做更改;fs_block、ft_block、fs_aux_block、volume_header、software_version 可位于任意卷,因此不限制是否为入口卷。
      • software_version 实际上属于 volume_header 的子项,但不允许通过 “-t volume_header -k software_version=version 更改 software_version,只允许通过 “-t software_version software_version=version“更改。更改的version不能超过当前DSS的版本。
      • core_ctrl、volume_ctrl、root_ft_block、volume_header、software_version在卷上的位置固定,因此不需要输入 -i meta_id 和 -s au_size;而fs_block、ft_block、fs_aux_block在卷上的位置不固定,因此必须传入-i meta_id和-s au_size。
    • meta_id: 要修改的元数据meta_id。取值范围[0, 2^64 - 1],用户必须确保meta_id是实际存在的(ssrepair内部不做校验),否则会导致修改失败或者错误的元数据修改。
    • au_size: 要修改的磁盘卷组的单个au物理块的大小,单位是KB,取值范围[2048, 65536],仅用于与-i meta_id一起计算元数据在磁盘内的偏移,不用于设置卷组的AU_SIZE,用户必须确保传入的值与卷组实际的AU大小一致(ssrepair内部不做校验),否则会导致错误的元数据修改。
    • key_value: 要修改的元数据字段和修改后的字段内容。支持多个键值对,用','分隔。
    • DSS_HOME: $DSS_HOME所在路径。
    • vg_name: 卷组名。长度不能超过63,仅支持数字,大小写字母和部分特殊字符’_','.','-',其他字符不支持。
    • start_lsn: 单个redo日志的唯一标志,单调递增。取值范围:整数,[0, 2^64 - 1]。当start_lsn = 0时,number也要为0,否则报错处理。
    • number: 需要打印的redo日志数量。取值范围:整数,[0, 2^64 - 1]。当number = 0时,start_lsn也要为0,否则报错处理。
    • index: 需要打印的redo块的索引。取值范围:整数,[0, 7]。
    • offset: 读取指定redo块时的偏移量。取值范围:整数,[0, 2^64 - 1],单位为Byte。

    警告:

    1、dsstbox ssrepair 修改DSS元数据功能,属于高危操作,请谨慎操作。必须在技术支持人员指导下操作。

    2、dsstbox ssrepair仅用于极端条件下的逃生手段,只提供修改DSS元数据功能,由于使用场景时已发生多个元数据的损坏,磁盘元数据不可信,只能校验修改字段是否存在以及修改内容的合法性,不能做反向的合理性校验,使用的技术人员需保证修改数据的合理性。

    3、在dssserver拉起条件下使用dsstbox ssrepair去修改元数据,可能导致修改的数据被二次覆盖,使用dsstbox ssrepair前需要先停止集群。

    4、dsstbox ssrepair在修改元数据之前,会提示用户确认上述条件,用户确认输入后再继续执行,如果不希望提示确认,可以将环境变量DSS_REPAIR_CONFIRM_QUIET设置为TRUE。

使用示例

  • 修改卷/dev/vdb2上meta_id为8919238324529152(v:0,au:10,block:507,item:0)的类型为fs_block的元数据块,修改内容是head.common.type=1,bitmap[1]=18446744073709551615。

    dsstbox ssrepair -v /dev/vdb2 -t fs_block -i 8919238324529152 -s 8192 -k 'head.common.type=1,bitmap[1]=18446744073709551615'
    
  • 修改卷/dev/vdb2上meta_id为105553116275712(v:0,au:9,block:6,item:0)的类型为ft_block的元数据块,修改内容是node_num=16。

    dsstbox ssrepair -v /dev/vdb2 -t ft_block -i 105553116275712 -s 8192 -k 'node_num=16'
    
  • 修改卷/dev/vdb2上meta_id为9601646138484736(v:0,au:12,item:0)的类型为fs_aux_block的元数据块,修改内容是head.ftid=105553116275712。

    dsstbox ssrepair -v /dev/vdb2 -t fs_aux_block -i 9601646138484736 -s 8192 -k 'head.ftid=105553116275712'
    
  • 修改卷/dev/vdb2上的software_version为2。

    dsstbox ssrepair -v /dev/vdb2 -t software_version -k 'software_version=2'
    
  • 修改卷/dev/vdb2上的类型为volume_header元数据块,修改内容是vg_name=test_dsstbox。

    dsstbox ssrepair -v /dev/vdb2 -t volume_header -k 'vg_name=test_dsstbox'
    
  • 修改卷/dev/vdb2上的类型为root_ft_block的元数据块,修改内容是ft_block.common.version=32,ft_root.fid=5133。

    dsstbox ssrepair -v /dev/vdb2 -t root_ft_block -k 'ft_block.common.version=32,ft_root.fid=5133'
    
  • 修改卷/dev/vdb2上的类型为volume_ctrl的元数据块,修改内容是version=79,defs[0].id=0。

    dsstbox ssrepair -v /dev/vdb2 -t volume_ctrl -k 'version=79,defs[0].id=0'
    
  • 修改卷/dev/vdb2上的类型为core_ctrl的元数据块,修改内容是au_size=8192,volume_count=1,volume_attrs[0].id=0。

    dsstbox ssrepair -v /dev/vdb2 -t core_ctrl -k 'au_size=8192,volume_count=1,volume_attrs[0].id=0'
    
  • 打印data的所有有效历史redo信息。

    dsstbox ssminer -g data
    
  • 打印data的redo ctrl信息。

    dsstbox ssminer -g data -s 0 -n 0
    
  • 打印data的lsn为2开始的3条redo历史信息。

    dsstbox ssminer -g data -s 2 -n 3
    
  • 打印data的index为0,offset 为0开始的3条redo历史信息。

    dsstbox ssminer -g data -i 0  -o 0 -n 3
    
意见反馈
编组 3备份
    openGauss 2025-06-07 22:42:35
    取消