月度归档:2014年07月

perl one-liners explained 中文版 (二)行计数

perl one-liners explained,是继《Famous Awk One-Liners Explained》和《Famous Sed One-Liners Explained》,后Peteris Krumin推出的又一个系列文章,并已经出书了。本blog会陆续对其进行翻译成中文,以便大家学习。

原文地址:http://www.catonmat.net/download/perl1line.txt

原书blog地址:http://www.catonmat.net/blog/perl-book/

本翻译项目地址:https://github.com/bollwarm/perlonelinecn

继续阅读

Linux内核报错日志与硬盘I/O故障对应关系/zz/

 

 

日志信息 故障现象描述 与硬盘关系
scsi1: ERROR on channel 0, id 7, lun 0, CDB: Read (10) 00 73 fc 62 bf 00 00 80 00

Info fld=0x73fc6326, Current sdi: sense key Medium Error

Additional sense: Unrecovered read error

SMART规范定义“Medium Error”错误是一种不可恢复的错误,可能由于介质的缺陷或记录的数据错误。该错误有别于“Hardware Error”。

出现Medium Error的主要原因是硬盘坏,或者硬盘的数据无法读写。

  1. 硬盘扇区坏
  2. 硬盘与磁盘控制器连接信号质量不稳定,导致数据出现异常
mptbase: ioc1: IOCStatus=804b LogInfo=31080000

Originator={PL}, Code={SATA NCQ Fail All Commands After Error}, SubCode(0×0000)

原生指令排序(Native Command Queuing,简称NCQ),原先是改善服务器硬盘存取控制技术,应用在SCSI和SATA 1.0/2.0/3.0接口硬盘读写的加速技术,其接口开启磁盘阵列RAID亦有所提升。透过硬盘固件、硬盘控制器以及操作系统三者的互相配合,改善硬盘内部磁区的读取顺序,可以提高硬盘效能约30%,亦能够轻微减轻硬盘损耗的速率。NCQ对用于服务器上的硬盘的效率提升尤为明显。

PL:Protocol Layer,指磁盘控制器中的协议层

该信息与硬盘是否故障无直接联系
end_request: I/O error, dev sdi, sector 1945920256

EXT2-fs error (device sdi1): read_inode_bitmap: Cannot read inode bitmap – block_group = 222, inode_bitmap = 14547217

EXT2-fs error (device sdi1): ext2_get_inode: unable to read inode block – inode=951895, block=15202501

内核不能从硬盘上的文件系统读取数据。
  1. 硬盘扇区坏。
  2. 硬盘与磁盘控制器连接信号质量不稳定,导致数据出现异常。
mptbase: ioc1: IOCStatus=8000 LogInfo=31110d00

Originator={PL}, Code={Reset}, SubCode(0x0d00)

mptbase: ioc1: IOCStatus=804b LogInfo=31110d00

Originator={PL}, Code={Reset}, SubCode(0x0d00)

驱动准备让磁盘控制器IOC单元复位,出现该操作原因为驱动发现多次读写硬盘数据失败。

IOCStatus=0×8000

磁盘控制器配置页面处于共享的递归方式。

IOCStatus=0×8048

尝试读取不存在的超级配置数据。

IOCStatus=0x804b

超级数据序列号由0xffffffff变为0

该信息不能作为硬盘故障的依据。打印该信息的原因,与硬盘/磁盘控制器IOC单元/硬盘与控制器之间的链路有关。IOC错误码含义见前面。
mptscsih: ioc1: attempting task abort! (sc=000001007b4cf340)

scsi1 : destination target 8, lun 0

command = Read (10) 00 5f 2a 4d 3f 00 10 00 00

磁盘控制器驱动尝试取消读写任务。本示例代码中,表明取消在target 8,lun 0的读数据任务。 该信息与硬盘是否故障无直接联系
mptbase: ioc1: IOCStatus=8048 LogInfo=31130000

Originator={PL}, Code={IO Not Yet Executed}, SubCode(0×0000)

磁盘控制器驱动报告报告当前IOC(I/O Controller)单元状态码 该信息与硬盘是否故障无直接联系
mptscsih: ioc1: task abort: SUCCESS (sc=000001007b4cf340) 磁盘控制器驱动报告读写任务取消成功 该信息与硬盘是否故障无直接联系
mptscsih: ioc1: attempting target reset!

mptscsih: ioc1: attempting bus reset! (sc=000001007b4cf340)

mptscsih: ioc1: Attempting host reset! (sc=000001007b4cf340)

mptbase: Initiating ioc1 recovery

磁盘控制器驱动尝试复位target/bus/host,并重新恢复IOC(I/O Controller)单元 该信息不能作为硬盘故障的依据。打印该信息的原因,与硬盘/磁盘控制器IOC单元/硬盘与控制器之间的链路有关。
scsi: Device offlined – not ready after error recovery: host 1 channel 0 id 8 lun 0 硬盘offline,硬盘的位置为host 1 channel 0 id 8 lun 0 硬盘处于故障状态或丢失
SCSI error : <1 0 8 0> return code = 0×10000

end_request: I/O error, dev sdj, sector 1596607807

scsi1 (8:0): rejecting I/O to offline device

SCSI层报告在host 1 channel 0 id 8 lun 0设备上读写错误,返回码为0×10000,表明设备已不在位。 硬盘处于故障状态或丢失
mptsas: ioc1: attaching sata device, channel 0, id 11, lun 0, phy 0 系统新加入新的硬盘,硬盘所在位置为phy 0,即第一个物理槽位。 插入新的硬盘
mptsas: ioc0: removing sata device, channel 0, id 21, phy 2 从系统中拔掉一块硬盘,硬盘对应的物理位置为phy 2,即第3个物理槽位。 拔除一块硬盘
Remounting filesystem read-only 文件系统变为只读,原因为文件系统遭到破坏 与硬盘是否故障无直接关系

 

iptables基础知识详解/zz/

 

iptables防火墙可以用于创建过滤(filter)与NAT规则。所有Linux发行版都能使用iptables,因此理解如何配置iptables将会帮助你更有效地管理Linux防火墙。如果你是第一次接触iptables,你会觉得它很复杂,但是一旦你理解iptables的工作原理,你会发现其实它很简单。

继续阅读

perl one-liners explained 中文版 (一)行距

perl one-liners explained,是继《Famous Awk One-Liners Explained》和《Famous Sed One-Liners Explained》,后Peteris Krumin推出的又一个系列文章,并已经出书了。本文会陆续对其进行翻译成中文,以便大家学习。

原文地址:http://www.catonmat.net/download/perl1line.txt

原书blog地址:http://www.catonmat.net/blog/perl-book/

本翻译项目地址:https://github.com/bollwarm/perlonelinecn

继续阅读

rex点滴

显示任务执行信息,去掉过程和错误信息

rex -qw uptime

把执行结果存到文件中

rex -qw uptime | tee -a info.log

指定主机执行

rex -qw -H ‘192.168.1.1 192.168.1.2’ uptime

继续阅读

rex安装

(R)?ex 是一个不需要在受控主机运行客户端的服务器流程工具。它采用 ssh 方式来执行指定的命令。

开始使用 (R)?ex 并不需要 Perl 基础。(R)?ex 提供了简单的 DSL 来描述你的服务器。甚至,你可以在你的 shell 脚本里使用 (R)?ex,完全不需要使用 perl。

继续阅读