前言

如果你是新手,应该出现过敲盘符的时候,敲错的情况,有些操作可能没什么问题,查询类的操作都没问题,但是写入的情况,就可能比较麻烦了,当然老手也可能有误操作,本篇将讲述在误操作把分区表给弄丢了的情况,来看看我们应该如何恢复

实践过程

我们现在有一个正常的集群,我们假设这些分区都是一致的,用的是默认的分区的方式,我们先来看看默认的分区方式是怎样的

破坏环境

  1. [root@lab8106 ceph]# ceph-disk list
  2. ···
  3. /dev/sdb :
  4. /dev/sdb1 ceph data, active, cluster ceph, osd.0, journal /dev/sdb2
  5. /dev/sdb2 ceph journal, for /dev/sdb1
  6. ···

查看分区情况

  1. [root@lab8106 ceph]# parted -s /dev/sdb print
  2. Model: SEAGATE ST3300657SS (scsi)
  3. Disk /dev/sdb: 300GB
  4. Sector size (logical/physical): 512B/512B
  5. Partition Table: gpt
  6. Disk Flags:
  7. Number Start End Size File system Name Flags
  8. 2 1049kB 1074MB 1073MB ceph journal
  9. 1 1075MB 300GB 299GB xfs ceph data

来一个破坏,这里是破坏 osd.0,对应盘符 /dev/sdb

  1. [root@lab8106 ceph]# ceph-deploy disk zap lab8106:/dev/sdb
  2. [ceph_deploy.conf][DEBUG ] found configuration file at: /root/.cephdeploy.conf
  3. [ceph_deploy.cli][INFO ] Invoked (1.5.34): /usr/bin/ceph-deploy disk zap lab8106:/dev/sdb
  4. ···
  5. [lab8106][DEBUG ] Warning: The kernel is still using the old partition table.
  6. [lab8106][DEBUG ] The new table will be used at the next reboot.
  7. [lab8106][DEBUG ] GPT data structures destroyed! You may now partition the disk using fdisk or
  8. [lab8106][DEBUG ] other utilities.
  9. ···

即使这个 osd 被使用在,还是被破坏了,这里假设上面的就是一个误操作,我们看下带来了哪些变化

  1. [root@lab8106 ceph]# ll /var/lib/ceph/osd/ceph-0/journal
  2. lrwxrwxrwx 1 root root 58 Sep 24 00:02 /var/lib/ceph/osd/ceph-0/journal -> /dev/disk/by-partuuid/bd81471d-13ff-44ce-8a33-92a8df9e8eee

如果你用命令行看,就可以看到上面的链接已经变红了,分区没有了

  1. [root@lab8106 ceph]# ceph-disk list
  2. /dev/sdb :
  3. /dev/sdb1 other, xfs, mounted on /var/lib/ceph/osd/ceph-0
  4. /dev/sdb2 other

已经跟上面有变化了,没有ceph的相关信息了

  1. [root@lab8106 ceph]# parted -s /dev/sdb print
  2. Model: SEAGATE ST3300657SS (scsi)
  3. Disk /dev/sdb: 300GB
  4. Sector size (logical/physical): 512B/512B
  5. Partition Table: gpt
  6. Disk Flags:
  7. Number Start End Size File system Name Flags

分区表完全没有信息了,到这我们可以确定分区表完全没了,如果现在重启将会发生什么?重启以后这个磁盘就是一个裸盘,没有分区的裸盘

处理办法

首先一个办法就是当这个OSD坏了,然后直接按照删除节点,添加节点就可以了,这个应该是最主流,最通用的处理办法,但是这个在生产环境环境当中造成的数据迁移还是非常大的,我们尝试做恢复,这就是本篇主要讲的东西

关闭迁移

  1. [root@lab8106 ceph]# ceph osd set noout

停止OSD

  1. [root@lab8106 ceph]# systemctl stop ceph-osd@0

现在的OSD还是有进程的,所以需要停止掉再做处理

通过其他节点查看分区的信息

  1. [root@lab8106 ceph]# parted -s /dev/sdc unit s print
  2. Model: SEAGATE ST3300657SS (scsi)
  3. Disk /dev/sdc: 585937500s
  4. Sector size (logical/physical): 512B/512B
  5. Partition Table: gpt
  6. Disk Flags:
  7. Number Start End Size File system Name Flags
  8. 2 2048s 2097152s 2095105s ceph journal
  9. 1 2099200s 585937466s 583838267s xfs ceph data

