前言

如果看到标题,你是不是第一眼觉得写错了,这个怎么可能,完全就是两个不相关的东西,最开始我也是这么想的,直到我发现真的是这样的时候,也是很意外,还是弄清楚下比较好,不然在某个操作下,也许就会出现意想不到的情况

定位

如果你看过我的博客,正好看过这篇 <<ceph在centos7下一个不容易发现的改变>> ,那么应该还记得这个讲的是centos 7 下面通过udev来实现了osd的自动挂载,这个自动挂载就是本篇需要了解的前提

[root@lab101 ~]# df -h|grep ceph
/dev/sdf1 233G 34M 233G 1% /var/lib/ceph/osd/ceph-1
[root@lab101 ~]# systemctl stop ceph-osd@1
[root@lab101 ~]# umount /dev/sdf1
[root@lab101 ~]# parted -l &>/dev/null
[root@lab101 ~]# df -h|grep ceph
/dev/sdf1 233G 34M 233G 1% /var/lib/ceph/osd/ceph-1
[root@lab101 ~]# ps -ef|grep osd
ceph 62701 1 1 23:25 ? 00:00:00 /usr/bin/ceph-osd -f --cluster ceph --id 1 --setuser ceph --setgroup ceph
root 62843 35114 0 23:25 pts/0 00:00:00 grep --color=auto osd

看这个操作过程,是不是很神奇,是不是很意外,不管怎么说,parted -l的一个操作把我们的osd给自动mount 起来了,也自动给启动了

出现这个以后,我们先看下日志怎么出的,大概看起来的是这样的

可以看到确实是实时去触发的

服务器上面是有一个这个服务的

systemd-udevd.service

看到在做parted -l 后就会起一个这个子进程的

在尝试关闭这个服务后,再做parted -l操作就不会出现自动启动进程

原因

执行parted -l 对指定设备发起parted命令的时候,就会对内核做一个trigger,而我们的

/lib/udev/rules.d/95-ceph-osd.rules

这个文件一旦触发是会去调用

/usr/sbin/ceph-disk --log-stdout -v trigger /dev/$name

也就是自动挂载加上启动osd的的操作了

可能带来什么困扰

其实这个我也不知道算不算bug,至少在正常使用的时候是没有问题的,以至于这个功能已经有了这么久,而我并没有察觉到,也没有感觉到它给我带来的干扰,那么作为一名测试人员,现在来构思一种可能出现的破坏场景,只要按照正常操作去做的,还会出现的,就是有可能发生的事情

cd /var/lib/ceph/osd/
[root@lab101 osd]# df -h|grep osd
/dev/sdf1 233G 34M 233G 1% /var/lib/ceph/osd/ceph-1
[root@lab101 osd]# systemctl stop ceph-osd@1
[root@lab101 osd]# umount /dev/sdf1
[root@lab101 osd]# parted -l &>/dev/null
[root@lab101 osd]# rm -rf ceph-1/
rm: cannot remove ‘ceph-1/’: Device or resource busy
[root@lab101 osd]# ll ceph-1/
total 0
[root@lab101 osd]# df -h|grep ceph
/dev/sdf1 233G 33M 233G 1% /var/lib/ceph/osd/ceph-1

可以看到除了上面的parted -l以外,其他操作都是一个正常的操作,umount掉挂载点,然后清理掉这个目录,然后数据就被删了,当然正常情况下也许没人在正好那个点来了一个parted,但是不是完全没有可能

还有种情况就是我是要做维护,我想umount掉挂载点,不想进程起来,执行parted是很常规的操作了,结果自己给我拉起来了,这个操作应该比较常见的

如何解决这个情况

第一种方法

什么都不动,你知道这个事情就行,执行过parted后再加上个df多检查下

第二种方法

systemctl stop systemd-udevd

这个会带来其他什么影响,暂时不好判断,还没深入研究,影响应该也只会在硬件变动和一些udev触发的需求,不确定的情况可以不改,不推荐此方法

第三种方法

不用这个/lib/udev/rules.d/95-ceph-osd.rules做控制了,自己去写配置文件,或者写fstab,都可以,保证启动后能够自动mount,服务能够正常启动就可以了,个人从维护角度还是偏向于第三种方法,记录的信息越多,维护的时候越方便,这个是逼着记录了一些信息,虽然可以什么信息也不记

总结

其实这个问题梳理清楚了也还好,最可怕的也许就是不知道为什么,特别是觉得完全不搭边的东西相互起了关联,至少在我们的研发跟我描述这个问题的时候,我想的是,还有这种神操作,是不是哪里加入了钩子程序什么的,花了点时间查到了原因,也方便在日后碰到不那么惊讶了

ceph北京大会已经顺利开完了,等PPT出来以后再学习一下新的东西,内容应该还是很多的,其实干货不干货,都在于你发现了什么,如果有一个PPT里面你提取到了一个知识点,你都是赚到了,何况分享的人并没有告知的义务的,所以每次看到有分享都是很感谢分享者的

