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

为此,直接进入目录,[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,只有好好利用出错的输出和具体执行的脚本,仔细分析照样可以找到蛛丝马迹并解决问题。

转载于:https://blog.51cto.com/xiamachao/1967263

targetcli读取prefs.bin出错的问题的解决方法相关推荐

  1. usr/bin/ld: cannot find 错误解决方法和 /etc/ld.so.conf

    usr/bin/ld: cannot find 错误解决方法和 /etc/ld.so.conf 参考文章: (1)usr/bin/ld: cannot find 错误解决方法和 /etc/ld.so. ...

  2. Navicat for MySQL连接MYSQL出错,错误代码1045的解决方法

    Navicat for MySQL连接MYSQL出错,错误代码1045的解决方法 参考文章: (1)Navicat for MySQL连接MYSQL出错,错误代码1045的解决方法 (2)https: ...

  3. 共享打印机出错,错误代码0x00000bcb解决方法汇总

    共享打印机出错,错误代码0x00000bcb解决方法汇总 参考文章: (1)共享打印机出错,错误代码0x00000bcb解决方法汇总 (2)https://www.cnblogs.com/xknigh ...

  4. mysql errno : 1146_MySQL_MySQL复制出错 Last_SQL_Errno:1146的解决方法,背景:我们在做数据迁移或者 - phpStudy...

    MySQL复制出错 Last_SQL_Errno:1146的解决方法 背景:我们在做数据迁移或者拆分的时候,使用Tablespace transcation 这种解决方案时,很有可能就会遇到 从库复制 ...

  5. 尝试连接到服务器时出错请检查虚拟机管理器,Hyper-V尝试连接到服务器出错无效类的解决方法...

    Hyper-V尝试连接到服务器出错无效类的解决方法 Windows10安装Hyper-V后没有自动连接到本地计算机,手工连接失败,提示: 引用内容 尝试连接到服务器"DESKTOP-6P9L ...

  6. musicstore edit方法出错的原因和解决方法

    musicstore edit方法出错的原因和解决方法 参考文章: (1)musicstore edit方法出错的原因和解决方法 (2)https://www.cnblogs.com/wusong/a ...

  7. mysql errno 1146_Mysql学习MySQL复制出错 Last_SQL_Errno:1146的解决方法

    <MysqL学习MysqL复制出错 Last_sql_Errno:1146的解决方法>要点: 本文介绍了MysqL学习MysqL复制出错 Last_sql_Errno:1146的解决方法, ...

  8. mysql导出数据库1146_MySQL复制出错 Last_SQL_Errno:1146的解决方法

    这篇文章主要介绍了MySQL复制出错 Last_SQL_Errno:1146的解决方法,需要的朋友可以参考下 背景:我们在做数据迁移或者拆分的时候,使用Tablespace transcation 这 ...

  9. 上传word文档显示服务器出错,打开office出错的几种解决方法

    打开office出错的几种解决方法 互联网   发布时间:2008-10-04 19:36:44   作者:佚名   我要评论 打开Office出错,比如无法打开Office文件.无法打开有密码保护的 ...

最新文章

  1. html中Marquee属性详解
  2. python四十三:静态属性,类方法
  3. 电脑内部,小贴士:电脑内部连接标准
  4. Google 的 C++ 代码规范
  5. springboot listener_看完这份springboot 全套面试提升宝典,面试不带怕的
  6. 怎样挑选最健康的酸奶?
  7. I.MX6 android 获取framebuffer信息
  8. zabbix 自动发现
  9. zk 加载 html 标签,HTML字符实体——ZK支持字符
  10. mysql按条件提取数据库_UIPath中级系列一之读取MySQL记录集
  11. r语言列表添加元素_技术贴 | R语言:geom_smooth在散点图中添加多条回归直线
  12. Crontab 实例
  13. myline java线段类,MyLine 编写一个线段类 MyLine 联合开发网 - pudn.com
  14. 计算机log是代表什么,Log是什么文件?Log文件可以删除吗?
  15. word 在试图打开时遇到错误 以及word文档的修复
  16. 深入探讨PageRank(四):PageRank的危机及搜索引擎的未来
  17. android 倒水动画,Android 模拟圆形水杯倒水的效果
  18. 2016依然会给我惊喜,谢谢
  19. 《酬乐天扬州初逢席上见赠》
  20. Safari安装使用JsonView插件

热门文章

  1. c与python的区别-C++/C/JAVA/Python之间的区别?
  2. python网课一般多少钱-学习python的时候观看网课学习还是买书学习效率高?
  3. python读取中文txt文本-python读取中文txt文本的方法
  4. elasticsearch之查询扩展
  5. tcpdump的使用
  6. epoll和select区别
  7. NYOJ 110 剑客决斗
  8. 操作系统 实验三 进程调度模拟程序
  9. IDEA 回滚SVN更新内容
  10. bzoj1002 生成树计数 找规律