我们现在进行分区表的恢复,记住上面的数值,我print的时候是加了unit s这个是要精确的值的,下面的创建会用到的

  1. [root@lab8106 ceph]# parted -s /dev/sdb mkpart primary 2099200s 585937466s
  2. [root@lab8106 ceph]# parted -s /dev/sdb mkpart primary 2048s 2097152s

我们再来检查下

  1. [root@lab8106 ceph]# parted -s /dev/sdb print
  2. Model: SEAGATE ST3300657SS (scsi)
  3. Disk /dev/sdb: 300GB
  4. Sector size (logical/physical): 512B/512B
  5. Partition Table: gpt
  6. Disk Flags:
  7. Number Start End Size File system Name Flags
  8. 2 1049kB 1074MB 1073MB primary
  9. 1 1075MB 300GB 299GB xfs primary

分区表已经回来了

  1. [root@lab8106 ceph]# umount /var/lib/ceph/osd/ceph-0
  2. [root@lab8106 ceph]# partprobe
  3. [root@lab8106 ceph]# mount /dev/sdb1 /var/lib/ceph/osd/ceph-0

我们重新挂载看看,没有问题,还要做下其他的处理

  1. [root@lab8106 ceph]# rm -rf /var/lib/ceph/osd/ceph-0/journal

我们先删除掉journal的链接文件

  1. [root@lab8106 ceph]# ceph-osd -i 0 --osd-journal=/dev/sdb2 --mkjournal
  2. SG_IO: bad/missing sense data, sb[]: 70 00 05 00 00 00 00 0a 00 00 00 00 20 00 01 cf 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
  3. 2016-09-24 00:36:06.595992 7f9d0afbc880 -1 created new journal /dev/sdb2 for object store /var/lib/ceph/osd/ceph-0
  4. [root@lab8106 ceph-0]# ln -s /dev/sdb2 /var/lib/ceph/osd/ceph-0/journal
  5. [root@lab8106 ceph-0]# chown ceph:ceph /var/lib/ceph/osd/ceph-0/journal
  6. [root@lab8106 ceph-0]# ll /var/lib/ceph/osd/ceph-0/journal
  7. lrwxrwxrwx 1 ceph ceph 9 Sep 24 00:37 journal -> /dev/sdb2

上面操作就是创建journal相关的,注意下我上面的操作--osd-journal=/dev/sdb2这个地方,我是便于识别,这个地方要写上dev/sdb2的uuid的路径

  1. [root@lab8106 ceph-0]# ll /dev/disk/by-partuuid/03fc6039-ad80-4b8d-86ec-aeee14fb3bb6
  2. lrwxrwxrwx 1 root root 10 Sep 24 00:33 /dev/disk/by-partuuid/03fc6039-ad80-4b8d-86ec-aeee14fb3bb6 -> ../../sdb2

也就是这个链接的这一串,这个防止盘符串了情况下journal无法找到的问题

启动osd

  1. [root@lab8106 ceph-0]# systemctl start ceph-osd@0

检查下,到这osd就正常的恢复了

为什么有这篇

一直都知道分区表是可以恢复的,也一直知道会有误操作,但是一直没有去把ceph中完整流程走下来,前两天一个哥们环境副本一,然后自己给搞错了,出现不得不恢复的情况,正好自己一直想把这个问题的处理办法给记录下来,所以就有了这篇,万一哪天有人碰到了,就把这篇发给他

变更记录

Why Who When
创建 武汉-运维-磨渣 2016-09-24
修改排版 武汉-运维-磨渣 2017-03-09

