1. 问题描述

阿里公有云启动了一台ECS虚拟机用来作为ISCSI Server服务端,通过iscsi服务共享了一个20G的块设备给公司内部的一台CentOS7机器,但是在执行块设备发现挂载的时候发现一直卡住,日志也没有具体的输出,很是奇怪。

  • 环境信息
# iscsi client
# CentOS7 系统内部安装了docker服务,其实是docker容器内部的服务去发起连接iscsi server的请求,并非宿主机# iscsi server
# CentOS7

2. 分析思路

2.1. 排查iscsi连接配置

一般出现这种情况,无非就两种情况,

第一种就是iscsi server在执行targetcli分配时配置的client端的acls错误,与iscsi 客户端不一致导致的,因为iscsi server主要是通过acls来控制client的访问挂载,可以理解为是一个连接密钥,

另一种就是iscsi server在分配client端的时候还是配置了用户名、密码的认证加密,这个时候其实就是防止iscsi client的initiatorname被其他机器获取配置使用,这样只要配置了这个initiatorname,所有的iscsi client都可以认证通过挂载使用这个块设备,不太安全,所以可以另外在iscsi server分配的时候加入用户名、密码的二次认证,就是避免出现前边的这个问题。

但是根据以上两种情况,都经过分析检查,并没有配置错误,而且这次的问题是卡住,如果是上面的问题其实会有具体的报错提示信息,而不是一直连接卡住的情况,所以排除这个问题;

2.2. 排查iscsi 服务版本

前面我们提到其实iscsi client是一台CentOS7的操作系统,系统安装了docker容器服务,其实是容器服务内部的iscsi客户端发起的连接请求,容器其实最终使用的内核的模块还是用的宿主机的,这里能想到的就是,宿主机的iscsi服务有没有启动以及版本是多少

  • 宿主机的iscsi服务及iscsi版本

    宿主机的iscsid服务是正常启动的状态,应该没什么问题

宿主机的iscsi的版本,这里查看我们先看下iscsiadm指令来自于那个安装以及它的版本

[root@vmware-proxy ~]# which iscsiadm
/usr/sbin/iscsiadm
[root@vmware-proxy ~]# rpm -qf /usr/sbin/iscsiadm
iscsi-initiator-utils-6.2.0.874-22.el7.x86_64


然后又查询了一下docker容器内部的iscsi服务的版本,这里发现宿主机和容器内部的iscsi client的版本不一致,是差了一个小release版本,这里我们试下把版本给同化,把宿主机的iscsi-initiator-utils rpm包降级一下变成iscsi-initiator-utils-6.2.0.874-17版本;

3. iscsi服务版本降级

先将宿主机的iscsi client的包卸载掉,iscsi-initiator-utils 这个是主包还依赖于其他一个包 iscsi-initiator-utils-iscsiuio,需要都卸载掉,然后在整体安装这两个包。

3.1. 卸载iscsi client包

这里要注意一点,需要记录下来/etc/iscsi/initiatorname.iscsi文件的值,因为卸载之后这个文件会被重置,新安装的iscsi client版本会重新生成,这样iscsi server端不然还需要重新修改,直接保持client不变最简单。

# yum remove iscsi-initiator-utils iscsi-initiator-utils-iscsiuio

3.2. 安装新版本iscsi client包

直接在互联网找到和docker容器内部相同版本的client包,直接执行安装即可。

还原iscsi initiatorname的配置

# cp /tmp/initiaitorname.iscsi > /etc/iscsi/initiatorname.iscsi
# rpm -ivh ftp://ftp.pbone.net/mirror/vault.centos.org/7.7.1908/cr/x86_64/Packages/iscsi-initiator-utils-6.2.0.874-17.el7.x86_64.rpm ftp://ftp.pbone.net/mirror/vault.centos.org/7.8.2003/os/x86_64/Packages/iscsi-initiator-utils-iscsiuio-6.2.0.874-17.el7.x86_64.rpm

4. 重启iscsid服务及容器服务

宿主机新的iscsi client安装完成之后,就可以重启宿主机的iscsid服务,并且将docker iscsi client的容器服务也进行重启操作,重启完成后再次进行连接发现可以正常连接iscsi server分配的块设备,并没有出现卡住的情况。

最终分析问题是因为操作系统宿主机的iscsi client版本与docker容器内部安装的iscsi client版本不一致导致的,所以大家在docker容器内部使用iscsi client时如果出现相同卡住的问题,需要排查下宿主机与容器内部的版本,如果不一致,按照以上操作方法让其保持一致基本可以解决卡住的问题。

