• 将ceph rgw网关中的对象文件拼接成文件


    我们在往ceph rgw中写入文件时,这些文件在底层其实就是一个一个的对象,只要找到某个文件对应的对象,就能通过这些对象来将原始的文件拼接出来。

    1、查询ceph rgw中的文件列表:

    rados -p rc.rgw.buckets.data ls |grep -v shadow

    上面这条命令中的 rc.rgw.buckets.data 是ceph rgw网关对应的数据存储池,下面图片中每一行的最后一列就是文件的文件名称。

    2、查询网关中的桶对应的marker:

    for i in `radosgw-admin bucket list|grep -Ev "^[|]"|sed -r 's/.*"(.+)".*/1/'`;do radosgw-admin bucket stats --bucket=$i|egrep "bucket"|"marker";echo -e '
    ';done

    下面图片中显示每一个桶对应的标签,根据这个标签我们再来查询一下每个桶下面的文件列表。

    3、根据桶的marker,查看指定桶下面的文件列表:

    rados -p rc.rgw.buckets.data ls |grep -v shadow|grep 771fdd6f-d72e-416d-9443-780662f46e68.1574308.6

    每一行的最后一列就是文件的名称,有了文件名称就能通过该名称来查询这个文件对应的对象列表。

    4、查找指定文件的所有对象的后缀:

    rados -p rc.rgw.buckets.data getxattr '771fdd6f-d72e-416d-9443-780662f46e68.1574308.6_V112R021C00SSDS 注意事项及变更点.xlsx' user.rgw.manifest | ceph-dencoder type RGWObjManifest import - decode dump_json

    这里是查询文件的元数据,从元数据中找到该文件的对象后缀,有了这个,我们就能知道哪些对象是这个文件的了。

    5、根据该文件的对象后缀查找出该文件的所有对象(注意如果文件本身小于4mb的话,是没有其他对象的,所以查询结果会是空的,也就是说小于4M的文件,直接使用步骤3中的那个对象就能把文件恢复出来了):

    rados -p rc.rgw.buckets.data ls |grep .mqeYxzwxLca9OxXQgwq6ObNxPjwZkGX_

    6、将文件的所有对象按照序号顺序排列好,然后导出到一个文件中,注意一定要按照序号排好,不然恢复出来的文件无效:

    rados -p rc.rgw.buckets.data ls |egrep "771fdd6f-d72e-416d-9443-780662f46e68.1574308.6_FormatFactory_setup4.8.0.0.exe|.mqeYxzwxLca9OxXQgwq6ObNxPjwZkGX_"|sort>test

    7、开始使用文件的对象来拼接文件:

    for i in `cat test`;do rados -p rc.rgw.buckets.data get $i $i; cat $i >> FormatFactory_setup4.8.0.0.exe;done

    遇到的问题:

    1、如果对象名称中有空格,在空格前面加个“”杠即可将对象导出:

  • 相关阅读:
    电脑蓝屏的原因及解决方法
    或将引爆第四次工业革命!一张图带你看完人工智能大事件
    sata2.0和sata3.0的区别
    15款顶级的开源人工智能工具推荐
    解读神秘而又强大的百度人工智能计算机
    人工智能让程序员自危:码农大批失业
    电脑开机黑屏只有光标在闪怎么办
    关于XSS漏洞的简介以及分类
    SSD知识
    centos7下安装docker(15.5容器跨主机网络--flanneld)
  • 原文地址:https://www.cnblogs.com/xzy186/p/14236291.html
Copyright © 2020-2023  润新知