变更记录

Why Who When
创建 武汉-运维-磨渣 2018-03-23

parted会启动你的ceph osd,意外不?的更多相关文章

  1. Ceph osd启动报错osd init failed (36) File name too long

    在Ceph的osd节点上,启动osd进程失败,查看其日志/var/log/ceph/ceph-osd.{osd-index}.log日志,报错如下: 2017-02-14 16:26:13.55853 ...

  2. 处理Ceph osd的journal的uuid问题

    前言 之前有一篇文章介绍的是,在centos7的jewel下面如果自己做的分区如何处理自动挂载的问题,当时的环境对journal的地方采取的是文件的形式处理的,这样就没有了重启后journal的磁盘偏 ...

  3. ceph osd 自动挂载的N种情况

    直接上干货: ceph自动挂载原理 系统启动后,ceph 通过扫描所有磁盘及分区的 ID_PART_ENTRY_TYPE 与自己main.py中写死的osd ready 标识符来判断磁盘(及其分区)是 ...

  4. Ceph osd故障恢复

    1  调高osd的日志等级 加上红框那一行就可以了 osd的日志路径:/var/log/ceph/ceph-osd.3.log 注意:加上了这一行后日志会刷很多,所以要特别注意日志容量的变化,以防把v ...

  5. 怎样禁止Ceph OSD的自动挂载

    前言 本篇来源于群里一个人的问题,有没有办法让ceph的磁盘不自动挂载,一般人的问题都是怎样让ceph能够自动挂载,在centos 7 平台下 ceph jewel版本以后都是有自动挂载的处理的,这个 ...

  6. Ceph OSD服务失效自动启动控制

    前言 服务器上面的服务会因为各种各样的原因失败,磁盘故障,权限问题,或者是服务过载引起超时,这些都可能引起 这个在ceph里面systemctl unit 默认有个on-fail restart,默认 ...

  7. Ceph OSD从filestore 转换到 bluestore的方法

    前言 前段时间看到豪迈的公众号上提到了这个离线转换工具,最近看到群里有人问,找了下没什么相关文档,就自己写了一个,供参考 实践步骤 获取代码并安装 git clone https://github.c ...

  8. 无法启动MYSQL服务”1067 进程意外终止”解决办法

    原文:http://www.111cn.net/database/mysql/48888.htm   本文章主要是总结了各种导致mysql提示无法启动MYSQL服务"1067 进程意外终止& ...

  9. 分布式存储ceph——(5)ceph osd故障硬盘更换

    正常状态:

随机推荐

  1. bootStrap小结2

    <!DOCTYPE html> <html lang="en"> <head> <meta http-equiv="Conten ...

  2. Codeforces Round #676 (Div. 2) A - D个人题解(E题待补)

    1421A. XORwice 题目链接:Click Here // Author : RioTian // Time : 20/10/18 #include <bits/stdc++.h> ...

  3. centos使用上一条命令的快捷键

    使用上一条的最后一个参数 有时需要连续多个命令操作一个路径很长的文件: cat /usr/share/doc/centos-release/GPL 下一个命令可能还要使用这个路径,即使有命令补全也会很 ...

  4. 为iOS编译FFmpeg静态库

    为iOS编译FFmpeg静态库 
 环境:OS X Yosemite (版本10.10.5) Xcode (Version 7.1.1 (7B1005)) 
 
 一.资料准备: (1)ffmpeg源 ...

  5. 记一次flink入门学习笔记

    团队有几个系统数据量偏大,且每天以几万条的数量累增.有一个系统每天需要定时读取数据库,并进行相关的业务逻辑计算,从而获取最新的用户信息,定时任务的整个耗时需要4小时左右.由于定时任务是夜晚执行,目前看 ...

  6. ThreadLocal与Thread与Runable之间的关系

    ThreadLocal继承Object,相当于没继承任何特殊的. ThreadLocal没有实现任何接口. ThreadLocal并不是一个Thread,而是Thread的局部变量

  7. 线程池CachedThreadPool

    没有核心线程,只有非核心线程,并且每个非核心线程空闲等待的时间为60s,采用SynchronousQueue队列 由于maximumPoolSize是无界的,所以如果线程处理任务速度小于提交任务的速度 ...

  8. Qt导入CMakeLists.txt后无法调试

    问题: Qt导入CMakeLists.txt后无法单步调试 解决方法: 在CMakeLists.txt后加入一句: SET(CMAKE_BUILD_TYPE DEBUG)

  9. exe打包成安装文件(界面美观)

    前言 在开发windows桌面应用过程中,软件交付时,一般都是交付安装包. 安装文件的优点 显得更正规,安装界面也可展示软件特点介绍,可自动生成桌面图标等: 安装包体积要比软件小,方便下载. 探索之路 ...

  10. 关于transition中嵌套keep-alive的问题解决

    需求:在使用keep-alive的同时使用transition动画效果 最开始是这样写的,但是发现报错,而且动画效果失效 <transition name="container-rig ...