Cephfs的文件存到哪里了
前言
在ceph里面使用rbd接口的时候,存储的数据在后台是以固定的prifix的对象存在的,这样就能根据相同的前缀对象去对image文件进行拼接或者修复
在文件系统里面这一块就要复杂一些,本篇就写的关于这个,文件和对象的对应关系是怎样的,用系统命令怎么定位,又是怎么得到这个路径的
实践
根据系统命令进行文件的定位
写入测试文件
dd if=/dev/zero of=/mnt/testfile bs=4M count=10
查看文件的映射
[root@lab8106 mnt]# cephfs /mnt/testfile map
WARNING: This tool is deprecated. Use the layout.* xattrs to query and modify layouts.
FILE OFFSET OBJECT OFFSET LENGTH OSD
0 10000001188.00000000 0 4194304 1
4194304 10000001188.00000001 0 4194304 0
8388608 10000001188.00000002 0 4194304 1
12582912 10000001188.00000003 0 4194304 0
16777216 10000001188.00000004 0 4194304 1
20971520 10000001188.00000005 0 4194304 0
25165824 10000001188.00000006 0 4194304 0
29360128 10000001188.00000007 0 4194304 1
33554432 10000001188.00000008 0 4194304 1
37748736 10000001188.00000009 0 4194304 0
查找文件
[root@lab8106 mnt]# ceph osd map data 10000001188.00000000
osdmap e109 pool 'data' (2) object '10000001188.00000000' -> pg 2.9865f84d (2.d) -> up ([1], p1) acting ([1], p1)
[root@lab8106 mnt]# ll /var/lib/ceph/osd/ceph-1/current/2.d_head/10000001188.00000000__head_9865F84D__2
-rw-r--r-- 1 ceph ceph 4194304 Apr 20 09:35 /var/lib/ceph/osd/ceph-1/current/2.d_head/10000001188.00000000__head_9865F84D__2
根据上面的命令已经把文件和对象的关系找到了,我们要看下这个关系是根据什么计算出来的
根据算法进行文件定位
写入测试文件(故意用bs=3M模拟后台不为整的情况)
[root@lab8106 ~]# dd if=/dev/zero of=/mnt/myfile bs=3M count=10
获取文件的inode信息
[root@lab8106 ~]# fileinode=`stat -c %i "/mnt/myfile"`
[root@lab8106 ~]# echo $fileinode
获取文件的大小和对象个数信息
[root@lab8106 ~]# filesize=`stat -c %s "/mnt/myfile"`
[root@lab8106 ~]# echo $filesize
31457280
[root@lab8106 ~]# objectnumori=`echo "scale = 1; $filesize/$objectsize"|bc`
[root@lab8106 ~]# echo $objectnumori
7.5
[root@lab8106 ~]# objectnum=`echo $((${objectnumori//.*/+1}))`
[root@lab8106 ~]# echo $objectnum
8
获取对象名称前缀
[root@lab8106 ~]# declare -l $objectname
[root@lab8106 ~]# objectname=`echo "obase=16;$fileinode"|bc`
[root@lab8106 ~]# echo $objectname
1000000118b
上面的declare -l操作后,对象名称的变量才能自动赋值为小写的,否则的话就是大写的,会出现对应不上的问题
对象的后缀(后面的0即为编号)
[root@lab8106 ~]#objectbackname=`printf "%.8x\n" 0`
[root@lab8106 ~]#echo $objectbackname
真正的对象名称为:
[root@lab8106 ~]#realobjectback=$objectname.$objectbackname
打印出所有对象名称
[root@lab8106 ~]# for num in `seq 0 $objectnum` ;do backname=`printf "%.8x\n" $num`;echo $objectname.$backname;done;
1000000118b.00000000
1000000118b.00000001
1000000118b.00000002
1000000118b.00000003
1000000118b.00000004
1000000118b.00000005
1000000118b.00000006
1000000118b.00000007
1000000118b.00000008
可以看到用算法进行定位的时候,整个过程都没有跟集群ceph进行查询交互,只用到了获取文件的stat的信息,所以根据算法就可以完全定位到具体的对象名称了
根据对象名称查找文件所在的位置
假如一个对象名称如下:
10000000010.00000003
对象名称取10000000010前面加上0x,并且去掉.后面的,得到:
0x10000000010
计算出inode:
[root@lab8106 mnt]#printf "%d\n" 0x10000000010
1099511627792
根据inode查找文件路径
[root@lab8106 mnt]# find /mnt/ -inum 1099511627792 -printf "%i %p\n"
1099511627792 /mnt/testfile
总结
本篇是介绍了cephfs中文件跟后台具体对象对应的关系,这个对于系统的可恢复性上面还是有很大的作用的,在cephfs当中只要对象还在,数据就还在,哪怕所有的服务全挂掉,这个在之前的某个别人的生产环境当中已经实践过一次,当然那个是rbd的相对来说要简单一些,当然文件系统的恢复也可以用OSD重构集群的方式进行恢复,本篇的对于元数据丢失的情况下文件恢复会有一定的指导作用
变更记录
Why | Who | When |
---|---|---|
创建 | 武汉-运维-磨渣 | 2017-04-20 |
增加根据对象查找文件位置 | 武汉-运维-磨渣 | 2017-07-12 |
Cephfs的文件存到哪里了的更多相关文章
- asserts文件存到外部SD卡里
package com.example.wang.testapp3; import android.content.res.AssetManager; import android.graphics. ...
- 文件存到aws的S3后, 调用getimagesize失败分析
一.问题 将图片在windows下用图片查看器修改后,上传到s3中,调用getimagesize获取图片信息总是返回false,其它图片正常: 代码如下: $fileName = 's3://sdk1 ...
- python读取文件存到excel中
用xlwt模块执行代码报下面的错 ValueError: column index (256) not an int in range(256) xlwt 模块看源码说最大列只支持255列,所以超过这 ...
- sublime text3中sass编译后保存到指定文件夹
第一步: tools->builde system->new build system 第二步: 粘贴如下代码到新建文档中: { "cmd": ["sass& ...
- 12月18日Smarty文件缓存
缓存 做缓存的目的是为了让程序运行起来更加迅速.因为如果程序访问数据库时数据量较大,执行起来会比较慢.而且每一次刷新页面都会访问依稀数据库,然后再把数据显示在页面上. 设置缓存也有一个缺点,那就是缓存 ...
- Java Struts2 POI创建Excel文件并实现文件下载
Java Struts2 POI创建Excel文件并实现文件下载2013-09-04 18:53 6059人阅读 评论(1) 收藏 举报 分类: Java EE(49) Struts(6) 版权声明: ...
- PHP实现上传文件并存进数据库的方法
本文实例讲述了PHP实现上传文件并存进数据库的方法.分享给大家供大家参考.具体如下: show_add.php文件如下: <?php if(!isset($_REQUEST[''id'']) o ...
- 把java文件打包成.jar (jar命令详解)
把java文件打包成.jar (jar命令详解) 先打开命令提示符(win2000或在运行框里执行cmd命令,win98为DOS提示符),输入jar Chelp,然后回车(如果你盘上已经有了jdk1. ...
- PHP对XML文件操作之属性与方法讲解
DOMDocument相关的内容. 属性: Attributes 存储节点的属性列表(只读) childNodes 存储节点的子节点列表(只读) dataType 返回此节点的数据类型 Definit ...
随机推荐
- c# 常用帮助类
C#常用帮助类 因为小土现在还是处于小白阶段,所以自己的知识技术还达不到要求,但是小土在网上找到一个大神的,等以后小土技术有了一定提升以后,在走自己的路,啥也不说了上货. 地址 :https://gi ...
- 接口管理平台Yapi
1.介绍 YApi 是由去哪儿移动架构组推出的一款开源项目,是高效.易用.功能强大的 api 管理平台,旨在为开发.产品.测试人员提供更优雅的接口管理服务. 官网:https://yapi.ymfe. ...
- 【树形结构】51nod 1766 树上的最远点对
题目内容 \(n\)个点被\(n−1\)条边连接成了一颗树,边有权值\(w_i\).有\(q\)个询问,给出\([a,b]\)和\([c,d]\)两个区间,表示点的标号请你求出两个区间内各选一点之间的 ...
- centos6.8 Mysql5.6.22 升级 mysql-5.7.20
一.检查系统环境 二.备份数据库 mysqldump –all-databases > allbackupfile.sql (建议:有条件的话可使用图形化界面备份,操作灵活) 三.下载安装文件 ...
- 解决加密PDF文档无法复制文字的问题
有的时候在网络上搜索到一篇心仪的PDF文档,想复制其中内容时提示无法复制. 如果只想摘抄其中部分文字内容,可以使用Firefox浏览器打开这篇加密文档. Firefox浏览器自带PDF插件,打开后即可 ...
- 理解Margin边距塌陷与box-sizing的问题
父与子塌陷问题 子盒子与父盒子相互影响,margin值会重叠,谁大听谁的 运行结果: box-sizing box-sizing 原始属性值: content-box,该属性对于盒子尺寸来说,并不会让 ...
- 有关hashMap跟hashTable的区别
HashMap和Hashtable都实现了Map接口 HashMap是非synchronized,而Hashtable是synchronized HashTable使用Enumeration,Hash ...
- c++ stl库中的set
简单说来 set(集合)里的元素 不会有相同元素(也就是说 相同的值不存 )并且 存进去会自动排序 类比sort默认排序从小到大 set排序也是 set/multiset会根据待定的排序准则,自动将 ...
- abp(net core)+easyui+efcore实现仓储管理系统——出库管理之四(五十三)
abp(net core)+easyui+efcore实现仓储管理系统目录 abp(net core)+easyui+efcore实现仓储管理系统--ABP总体介绍(一) abp(net core)+ ...
- nb-iot技术实现跟踪功能的应用
在互联网和连接的世界里,nb-iot风靡一时.企业和个人正在利用nb-iot技术和nb-iot设备的可靠,快速连接能力,对其技术系统进行渐进式更改,并创建一个互联的"智能"世界. ...