zoukankan      html  css  js  c++  java
  • 将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、如果对象名称中有空格,在空格前面加个“”杠即可将对象导出:

  • 相关阅读:
    android中的AIDL进程间通信
    [Android自定义控件] Android自定义控件
    Android控件之SlidingDrawer(滑动式抽屉)详解与实例
    Android 广播大全 Intent Action 事件
    Activity和Service绑定
    String.format()用法
    Android之Handler用法总结
    android中的AIDL进程间通信
    Android: 在 TextView 里使用删除线
    fastjson生成和解析json数据
  • 原文地址:https://www.cnblogs.com/xzy186/p/14236291.html
Copyright © 2011-2022 走看看