不小心清空了Ceph的OSD的分区表如何恢复
前言
如果你是新手,应该出现过敲盘符的时候,敲错的情况,有些操作可能没什么问题,查询类的操作都没问题,但是写入的情况,就可能比较麻烦了,当然老手也可能有误操作,本篇将讲述在误操作把分区表给弄丢了的情况,来看看我们应该如何恢复
实践过程
我们现在有一个正常的集群,我们假设这些分区都是一致的,用的是默认的分区的方式,我们先来看看默认的分区方式是怎样的
破坏环境
[root@lab8106 ceph]# ceph-disk list
···
/dev/sdb :
/dev/sdb1 ceph data, active, cluster ceph, osd.0, journal /dev/sdb2
/dev/sdb2 ceph journal, for /dev/sdb1
···
查看分区情况
[root@lab8106 ceph]# parted -s /dev/sdb print
Model: SEAGATE ST3300657SS (scsi)
Disk /dev/sdb: 300GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:
Number Start End Size File system Name Flags
2 1049kB 1074MB 1073MB ceph journal
1 1075MB 300GB 299GB xfs ceph data
来一个破坏,这里是破坏 osd.0
,对应盘符 /dev/sdb
[root@lab8106 ceph]# ceph-deploy disk zap lab8106:/dev/sdb
[ceph_deploy.conf][DEBUG ] found configuration file at: /root/.cephdeploy.conf
[ceph_deploy.cli][INFO ] Invoked (1.5.34): /usr/bin/ceph-deploy disk zap lab8106:/dev/sdb
···
[lab8106][DEBUG ] Warning: The kernel is still using the old partition table.
[lab8106][DEBUG ] The new table will be used at the next reboot.
[lab8106][DEBUG ] GPT data structures destroyed! You may now partition the disk using fdisk or
[lab8106][DEBUG ] other utilities.
···
即使这个 osd 被使用在,还是被破坏了,这里假设上面的就是一个误操作,我们看下带来了哪些变化
[root@lab8106 ceph]# ll /var/lib/ceph/osd/ceph-0/journal
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
如果你用命令行看,就可以看到上面的链接已经变红了,分区没有了
[root@lab8106 ceph]# ceph-disk list
/dev/sdb :
/dev/sdb1 other, xfs, mounted on /var/lib/ceph/osd/ceph-0
/dev/sdb2 other
已经跟上面有变化了,没有ceph的相关信息了
[root@lab8106 ceph]# parted -s /dev/sdb print
Model: SEAGATE ST3300657SS (scsi)
Disk /dev/sdb: 300GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:
Number Start End Size File system Name Flags
分区表完全没有信息了,到这我们可以确定分区表完全没了,如果现在重启将会发生什么?重启以后这个磁盘就是一个裸盘,没有分区的裸盘
处理办法
首先一个办法就是当这个OSD坏了,然后直接按照删除节点,添加节点就可以了,这个应该是最主流,最通用的处理办法,但是这个在生产环境环境当中造成的数据迁移还是非常大的,我们尝试做恢复,这就是本篇主要讲的东西
关闭迁移
[root@lab8106 ceph]# ceph osd set noout
停止OSD
[root@lab8106 ceph]# systemctl stop ceph-osd@0
现在的OSD还是有进程的,所以需要停止掉再做处理
通过其他节点查看分区的信息
[root@lab8106 ceph]# parted -s /dev/sdc unit s print
Model: SEAGATE ST3300657SS (scsi)
Disk /dev/sdc: 585937500s
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:
Number Start End Size File system Name Flags
2 2048s 2097152s 2095105s ceph journal
1 2099200s 585937466s 583838267s xfs ceph data
我们现在进行分区表的恢复,记住上面的数值,我print的时候是加了unit s这个是要精确的值的,下面的创建会用到的
[root@lab8106 ceph]# parted -s /dev/sdb mkpart primary 2099200s 585937466s
[root@lab8106 ceph]# parted -s /dev/sdb mkpart primary 2048s 2097152s
我们再来检查下
[root@lab8106 ceph]# parted -s /dev/sdb print
Model: SEAGATE ST3300657SS (scsi)
Disk /dev/sdb: 300GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:
Number Start End Size File system Name Flags
2 1049kB 1074MB 1073MB primary
1 1075MB 300GB 299GB xfs primary
分区表已经回来了
[root@lab8106 ceph]# umount /var/lib/ceph/osd/ceph-0
[root@lab8106 ceph]# partprobe
[root@lab8106 ceph]# mount /dev/sdb1 /var/lib/ceph/osd/ceph-0
我们重新挂载看看,没有问题,还要做下其他的处理
[root@lab8106 ceph]# rm -rf /var/lib/ceph/osd/ceph-0/journal
我们先删除掉journal的链接文件
[root@lab8106 ceph]# ceph-osd -i 0 --osd-journal=/dev/sdb2 --mkjournal
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
2016-09-24 00:36:06.595992 7f9d0afbc880 -1 created new journal /dev/sdb2 for object store /var/lib/ceph/osd/ceph-0
[root@lab8106 ceph-0]# ln -s /dev/sdb2 /var/lib/ceph/osd/ceph-0/journal
[root@lab8106 ceph-0]# chown ceph:ceph /var/lib/ceph/osd/ceph-0/journal
[root@lab8106 ceph-0]# ll /var/lib/ceph/osd/ceph-0/journal
lrwxrwxrwx 1 ceph ceph 9 Sep 24 00:37 journal -> /dev/sdb2
上面操作就是创建journal相关的,注意下我上面的操作--osd-journal=/dev/sdb2这个地方,我是便于识别,这个地方要写上dev/sdb2的uuid的路径
[root@lab8106 ceph-0]# ll /dev/disk/by-partuuid/03fc6039-ad80-4b8d-86ec-aeee14fb3bb6
lrwxrwxrwx 1 root root 10 Sep 24 00:33 /dev/disk/by-partuuid/03fc6039-ad80-4b8d-86ec-aeee14fb3bb6 -> ../../sdb2
也就是这个链接的这一串,这个防止盘符串了情况下journal无法找到的问题
启动osd
[root@lab8106 ceph-0]# systemctl start ceph-osd@0
检查下,到这osd就正常的恢复了
为什么有这篇
一直都知道分区表是可以恢复的,也一直知道会有误操作,但是一直没有去把ceph中完整流程走下来,前两天一个哥们环境副本一,然后自己给搞错了,出现不得不恢复的情况,正好自己一直想把这个问题的处理办法给记录下来,所以就有了这篇,万一哪天有人碰到了,就把这篇发给他
变更记录
Why | Who | When |
---|---|---|
创建 | 武汉-运维-磨渣 | 2016-09-24 |
修改排版 | 武汉-运维-磨渣 | 2017-03-09 |
不小心清空了Ceph的OSD的分区表如何恢复的更多相关文章
- 影响性能的关键部分-ceph的osd journal写
在前面一篇文章中,我们看到,当使用filestore时,osd会把磁盘分成data和journal两部分.这主要是为了支持object的transaction操作.我的想法是,ceph需要具有数据保护 ...
- ceph增加osd流程
假如需要新增一个主机名:osd4 ip:192.168.0.110的OSD1.在osd4创建挂载目录及放置配置文件的目录 ssh 192.168.0.110 (这里是从mon主机ssh到osd4主机) ...
- ceph存储osd启动异常处理和正常启停操作
机器角色:cloudstack虚拟机的宿主机:ceph存储机器. 事件:ceph存储的物理机器由于内存异常,需要停机更换,仅仅是把该物理机上面的虚拟机迁移走,同时启动了停机维护,然后就直接关机.结果造 ...
- ceph之osd
一.删除osd ceph osd out 1ceph osd down 1systemctl stop ceph-osd@1ceph osd crush remove osd.1ceph osd rm ...
- Ceph更换OSD磁盘
目录 简介 更换OSD操作步骤 1. 故障磁盘定位 2. 摘除故障磁盘 3. 重建raid0 4. 重建osd 控制数据恢复及回填速度 简介 首先需要说明的是,ceph的osd是不建议做成raid10 ...
- ceph 剔除osd
先将osd.2移出集群 root@ceph-monster:~# ceph osd out osd.2 marked out osd.2. root@ceph-monster:~# ceph osd ...
- ceph添加osd(ceph-deploy)
修改主机名和 /etc/hosts 关闭防火墙和 SELINUX 安装和配置 NTP ceph-deploy 节点安装 安装 ceph-deploy sudo yum install ceph-dep ...
- ceph修复osd为down的情况
尝试一.直接重新激活所有osd 1.查看osd树 root@ceph01:~# ceph osd tree ID WEIGHT TYPE NAME UP/DOWN REWEIGHT PRIMARY-A ...
- ceph 指定OSD创建pool
https://my.oschina.net/wangzilong/blog/1549690 ceph集群中允许使用混合类型的磁盘,比如一部分磁盘是SSD,一部分是STAT.如果针对某些业务小高速磁盘 ...
随机推荐
- linux(centos8):firewalld对于请求会选择哪个zone处理?
一,firewalld对一个请求会适用哪个zone? 当接收到一个请求时,firewalld具体使用哪个zone? firewalld是通过三个步骤来判断的: source,即:源地址 interfa ...
- centos8使用systemd/systemctl管理系统/服务
一,systemd的用途? Systemd 是 Linux 系统工具,用来启动守护进程,已成为大多数发行版的标准配置 Systemd 的优点是功能强大,使用方便, 缺点是体系庞大,非常复杂 在cent ...
- 通俗的讲解Python中的__new__()方法
2020-3-17更新本文,对本文中存争议的例子进行了更新! 曾经我幼稚的以为认识了python的__init__()方法就相当于认识了类构造器,结果,__new__()方法突然出现在我眼前,让我突然 ...
- airtest操作夜神模拟器adb冲突解决办法
首先看错误日志明显是adb之间版本不对应互相干掉对方 第一步 去aritestIde所在目录\AirtestIDE\airtest\core\android\static\adb\windows 第二 ...
- docker是个啥?
docker 第一问:什么是容器 容器就是在一个隔离的环境中运行的一个进程.注意关键词,隔离和进程.如果进程停止,那么容器就销毁.因为具有隔离的特点,所以每个容器都拥有自己的文件系统:包括IP地址.主 ...
- 从零造就JVM大牛(一)
引言 从事java的小伙伴大家好,如果你是一名从事java行业的程序员,无论你是小白还是工作多年的老司机,我相信这篇文章一定会给你带来 不同程度的收货不敢说你看完我的文章从此精通jvm打遍天下无对手, ...
- Redis基础(三)Redis持久化:RDB与AOF
什么是Redis持久化? Redis是键值对的内存数据库,它将数据存储在内存里.客户端发送命令到服务器,再由服务器到内存里查找数据. 一旦Redis服务器进程退出,存储在内存里的数据就会丢失. 为了解 ...
- Verification of WISHBONE I2C Master Core(IRUN+Simvision)
一.前言 很久没写技术博客了,有些懈怠,生活还得继续折腾.转眼工作一年多,时间越长越发觉得自己知之甚少,当然这跟IC行业技术密集有关.用空余时间在opencores网站上下载些小的IP看看 验证下,让 ...
- LORA串口无线数据透明传输终端ZSL311
ZSL311是由成都众山科技生产销售的一款LORA串口无线数据透明传输终端,采用的是LoRa扩频技术来进行无线数据传输,同时提供RS485和RS232串口,为用户提供全透明数据传输模式.支持星形.Me ...
- java安全编码指南之:文件和共享目录的安全性
目录 简介 linux下的文件基本权限 linux文件的特殊权限 Set UID 和 Set GID Sticky Bit SUID/SGID/SBIT权限设置 文件隐藏属性 特殊文件 java中在共 ...