前言

在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的文件存到哪里了的更多相关文章

  1. asserts文件存到外部SD卡里

    package com.example.wang.testapp3; import android.content.res.AssetManager; import android.graphics. ...

  2. 文件存到aws的S3后, 调用getimagesize失败分析

    一.问题 将图片在windows下用图片查看器修改后,上传到s3中,调用getimagesize获取图片信息总是返回false,其它图片正常: 代码如下: $fileName = 's3://sdk1 ...

  3. python读取文件存到excel中

    用xlwt模块执行代码报下面的错 ValueError: column index (256) not an int in range(256) xlwt 模块看源码说最大列只支持255列,所以超过这 ...

  4. sublime text3中sass编译后保存到指定文件夹

    第一步: tools->builde system->new build system 第二步: 粘贴如下代码到新建文档中: { "cmd": ["sass& ...

  5. 12月18日Smarty文件缓存

    缓存 做缓存的目的是为了让程序运行起来更加迅速.因为如果程序访问数据库时数据量较大,执行起来会比较慢.而且每一次刷新页面都会访问依稀数据库,然后再把数据显示在页面上. 设置缓存也有一个缺点,那就是缓存 ...

  6. Java Struts2 POI创建Excel文件并实现文件下载

    Java Struts2 POI创建Excel文件并实现文件下载2013-09-04 18:53 6059人阅读 评论(1) 收藏 举报 分类: Java EE(49) Struts(6) 版权声明: ...

  7. PHP实现上传文件并存进数据库的方法

    本文实例讲述了PHP实现上传文件并存进数据库的方法.分享给大家供大家参考.具体如下: show_add.php文件如下: <?php if(!isset($_REQUEST[''id'']) o ...

  8. 把java文件打包成.jar (jar命令详解)

    把java文件打包成.jar (jar命令详解) 先打开命令提示符(win2000或在运行框里执行cmd命令,win98为DOS提示符),输入jar Chelp,然后回车(如果你盘上已经有了jdk1. ...

  9. PHP对XML文件操作之属性与方法讲解

    DOMDocument相关的内容. 属性: Attributes 存储节点的属性列表(只读) childNodes 存储节点的子节点列表(只读) dataType 返回此节点的数据类型 Definit ...

随机推荐

  1. 第二十一章 PHP编译安装(centos7)

    一.环境准备 主机 IP 身份 web01 10.0.0.7 编译安装PHP 二.准备安装 1.新建目录 [root@jindada ~]# mkdir /php 2.上传源码包并解压 [root@j ...

  2. C++常用数据类型

    基本的内置类型 C++ 为程序员提供了种类丰富的内置数据类型和用户自定义的数据类型.下表列出了七种基本的 C++ 数据类型: 类型 关键字 布尔型 bool 字符型 char 整型 int 浮点型 f ...

  3. 推荐4款个人珍藏的IDEA插件!帮你写出不那么差的代码

    @ 目录 Codota:代码智能提示 代码智能补全 代码智能搜索 Alibaba Java Code Guidelines:阿里巴巴 Java 代码规范 手动配置检测规则 使用效果 CheckStyl ...

  4. poj2187 Beauty Contest (凸包 + 旋转卡壳)

    Beauty Contest Time Limit: 3000MS   Memory Limit: 65536K Total Submissions: 38349   Accepted: 11851 ...

  5. 一文带你趟过mac搭建appium测试环境的遇到的坑

    做UI自动化,最难的一步就是在环境搭建上,怎么去搭建一个UI自动化测试的环境,会难住很多人,在Mac上搭建appium如何搭建呢,本文带着大家去领略如何在mac上搭建appium测试环境.下面就是详细 ...

  6. Hexo相关配置

    date: 2018-11-16 18:27:14 updated: 2018-11-16 20:06:16 1.配置Hexo基本信息 title: 猫熊小才天の书院 #博客标题 subtitle: ...

  7. linux压缩和解压文件命令

    tar  解包:tar zxvf filename.tar  打包:tar czvf filename.tar dirnamegz命令  解压1:gunzip filename.gz  解压2:gzi ...

  8. JUC---11单例模式

    一.什么是单例模式 单例模式(Singleton Pattern)是 Java 中最简单的设计模式之一.这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式.这种模式涉及到一个单一的类,该 ...

  9. Linux 网络编程的5种IO模型:多路复用(select/poll/epoll)

    Linux 网络编程的5种IO模型:多路复用(select/poll/epoll) 背景 我们在上一讲 Linux 网络编程的5种IO模型:阻塞IO与非阻塞IO中,对于其中的 阻塞/非阻塞IO 进行了 ...

  10. (模板)graham扫描法、andrew算法求凸包

    凸包算法讲解:Click Here 题目链接:https://vjudge.net/problem/POJ-1113 题意:简化下题意即求凸包的周长+2×PI×r. 思路:用graham求凸包,模板是 ...