不小心清空了Ceph的OSD的分区表如何恢复的更多相关文章

  1. 影响性能的关键部分-ceph的osd journal写

    在前面一篇文章中,我们看到,当使用filestore时,osd会把磁盘分成data和journal两部分.这主要是为了支持object的transaction操作.我的想法是,ceph需要具有数据保护 ...

  2. ceph增加osd流程

    假如需要新增一个主机名:osd4 ip:192.168.0.110的OSD1.在osd4创建挂载目录及放置配置文件的目录 ssh 192.168.0.110 (这里是从mon主机ssh到osd4主机) ...

  3. ceph存储osd启动异常处理和正常启停操作

    机器角色:cloudstack虚拟机的宿主机:ceph存储机器. 事件:ceph存储的物理机器由于内存异常,需要停机更换,仅仅是把该物理机上面的虚拟机迁移走,同时启动了停机维护,然后就直接关机.结果造 ...

  4. ceph之osd

    一.删除osd ceph osd out 1ceph osd down 1systemctl stop ceph-osd@1ceph osd crush remove osd.1ceph osd rm ...

  5. Ceph更换OSD磁盘

    目录 简介 更换OSD操作步骤 1. 故障磁盘定位 2. 摘除故障磁盘 3. 重建raid0 4. 重建osd 控制数据恢复及回填速度 简介 首先需要说明的是,ceph的osd是不建议做成raid10 ...

  6. ceph 剔除osd

    先将osd.2移出集群 root@ceph-monster:~# ceph osd out osd.2 marked out osd.2. root@ceph-monster:~# ceph osd ...

  7. ceph添加osd(ceph-deploy)

    修改主机名和 /etc/hosts 关闭防火墙和 SELINUX 安装和配置 NTP ceph-deploy 节点安装 安装 ceph-deploy sudo yum install ceph-dep ...

  8. ceph修复osd为down的情况

    尝试一.直接重新激活所有osd 1.查看osd树 root@ceph01:~# ceph osd tree ID WEIGHT TYPE NAME UP/DOWN REWEIGHT PRIMARY-A ...

  9. ceph 指定OSD创建pool

    https://my.oschina.net/wangzilong/blog/1549690 ceph集群中允许使用混合类型的磁盘,比如一部分磁盘是SSD,一部分是STAT.如果针对某些业务小高速磁盘 ...

随机推荐

  1. pytest文档43-元数据使用(pytest-metadata)

    前言 什么是元数据?元数据是关于数据的描述,存储着关于数据的信息,为人们更方便地检索信息提供了帮助. pytest 框架里面的元数据可以使用 pytest-metadata 插件实现.文档地址http ...

  2. vim插件配置

    OS:kali linux tool:vim 上图: 0x00 需要用到的插件及其下载地址 左边的一栏显示文件目录结构的用到的插件为 NERDTree 下载地址:https://github.com/ ...

  3. php闭包作为函数参数

    <?php function test(Closure $call) { $a = 63; $b = 22; echo "hello"; echo $call($a,$b); ...

  4. nginx安全:配置allow/deny控制ip访问(ngx_http_access_module)

    一,nginx中allow/deny指令的用途 1, Nginx的deny和allow指令是由ngx_http_access_module模块提供, Nginx安装默认内置了该模块 2, nginx访 ...

  5. 【Azure 批处理 Azure Batch】在Azure Batch中如何通过开始任务自动安装第三方依赖的一些软件(Windows环境)

    准备条件 Azure Batch账号 需要安装的软件包(zip)文件,里面包含该软件的msi安装文件, 此处使用python.msi 版本 3.3.3 作为例子(https://www.python. ...

  6. 习题解答chapter04

    题目: 实验:利用IDE的debug功能给例6.4和例6.6的new语句设置断点,使用单步调试(step into/step over)跟踪子类对象实例化(初始化)的执行顺序,并总结该过程.(教材:J ...

  7. 微服务调用之feign负载均衡及服务降级

    一,负载均衡: feign已经集成了ribbon,将service1,service2在不同端口启动多个实例可以自动负载均衡 idea: application.yml中server.port: ${ ...

  8. ORA-01078: failure in processing system parameters 问题的解决方法(oracle 11g)

    https://blog.csdn.net/lzwgood/article/details/26358725

  9. ATOM基础教程一使用前端插件emmet(16)

    emmet简介 http://blog.csdn.net/zsl10/article/details/51956791 emmet的前身是Zen coding,从事Web前端开发的工程师对该插件并不陌 ...

  10. 显示器类型对美乐威NDI IP转换器延时影响测试

    背景 用户在选择用网络传输视频时,传输延迟通常是他们非常关心的数据.集成商在探究如何降低视频传输延时,往往专注于网络本身和视频编码的优化,容易忽略视频解码和播出也是整个视频传输过程中非常重要的环节.本 ...