ISCSI 客户端远程挂载块设备卡住相关推荐

  1. Linux内核块设备总结(一)

    前言 在分析块设备驱动之前,整体规划如下: 1. 介绍qemu使Linux内核挂载块设备.2. 介绍块设备驱动挂载过程.3. 介绍块设备驱动运行过程. 本章先重点介绍使用qemu使Linux内核和根文 ...

  2. Linux内核:一文读懂文件系统、缓冲区高速缓存和块设备、超级块

    目录 前言 第一部分 Linux文件系统堆栈 VFS数据结构 文件系统初始化顺序 Dentries 打开文件-说起来容易做起来难! 虚拟文件系统 前言 第二部分 Linux文件系统堆栈 当我们键入&q ...

  3. Ceph使用块设备完整操作流程

    Ceph使用块存储,系统内核需要3.0及以上的内核,以支持一些ceph模块. 创建块的时候可以指定类型(type1和type2),只有type2的可以对快照进行保护,保护以后才能做克隆.   使用块设 ...

  4. Ceph集群搭建系列(六):RBD块设备的使用场景、原理分析及其创建

    一.前言 下图数据出自2018年ceph社区用户调查报告,Ceph RBD接口的使用场景主要是VM和DB数据库. 而使用Ceph RBD的接口方式的用户数据如下,主要是librbd 和 kernel ...

  5. 十六、Linux驱动之块设备驱动

    1. 基本概念 块设备是Linux三大设备之一,其驱动模型主要针对磁盘,Flash等存储类设备,块设备(blockdevice)是一种具有一定结构的随机存取设备,对这种设备的读写是按块(所以叫块设备) ...

  6. Linux创建虚拟块设备并格式化为文件系统

    环境 为了方便学习文件系统的原理和原始数据的分析,需要创建虚拟块设备并格式化为ext4文件系统: Linux创建虚拟块设备 losetup命令     -a 显示所有已经使用的回环设备状态     - ...

  7. linux三大驱动类型:字符设备、块设备、网络设备

    1. 字符设备 字符设备指能够像字节流串行顺序依次进行访问的设备,对它的读写是以字节为单位.字符设备的上层没有磁盘文件系统,所以字符设备的file_operations成员函数就直接由字符设备驱动提供 ...

  8. Linux操作系统学习笔记(十四)块设备

    一. 前言   上文我们分析了字符设备,本文接着分析块设备.我们首先分析块设备的基本结构体,然后分析块设备生成.加载的整个过程,最后分析块设备的直接I/O访问和缓存I/O访问. 二. 块设备基本结构体 ...

  9. Linux驱动笔记-字符设备,块设备,网络设备

      在Linux设备驱动开发中,粗略的将设备分为三种类型:字符设备,块设备和网络设备. 1.字符设备:指能够像字节流串行顺序依次进行访问的设备,对它的读写是以字节为单位.字符设备的上层没有磁盘文件系统 ...

  10. 分布式块设备复制:客户端

    分布式块设备复制,英文名称 Distributed Replicated Block Device,简称为 DRBD,它是一种由应用引导内核驱动工作.基于网络的块复制存储解决方案,主要用于服务器之间的 ...

最新文章

  1. python turtle什么意思_Python turtle shape和
  2. Topless eclipse导入myeclipse的web项目没法识别问题解决
  3. Boost:bind绑定和或||的测试程序
  4. 使用yum安装CDH Hadoop集群
  5. C# 压缩Access数据库(转)
  6. 《我们应当怎样做需求分析》阅读笔记
  7. mysql汽车租赁管理系统
  8. 爱心动画c语言,jquery+html5烂漫爱心表白动画代码分享
  9. mysql 等距随机_随机起点对称等距抽样公式的简便运用
  10. deepin回收站无法清空
  11. matlab三个商人三个随从,商人们怎样安全过河 (附MATLAB程序完整)
  12. springboot2.3整合mybatis-plus3.3.2较为详细的教程
  13. 大三,请问现在自学Java还来得及吗?
  14. C++ 双指针汇总(快慢指针, 滑动窗口, 前后指针,左右指针)
  15. python读取excel(读写处理xls或xlsx)
  16. 使用openfeign调用报错java.io.IOException: too many bytes written,以及调用过程中参数传递为空等问题
  17. 云原生改造的实现路径
  18. 谷歌移动端seo优化如何做
  19. 用7za解压文件失败的原因分析
  20. Zabbix监控Ceph的两种实现方式

热门文章

  1. [每日学习3.26/3.27] 游戏研发面经学习 - 阿V
  2. 常用导数与等价无穷小
  3. 软件开发成本构成及评估
  4. 数据结构基础知识——非线性数据结构(二叉树、二叉排序树、优先队列、散列表)
  5. Linux 克隆虚拟机引起的“Device eth0 does not seem to be present, delaying initialization”
  6. 救命稻草VirtualBox,失之交臂VMware—— 2者的guest OS对 恒通笔记本并口卡的支持
  7. 小特工具箱新增功能:文档转换、代码转换和AI写诗词
  8. 理解SVM的三重境界
  9. [国家集训队]Tree I
  10. 线性插值公式简单推导