targetcli读取prefs.bin出错的问题的解决方法

简介:

    targetcli是建立起LIO用来把后台的存储资源映射给initiator的重要工具,它下面通过python rtslib实现和iscsi(linux下对应iscsi_target_mod.ko驱动)和HBA卡(linux下对应tcm_qlax2xxx.ko驱动)等介质的交互,进而向initiator 展现逻辑卷(LUN)。为此,熟悉掌握targetcli工具对于我们搭建SAN/NAS环境,非常有必要。在实际项目当中,由于各种原因,可能导致targetcli命令执行失败。可以阅读targetcli的python代码调用过程,分析问题并解决问题。

 

    笔者最近在使用targetcli 的过程中,碰到这样的错误:

 

[root@localhost ~]# targetcli

Traceback (most recent call last):

  File "/usr/bin/targetcli", line 122, in <module>

    main()

  File "/usr/bin/targetcli", line 77, in main

    shell = TargetCLI('~/.targetcli')

  File "/usr/lib/python2.7/site-packages/configshell/shell.py", line 167, in __init__

    self.prefs.load()

  File "/usr/lib/python2.7/site-packages/configshell/prefs.py", line 147, in load

    self._prefs = cPickle.load(fsock)

EOFError

 

刚开始怀疑版本问题,从正常运行的机器上重新拷贝了targetcli及其依赖的python库,问题依旧;重启机器和服务,现象还是没有得到解决。试图通过网上去搜索,也没有找到类似的现象。正在一筹莫展之际,突然注意到了错误提示中的一句话:

  File "/usr/bin/targetcli", line 122, in <module>

    main()

  File "/usr/bin/targetcli", line 77, in main

    shell = TargetCLI('~/.targetcli')

 

根据错误提示和下面的python源码,它好像是去访问./.targetcli目录,从里面加载一些缓存的偏好设置。

 

[root@localhost ~]# vim /usr/lib/python2.7/site-packages/configshell/shell.py +167

 wKiom1nCW_eTNHdvAACBRFGU_78530.png

 为此,直接进入目录,[root@localhost ~]# ls -arlt ~/.targetcli,检查下它到底有什么东西:

[root@localhost .targetcli]# pwd

/root/.targetcli

[root@localhost .targetcli]# ls -alrt

total 20

drwxr-xr-x.  2 root root   54 Aug  1 21:51 .

-rw-r--r--.  1 root root  503 Aug  1 21:51 prefs.bin

-rw-r--r--.  1 root root    8 Aug 11 06:57 history.txt

-rw-r--r--.  1 root root 7933 Sep  8 03:47 log.txt

dr-xr-x---. 41 root root 4096 Sep 20 07:32 ..

一看没有实际关键的内容,果断删除,然后重新运行targetcli:

[root@localhost ~]# targetcli

Warning: Could not load preferences file /root/.targetcli/prefs.bin.

targetcli shell version 2.1.fb37

Copyright 2011-2013 by Datera, Inc and others.

For help on commands, type 'help'.

 

/> ls

o- / ...................................................................................................................... [...]

  o- backstores ........................................................................................................... [...]

  | o- block ............................................................................................... [Storage Objects: 0]

  | o- fileio .............................................................................................. [Storage Objects: 0]

  | o- pscsi ............................................................................................... [Storage Objects: 0]

  | o- ramdisk ............................................................................................. [Storage Objects: 0]

  o- iscsi ......................................................................................................... [Targets: 0]

  o- loopback ...................................................................................................... [Targets: 0]

  o- qla2xxx ....................................................................................................... [Targets: 0]

/> exit

Global pref auto_save_on_exit=true

Last 10 configs saved in /etc/target/backup.

Configuration saved to /etc/target/saveconfig.json

好了,问题搞定! 这个问题,结合上面"EOFError ”来看,很可能是最近机器异常掉电导致prefs.bin文件损坏所致。


这个问题的解决给我的一个启迪是,了解了targetcli的后台实现层次之后,碰到问题,即便对不太熟悉的python,只有好好利用出错的输出和具体执行的脚本,仔细分析照样可以找到蛛丝马迹并解决问题。












本文转自存储之厨51CTO博客,原文链接:http://blog.51cto.com/xiamachao/1967263 ,如需转载请自行联系原作者

相关文章
IntelliJ IDEA小技巧,多光标同时输入
idea使用多光标多处同时输入的三个方法
|
API
禅道----禅道和Gitlab对接
禅道----禅道和Gitlab对接
3510 0
禅道----禅道和Gitlab对接
|
8月前
|
缓存 运维 监控
解决隐式内存占用难题
本文详细介绍了在云原生和容器化部署环境中,内存管理和性能优化所面临的挑战及相应的解决方案。
793 193
解决隐式内存占用难题
|
5月前
|
存储 弹性计算 监控
阿里云国际代理商购买无忧指南:如何省20%成本享专业服务
企业上云虽是数字化转型的必然选择,但高昂成本常让管理者犹豫。通过阿里云国际授权代理商采购,可享最高20%价格优惠及专业支持。文章解析代理商渠道价值、新用户购买指南、采购注意事项及长期成本管理策略,助企业通过正规渠道实现“购买无忧”,享受全生命周期技术支持与价格红利。选对合作伙伴,为未来竞争力投资。
|
监控 网络协议 Java
Tomcat源码解析】整体架构组成及核心组件
Tomcat,原名Catalina,是一款优雅轻盈的Web服务器,自4.x版本起扩展了JSP、EL等功能,超越了单纯的Servlet容器范畴。Servlet是Sun公司为Java编程Web应用制定的规范,Tomcat作为Servlet容器,负责构建Request与Response对象,并执行业务逻辑。
Tomcat源码解析】整体架构组成及核心组件
|
运维 负载均衡 监控
|
资源调度 JavaScript API
nest.js + sms 实现短信验证码登录
本文介绍了在Nest.js框架中集成短信验证码登录的实现方案,详细阐述了使用阿里云短信服务的配置流程、资质申请、短信模板设置,并提供了API调用示例和工程代码的运行步骤。
nest.js + sms 实现短信验证码登录
|
Ubuntu 网络协议 Linux
liunx各大发行版(centos,rocky,ubuntu,国产麒麟kylinos)网卡配置和包管理方面的区别
liunx各大发行版(centos,rocky,ubuntu,国产麒麟kylinos)网卡配置和包管理方面的区别
521 0
|
消息中间件 存储 Java
kafka 性能优化与常见问题优化处理方案
kafka 性能优化与常见问题优化处理方案
314 1