Work diary on 2014

2014-12-31

  • check dmesg, “device eth2 entered promiscuous mode”, Promiscuous mode is when
    your ethernet card accepts ALL traffic it receives. It’s used when you’re
    running a program like Wireshark to listen to the network
    dmesg中出现”eth2进入混合模式”,是因为使用了tcpdump抓包
  • Tshark
  • 超级详细Tcpdump 的用法
  • linux route命令使用
  • 精度最好在300dpi?
    dpi是指单位面积内像素的多少,也就是扫描精度,目前国际上都是计算一英寸面积内
    像素的多少。web上使用的图片都是72dpi,但是冲洗照片不能使用这个参数,必须是300
    dpi或者更高350dpi。例如要冲洗46英寸的照片,扫描精度必须是300,那么文件尺寸
    应该是(4
    300)(6300)=1200像素*1800像素
  • download Emulex linux driver
    • http://www.emulex.cn/downloads/emulex/drivers/linux/rhel-6-centos-6/drivers/
    • wget http://www-dl.emulex.com/support/elx/rt10.2.9/ga/Linux/driver-source/be2net-10.2.470.14-1.src.rpm
    • 安装新驱动
      • rpm -ivh be2net-10.2.470.14-1.src.rpm
      • cd rpmbuild/SOURCES
      • tar xvf be2net-10.2.470.14.tar.gz
      • cd be2net-10.2.470.14
      • make
      • cp /lib/modules/2.6.32-279.el6.x86_64/kernel/drivers/net/benet/be2net.ko{,.bak}
      • cp ./be2net.ko /lib/modules/2.6.32-279.el6.x86_64/kernel/drivers/net/benet/be2net.ko
      • modinfo be2net
      • reboot
      • ethtool -i be2net
  • 解析一个参数项多个值的的getopt_long函数的扩展

2014-12-30

  • Emulex 10G NIC test, 只有100MB/s左右,为什么跟之前的其他万兆网卡性能差那么大?
    • 130.17(123qwe[123]qwe), Emulex, Windows Server 2008 R2
    • 130.7 ([1234qwer]1234qwer)
    • 130.158
    • single client: Emulex 100MB/s
    • Two client: Emulex 60MB/s, Intel 200MB/s
    • 查看130.17的网络和CPU情况,没有发现异常
    • 查看130.158暂时无异常
    • 明天再详查
  • targetcli Mutual CHAP跟CHAP有什么区别?
  • targetcli 设置CHAP登陆: acls中创建wwn, 设置用户名和密码
    • acls/ create iqn.1991-05.com.microsoft:ibm-t410s
    • cd acls/iqn.1991-05.com.microsoft:ibm-t410s
    • set auth userid=iqn.1991-05.com.microsoft:ibm-t410s
    • set auth password=mytargetsecret
    • reference http://linux-iscsi.org/wiki/ISCSI
  • targetcli for ISCSI
  • targetcli 命令
    • cd, 切换路径
    • ls, 查看当前路径的所有节点
    • info, 当前路径的信息
    • status, 当前路径的状态
    • get, 获取参数
    • set, 设置参数
    • create,创建
    • delete, 删除
    • bookmarks, 标签操作
    • enable
    • disable
    • sessions
    • saveconfig, 保存操作到配置文件(/etc/target/saveconfig.json), 这样重启后仍然有效
    • pwd, 打印当前路径
    • refresh, 刷型当前路径节点信息
    • exit, 退出
    • help, 如果不知道在当前路径有哪些命令可用,可以使用help. 而如果想指定命令的
      用法,就使用help command
  • targetcli 使用get命令获取组信息,如果不知道具体有哪些group,可以这样操作:
    • [root@localhost src]# targetcli /iscsi/ get
      AVAILABLE CONFIGURATION GROUPS  
      ==============================  
      global discovery_auth  
      
    • [root@localhost src]# targetcli /iscsi/ get discovery_auth

2014-12-29

  • LIO集成ustor编码
    • sector该如何在targetcli中设置?
  • 合并wireshark使用教程pdf为一个pdf
    • pdftk wireshark.pdf wireshark-4.pdf wireshark-5.pdf cat output wireshark-10in1.pdf

2014-12-28

  • 内存究竟有多快
    • 内存的时间是ns级别
    • 磁盘的时间是ms级别
      • 磁盘的访问时间=寻道时间+旋转延迟+数据传输时间。
      • 对于普通的7200转SATA磁盘。这个值是:9ms+4ms+0.02ms=13.02ms。
    • http://www.yankay.com/内存究竟有多快?/

2014-12-27

  • tcpdump -i eth0 -w /tmp/tcpdump.cap
  • Motion is a program that monitors the video signal from cameras. It is able
    to detect if a significant part of the picture has changed; in other words,
    it can detect motion.
  • MSS, MTU
    • MTU, Maxitum Transmission Unit, 最大传输单元
    • MSS, Maxitum Segment Size, 最大分段大小
      • MSS就是TCP数据包每次能够传输的最大数据分段
    • MTU=MSS+IP header+TCP header+链路层开销+加密报文头(某些程序加密强度不一样)
    • MTU & MSS 详解记录
  • TCP延迟确认, Nagle算法
    • 延迟确认:
      • 如果收到一个包后(request)暂时没有数据要发给对方,就延迟发送确认(response)
        在windows上一般会延迟200毫秒左右
      • 如果收到一个包后(request)有数据要发给对方,就确认信息和数据一起发给对方
    • Nagle算法:
      • 如果发出去的数据还没有被确认(还没接收到response),这时有很多小数据生成,
        就把小数据收集起来,丑满一个MSS或等收到确认后再发送。
  • portmap
  • show offload information, using command ethtool -k interface
    • [root@Ustor ~]# ethtool -k eth2
      Offload parameters for eth2:  
      rx-checksumming: on  
      tx-checksumming: on  
      scatter-gather: on  
      tcp-segmentation-offload: on  
      udp-fragmentation-offload: off  
      generic-segmentation-offload: on  
      generic-receive-offload: off  
      large-receive-offload: off  
      
    • ethtool -K eth2 gro off
    • ethtool -K eth2 lro off
    • ethtool -K eth2 tso off
  • 一些Linux系统服务调优/问题定位技巧
    • 调优 - 系统比较,
      • sysctl -a 系统配置
      • ps -ef
      • ps auxf 显示父子进程的树状关系
      • ps -eLF 可以显示到线程
    • 网络问题(慢、卡)定位
      • 看网络质量 使用ping命令,参数 -l 指定包大小,-n 指定包数,-f 洪水发包,看丢包情况,了解网络质量。
      • 看路由信息 例如:mtr -r –c www.baidu.com 或 traceroute -n www.baidu.com ,一看便知。
      • 看Socket统计信息 ss -s
      • 看开启的网络端口 ss -l
      • 看进程开启的网络端口 ss –pl
      • 看抓包 tcpdump,分析网络抓包是个精细活……
      • 看客户端Http请求回放 建立服务端:nc –l 8888,然后要求客户端访问:http://(serverhost):8888
        即可在服务端收到客户端的Http请求,分析其请求头信息,可以发现客户端的问题
  • Linux的TCP协议参数,
  • Windows的TCP协议参数
    • 注册表编辑器:regedit
    • 表项:HKEY_LOCAL_MACHINE\SYSTEM\CurentControlSet\Services\Tcpip\Parameters
      • “EnablePMTUBHDetect”=dword:00000000
      • “EnablePMTUDiscovery”=dword:00000001
      • “SackOpts”=dword:00000001 1表示开启SACK
      • “Tcp1323Opts”=dword:00000001
    • http://www.2cto.com/os/201309/243075.html
  • 传输层学习之五(TCP的SACK,F-RTO)
  • 腾讯云-块存储深度剖析
  • 周六公司加班(10:00 ~ 19:00)

2014-12-26

  • EMC存储系统
  • EMC 存储入门必读-存储基础知识(2014年12月15日更新)
  • 一站式学习Wireshark
  • NAS性能调优
    • 是否存在包乱序(Out-Of-Order)
    • 是否存在包重传(retransmission)
      • RFC里这样定义: 如果发送方收到三次以上的“我要的是X”,即可认为包X丢失,立即启动快速重传。
    • NAS性能优化实例
    • 一般存储都是读比写快
    • 网络很值得怀疑。写操作时数据从1G网络流向10G网络,如同小河水流入大河,自然
      是非常通畅。读操作时数据从10G网络流向1G网络,如同大河水流入小河,很可能导
      致拥塞,从而带来严重的性能下降。
    • RFC2018在1996年已经给出了解决方案,就是Selective Acknowledgment,简称SACK。
      在接收方和发送方都启用SACK的情况下,接受方可以告诉发送方“我没受到0,但是收
      到了1460-8760”。这样发送方只要重传Seq=0即可。
    • 另一个性能调优案例
    • smb 1 (从3到6要进行4次网络通讯)
        1. 客户端:我想读某文件。
        1. NAS: 你有权限,读吧。
        1. 客户端:先读64KB。
        1. NAS:给你64KB。
        1. 客户端:再读接下来的64KB。
        1. NAS:给你64KB。
    • smb 2 (从3到6只要进行2次网络通讯)
        1. 客户端:我想读某文件。
        1. NAS: 你有权限,读吧。
        1. 客户端:先读64KB。
        1. 客户端:再读接下来的64KB。
        1. NAS:给你64KB。
        1. NAS:给你64KB
    • 客户端每次读的数据大小,也会影响到性能. 64KB是一个比较好的数值
    • 另外一个性能影响因素是服务器的响应时间。对于读操作,最常用的优化方式是启用“prefetch”
    • NFS共享在使用前需要挂载(mount)。挂载时使用的参数很大程度上影响了读写的性能
        1. TCP or UDP
        1. rsize和wsize,每次读写的最大值
        1. sync和async. sync参数会强制wsize变成4KB,这会大大降低写性能。
    • NAS性能优化之一
    • 在局域网里的往返时间(RTT)很短,读写的总时间其实大多消费在服务器的响应上
    • TCP有两种机制来实现重传:超时重传和快速重传
    • TCP对性能的影响因素
      • TCP滑动窗口
      • 多线程
      • 超时重传时间(RTO):这是一个动态值。RFC规定了计算该值的方法,但是结果比
        较大,已经不适用当今的网络环境了。有些NAS(比如Celerra)提供一个设置,允许强制把该值改小。
      • Jumbo Frame
      • 网络拥塞; 把TCP滑动窗口强制在拥塞点以下。宁愿每次少传一点,也不要丢包
    • NAS性能优化之二
  • usnmp,提交2014-10-21的修改(解决snmp获取磁盘组(dg)容量错误)到svn
  • shc 问题has expired! Please contact your provider
    • 经过测试,在VDI环境中,发现执行shc -rT -f test.sh, 每次得到的test.sh.x的大
      小都不一样,有时候可以正确运行,有时候就会出现上面的错误。
    • 试一试在外面的机器执行shc看看, 还要挂载iso,然后yum安装,麻烦,先不测这个了
    • 发现VDI里安装的是CentOS6.4自带的版本,3.8.6,这个都是2006年的版本了,太旧了
    • 下载最新版本3.8.9,ftp上传到VDI,安装测试,OK了,之前连设置过期日期都不能到
      2050年,现在可以了,连续测试了几次都没有发现问题
    • “In function chkenv warning cast from pointer to integer of different size”
      这种错误也不会出现了.
    • 源码地址 http://www.datsi.fi.upm.es/~frosal/sources/
    • 最新版链接: http://www.datsi.fi.upm.es/~frosal/sources/shc-3.8.9.tgz

2014-12-25

2014-12-24

2014-12-23

  • continue SCC(source code compile)
    • svn log -r 17323 |wc -l, check revision exist or not
    • sshpass -p 123456 ssh -p 2200 root@192.168.0.231 “systeminfo”
    • sshpass -p 123456 ssh -p 2200 root@192.168.0.231 “c://build/scctest.bat”

2014-12-22

  • windows sshd 服务,使用freesshd
  • json
  • gdb
    • print structure info, (gdb) p *struct_point
    • run to net line, (gdb) n
  • LIO
  • 一周打造一个Dropbox
    • 问题一: 多终端同步
      同步策略
      • 如果出现冲突,考虑接受编辑时间较新的一个
      • 此同步策略可能丢失一些内容,但对照片视频类网盘这样的应用类型在可接受范围
    • 问题二: 分布式 存储?
      • Hadoop, MogileFS ?
    • 问题三: 上传视频难? 怎么更快上传?
      对策 技术方案:
      • 为了让文件上传更快,对文件切割(如每个片段4M ),各片段可并行上传
      • 为了让每个片段在恶劣网络下都上传成功,服务器和客户端都要知道某个片段上次上传的位置,重连后续传
      • 最后在服务端将各个片段重新 拼成一个文件
    • 问题四: 图片缩略处理
    • 研发资源分配
      • 账号 + 网盘业务服务: 1 人
      • iPhone/iPad 客户端: 1 人
      • Android 客户端: 1 人
      • Windows/Mac/Linux 客户端: 1 人
      • Web : 1 人
      • 产品 + UI 人员: 2 人
      • 分布式存储集群: ? 人
      • 图片音视频转换集群: ? 人
  • ftp 上传文件出现错误425 Can't open data connection,原因是使用了passive模式

2014-12-19

2014-12-18

2014-12-17

  • parted 无法在创建扩展分区上创建逻辑分区码?

    (parted) mkpart extended 13.4GB 100%  
    (parted) p   
    Model: LSI MR9260-8i (scsi)  
    Disk /dev/sda: 2999GB  
    Sector size (logical/physical): 512B/4096B  
    Partition Table: gpt  
    
    Number  Start   End     Size    File system     Name      Flags  
     1      1049kB  525MB   524MB   ext4            primary  
     2      525MB   11.3GB  10.8GB  ext4            primary  
     3      11.3GB  13.4GB  2099MB  linux-swap(v1)  primary  
     4      13.4GB  2999GB  2986GB                  extended  
    
    (parted) mkpart logic 13.4GB 100%  
    Warning: You requested a partition from 13.4GB to 2999GB. 
    The closest location we can manage is 2999GB to 2999GB.  
    Is this still acceptable to you?  
    Yes/No? Yes  
    (parted) p  
    Model: LSI MR9260-8i (scsi)  
    Disk /dev/sda: 2999GB  
    Sector size (logical/physical): 512B/4096B  
    Partition Table: gpt  
    
    Number  Start   End     Size    File system     Name      Flags  
     1      1049kB  525MB   524MB   ext4            primary  
     2      525MB   11.3GB  10.8GB  ext4            primary  
     3      11.3GB  13.4GB  2099MB  linux-swap(v1)  primary  
     4      13.4GB  2999GB  2986GB                  extended  
     5      2999GB  2999GB  1032kB                  logic  
    
  • linux shell compare float numbers echo "10.2>10.1" | bc
  • 归还Chelsio T520-CR万兆网卡借给云存储测试部
  • zd15linux
    • backup_type_root=dd, 原来是使用all,即做tar也做dd,现在修改为只做dd.
    • 当采用不同的磁盘来进行恢复操作时,出现”Error, fail to mount /dev/sda5 to /mnt/data”
      • 使用fdisk -l 发现raid盘/dev/sda只划分到sda4而已
      • partition length of 5854484482 sectors exceeds the msdos-partition-table-imposed maximum of 4294967295
      • msdos分区最多4294967295个sectors,一个sector的大小是512bytes,所以最大是4294967295/2KB
      • 这里用的是两块分别为3TB的硬盘做的RAID1,做出来的raid1大小为2.718TB
      • msdoc最大支持2TB的分区,如果超过2TB,可以使用GPT格式#parted /dev/sda mklabel gpt
  • 2014中华架构师大会
  • thunderbird send later add-ons
  • zd15linux解决swap分区没有挂载问题

2014-12-16

2014-12-15

2014-12-14

2014-12-12

2014-12-11

  • make develop plan for iscsi (LIO)
    • and start coding

2014-12-10

  • igb support 8086 1533
    • download igb-5.2.15.tar.gz from http://sourceforge.net/projects/e1000/files/igb%20stable/
    • To build a binary RPM package of this driver, run ‘rpmbuild -tb igb-5.2.15.tar.gz’.
      • for more information see READ file
    • remove old version using command rpm
      • rpm -e $(rpm -qa |grep igb)
    • rpm -ivh /root/rpmbuild/RPM/x86_64/igb-5.2.15-1.x86_64.rpm
    • reboot
    • check
      • ifconfig, check ethernet is ok, find ethX
      • ethtool -i eth0, find which driver be used.
      • lsmod |grep igb, verify the igb driver be used.
      • modinfo igb |grep ‘8086.*1533’, verify the ID “8086 1533” is supported
  • facebook flashcache based on DM-Cache
  • facebook flashcache tag 1.0

2014-12-09

  • Targetcli LUN:
    • ISCSI LUN(Logical unit number)
    • ISCSI LUN的概念和传统SAN的LUN大同小异。传统SAN的LUN是指在光纤储存的底层阵
      列群集上划分出各小块的储存区域,而iSCSI target的LUN其实只是在我们的逻辑储
      存上划分的储存区域,这种储存可以是一个普通硬盘,一个阵列或者一个底层储存群
      集,对于iSCSI target来说这都没区别,因为iSCSI target是基于Internet网络协议
      的储存。用ls命令我们可以可以清楚看到整个LIO iSCSI target的配置情况
    • http://www.searchdatacenter.com.cn/showcontent_86483.htm
  • targetcli acl 配置
  • 10 New Features for LIO and targetcli in Fedora, June 2013
    targetcli and the LIO Linux kernel target have improved significantly in the
    past year. This video highlights the ten biggest improvements, now available in Fedora 18:
    • Playlist available here: http://www.youtube.com/playlist?list=
        1. Easier storage-ACL setup
        1. Name shows up as LUN model name
        1. Tags for initiator aliases and grouping
        1. ‘info’ command
        1. IPv6 portal support
        1. WWNs normalized
        1. Only show HW fabrics that are present
        1. 10 previous configs saved.
        1. More info in summary
        1. iSER support
        1. Better sorting
  • 修改了启动加载的脚本,导致开机的时候跑不到登陆界面,可以通过再grub的kernel行
    的最后加入single进入安全模式重新修改脚本即可。
  • 检查:
    • 查询网卡的ID信息
      [root@Ustor ~]# lspci -nn |grep -i ethernet
      02:00.0 Ethernet controller [0200]: Intel Corporation I210 Gigabit Network Connection [8086:1533] (rev 03)
      03:00.0 Ethernet controller [0200]: Intel Corporation I210 Gigabit Network Connection [8086:1533] (rev 03)
    • 查询ID信息对应应该加载的驱动
      [root@Ustor ~]# grep -rn ‘8086.1533’ /lib/modules/2.6.32-279.el6.x86_64/modules.alias
      3638:alias pci:v00008086d00001533sv
      sdbcsci igb
  • Linux内核模块自动加载机制
    • 驱动的加载有udev完成
    • 如果udev能正常启动,并且modules.alias有相应的配置,就会加载相应的驱动
    • udev是调用modprobe来加载驱动的
    • 只有加载驱动成功了,才有/dev/下相应的路径出现
  • About linux driver auto load
    • Need to use modprobe igb to load net driver for X10 board, why?
    • script /opt/scripts/common/matchlcsserver
  • 关于SAMBA和NFS是否支持断点续传
    • 经过测试,得出如下结论:
      • 1.samba 不支持
      • 2.nfs 支持
    • 测试环境和步骤如下:
    • 服务端:
      • 1.172.16.130.200, Centos7.0
    • Windows 客户端:
      • 1.yujl本地机器
      • 2.开始->运行->\172.16.130.200
      • 3.拷贝一个大的iso文件到xuni文件夹
      • 4.去机房拔掉172.16.130.200机器的网线
      • 5.发现本地的拷贝窗口停止传送数据
      • 6.接上网线,拷贝窗口仍然没有继续传送的迹象
    • Linux 客户端:
      • 1.我本地机器
      • 2.挂载172.16.130.200的/share/sambatest目录到本地的/mnt/nfs
      • 3.cp ~/Downloads/iso/CentOS-6.5-x86_64-bin-DVD1.iso /mnt/nfs/
      • 4.去机房拔掉172.16.130.200机器的网线
      • 5.确认本地无法连接172.16.130.200
      • 6.接上网线,使用ls -l /mnt/nfs/发现iso文件的大小还继续增加
      • 7.待cp完成后,md5sume计算两个iso文件,发现md5值一

2014-12-08

2014-12-07

2014-12-05

  • 关于组IP和绑定
    • 所谓组IP就是一个网卡使用多个IP、多个网卡有一个相同的IP的情况,这样在使用组IP
      访问机器时,如果一个网卡出现问题了,另外一个网卡会自动顶上,或者说网络会自动切
      换到另外一张网卡上,但是就算两张网卡都完好,同时也只有一张网卡在工作,网络带宽
      也限制在一张网卡上。
      解决: 单网卡连接故障
    • 比较网卡绑定技术,其中模式6(balance-alb), 当单网卡带宽不够用时,会使用两张网卡
      工作, 这种绑定技术主要用于提高网络带宽.
      解决: 单网卡带宽限制,同时具备解决单网卡故障功能
    • 所以,这样来看,绑定包含了组IP的特性,可以去掉组IP功能.
  • Cmd targetcli, iscsi target Lio and Fedora 18
  • 存储系统的NFS和SAMBA挂载做文件输出,突然拔掉网线然后接上测试,看是否支持重传
    • 主机: 172.16.130.143
      • 创建raid5,创建NAS类型的虚拟磁盘
      • NAS设置: 验证模式->share,共享目录设置,NFS IP访问设定
      • CIFS服务激活,NFS服务激活
      • 验证: 命令执行showmount或showmount -e或showmount -a
    • Windows 客户端, 直接在开始运行中输入\172.16.130.143, 链接成功后就可以进行相关操作
      • 如果无法连接,可能是/etc/samba/smb.conf中的配置是要用户名秘密登陆模式?
        public=yes为共享模式,public=no就要设置可用的用户
      • 如果无法连接,也有可能开启了SELinux, 查询状态getenforce, 禁止setenforce 0
    • Linux 客户端
      • showmount -e 172.16.130.143
      • mkdir /mnt/nfs
      • mount 172.16.130.143:/share/vdshare001 /mnt/nfs
      • ls /mnt/nfs
      • umount /mnt/nfs

2014-12-04

2014-12-03

  • 搭配wxWidgets Linux 开发环境
  • 万兆网卡测试
    • 环境
      • 存储 130.50 linux, Intel 万兆网卡, 建了两个iscsi卷
      • 客户端 130.5 windows Intel网卡, 130.17 windows Intel网卡
    • 两个测试
      • 两个客户端同时挂载两个iscsi卷写,IOMeter: 1M 0% read 0% random, 测得速度说500MB/s
      • 两个客户端分别挂载一个iscsi卷写,IOMeter: 1M 0% read 0% random, 测得速度说940MB/s
  • Download wxWidgets for linux
    • yum install wxGTK3
    • yum install gtk+
    • yum install gtk2-devel (In Fedora, gtk+-2.x package is named gtk2[-devel])
    • ./configure
    • make
    • make install
    • [root@localhost wxWidgets-WX_3_0_2]# du -sh ./
      1.5G ./
      编译后,整个目录大小那么大,吓人啊…
  • 也就是说现在使用的这个版本要这样操作吗?
    targetcli /backstores/pscsi create 20g-vd /dev/dg1/lv1
    即对于逻辑卷设备要在pscsi下创建吗?
  • On file: /lib/python2.7/site-packages/rtslib/tcm.py, found this words:
    Example: I{dev=”/dev/sda”}.
    The only device type that is accepted I{TYPE_DISK}.
    For other device types, use pscsi.

2014-12-02

  • LIO on Centos7
    • 先使用三个命令pvcreate,vgcreate,lvcreate来创建逻辑卷
    • 然后使用targetcli命令来创建iscsi卷
    • 为什么targetcli无法使用逻辑卷创建
      [root@ustor chencr]# targetcli /backstores/block/ create 20g-vd /dev/dg1/lv1
      Device is not a TYPE_DISK block device.
      [root@ustor chencr]# targetcli /backstores/block/ create 20g-vd /dev/sdf
      Created block storage object 20g-vd using /dev/sdf.
      [root@ustor chencr]# targetcli /backstores/block/ delete 20g-vd
      Deleted storage object 20g-vd.
      [root@ustor chencr]# lsblk
      NAME        MAJ:MIN RM   SIZE RO TYPE  MOUNTPOINT
      sda           8:0    0   2.7T  0 disk
      ├─sda1        8:1    0     1M  0 part
      ├─sda2        8:2    0   500M  0 part  /boot
      ├─sda3        8:3    0 976.6G  0 part  /
      ├─sda4        8:4    0   5.9G  0 part
      └─sda5        8:5    0   1.7T  0 part  /home
      sdb           8:16   0 931.5G  0 disk
      ├─sdb1        8:17   0  97.7G  0 part  /mnt
      ├─sdb2        8:18   0  97.7G  0 part  /mnt/home
      └─sdb3        8:19   0   4.9G  0 part
      sdc           8:32   0 931.5G  0 disk
      └─md127       9:127  0   2.7T  0 raid5
        ├─dg1-lv1 253:0    0    20G  0 lvm
        └─dg1-lv2 253:1    0   300G  0 lvm
      sdd           8:48   0 931.5G  0 disk
      └─md127       9:127  0   2.7T  0 raid5
        ├─dg1-lv1 253:0    0    20G  0 lvm
        └─dg1-lv2 253:1    0   300G  0 lvm
      sde           8:64   0   2.7T  0 disk
      sdf           8:80   0 931.5G  0 disk
      sdg           8:96   0 931.5G  0 disk
      sdh           8:112  0 931.5G  0 disk
      
  • RHEL 7特性说明:存储
    • LIO 内核目标子系统
    • 快速块设备为较慢的块设备提供缓存.这个功能可让 PCIe SSD 设备作为直接附加存
      储(DAS)或者存储局域网(SAN)存储的缓存使用,以便提高文件系统性能。
    • 引进了 LVM 缓存作为技术预览。这个功能可让用户创建逻辑卷,使用一个小的快速
      设备作为较大的慢速设备的缓存
    • 支持 XFS 文件系统
  • ISCSI implement, LIO
    • LIO有什么新的特性?新功能?需要再Centos7中拿出来使用?
  • 发现有一种4网口的网卡MAC地址混乱
    • 系统启动后,udev会纠正mac地址跟ethX的对应关系(通过rename)
    • 但是再做完绑定(bonding)后,mac地址跟ethX的对应关系又出现问题了.
    • 后果是,页面显示的网口连接状态跟实物对不上
    • 另外,该网卡是4网口的,但也页面上显示是2张网卡,这个之前已经分析过了,是由于
      脚本getethinfo.sh里写死了,认为每张网卡都是2个网口.

2014-12-01

2014-11-28

2014-11-27

2014-11-26

  • google搜索替代地址https://wen.lu
  • 单独编译某个内核模块
    • 查看相应模块下的Makefile文件, 看CONFIG字母开头的变量.
    • make CONFIG_XXX=m -C KERNEL_TREE_DIR M=MODULE_DIR
  • 为什么刚刚编译出来的ko文件都必系统的ko文件大很多,系统的400多KB,新编译的有8MB
  • check ko module be used.
    • [root@localhost linux-3.10.0-123.el7]# service target start
      Redirecting to /bin/systemctl start  target.service  
      
    • [root@localhost linux-3.10.0-123.el7]# service target status
      Redirecting to /bin/systemctl status  target.service  
      target.service - Restore LIO kernel target configuration  
      Loaded: loaded (/usr/lib/systemd/system/target.service; disabled)  
      Active: active (exited) since Sun 2014-12-07 16:01:40 CST; 1s ago  
      Process: 6583 ExecStart=/usr/bin/targetctl restore (code=exited, status=0/SUCCESS)  
      Main PID: 6583 (code=exited, status=0/SUCCESS)  
      Dec 07 16:01:39 localhost.localdomain systemd[1]: Starting Restore LIO kernel target configuration...  
      Dec 07 16:01:40 localhost.localdomain systemd[1]: Started Restore LIO kernel target configuration.  
      
    • [root@localhost linux-3.10.0-123.el7]# lsmod |grep -i target
      target_core_pscsi      18810  0   
      target_core_file       18030  1   
      target_core_iblock     18177  0   
      iscsi_target_mod      278732  6   
      target_core_mod       299412  18 target_core_iblock,target_core_pscs_target_mod,target_core_file  
      
    • 发现tcm_loop.ko、tcm_fc.ko和sbp_target.ko并没有使用
    • 所以可以重新编译 make clean && make scripts
    • make CONFIG_ISCSI_TARGET=m CONFIG_TCM_FILEIO=m CONFIG_TARGET_CORE=m CONFIG_TCM_IBLOCK=m
      M=drivers/target -C /root/linux-3.10.0-123.el7/
  • Centos7.0 compile LIO module
    • make oldconfig && make prepare
    • make scripts
    • make CONFIG_TCM_PSCSI=m CONFIG_LOOPBACK_TARGET=m CONFIG_TCM_FC=m
      CONFIG_ISCSI_TARGET=m CONFIG_SBP_TARGET=m CONFIG_TCM_FILEIO=m   
      CONFIG_TARGET_CORE=m CONFIG_TCM_IBLOCK=m M=drivers/target   
      -C /root/linux-3.10.0-123.el7/  
      
    • [root@localhost linux-3.10.0-123.el7]# find drivers/target/ -name ‘*.ko’
      drivers/target/iscsi/iscsi_target_mod.ko  
      drivers/target/loopback/tcm_loop.ko  
      drivers/target/sbp/sbp_target.ko  
      drivers/target/tcm_fc/tcm_fc.ko  
      drivers/target/target_core_mod.ko  
      drivers/target/target_core_pscsi.ko  
      drivers/target/target_core_iblock.ko  
      drivers/target/target_core_file.ko  
      
  • David
    • 有本书可以看看《单页WEB应用-JavaScript从前端到后端》邮电出版社的
    • 有空看看JavaScript的SPA,framework例如Angular等资料,以后的应用采用SPA实时WEB的几率会较高

2014-11-25

2014-11-24

2014-11-22

2014-11-21

2014-11-20

  • fedora 删除 virtualbox, 安装新包
    [root@localhost Downloads]# rpm -qa |grep -i Virtual
    VirtualBox-4.3-4.3.12_93733_fedora18-1.x86_64
    [root@localhost Downloads]# rpm -e VirtualBox-4.3-4.3.12_93733_fedora18-1.x86_64
    [root@localhost Downloads]# rpm -qa |grep -i Virtual
    [root@localhost Downloads]# rpm -ivh VirtualBox-4.3-4.3.18_96516_fedora18-1.x86_64.rpm
    或者可以这样卸载rpm -e $(rpm -qa|grep Virtual)
  • fedora 20 安装sogou输入法 http://blog.chinaunix.net/uid-23851468-id-4215194.html
  • Linux下驱动开发调试技术
    • 使用printk
    • 查看OOP消息
    • 使用strace
    • 使用内核内置的hacking选项
    • 使用ioctl方法
    • 使用/proc 文件系统
    • 使用kgdb
  • 磁盘阵列同步和重建区别:
    • 同步的目的是让所有数据盘数据一致(对于raid1来说,就是所有盘的数据一样,对
      于raid5来说是写校验数据).
    • 重建目的是数据冗余。重建只有在阵列降级之后并且有热备盘的时候才会发生.
    • 同步写的是正常的数据盘,而重建是写热备盘。
  • 继续学习MD模块,start from 《linux内核奇遇记之md源代码解读之四》, 看到第六.
    • do_md_run
      • md_run -> analyze_sbs(依次分析每个磁盘的超级块,不符合阵列需求的磁盘将被踢出阵列)
      • bitmap_load
      • md_wakeup_thread
      • set_capacity
      • revalidate_disk
      • kobject_uevent
    • do_md_run函数的作用就是向上虚拟一个块设备,向下包装磁盘,建立读写请求的通
      道,将对md设备的请求能够转发到磁盘上去。
  • download linux kernel 3.6.11 from https://www.kernel.org/pub/linux/kernel/v3.x/

2014-11-19

  • zd15linux打包patch包, 用于安装oracle数据库.
  • 查看万兆网卡性能低下问题,初步判断是测试用的机器配置比较低.
  • 继续看Linux MD模块.

2014-11-18

  • ★★★从头彻底掌握raid原理,linux软raid实现, linux模块MD
  • 主要做了以下几件事情:
    1. 完成snmp windows开发
    2. 完成zd15 Linux版本开发
    3. 完成短信猫Linux接口研发
    4. IP绑定分析
    5. 万兆网卡性能测试和支持
  • 关于未来要做的几个事情:
    1. 关于IET替换:使用LIO的话,了解下targetcli命令怎么使用就基本可以整合到ucli中
    2. HA:如果只是简单的优化性能,没有必要大改,除非想好好的把该产品做好
    3. NFS v4: 从长计议
    4. SAMBA IO: 从长计议

2014-11-17

2014-11-14

  • 关于targetcli
    • 使用python开发, 源 https://github.com/Datera/targetcli
    • 依赖rtslib,源码 https://github.com/Datera/rtslib,
    • 依赖configshell库, 源码 https://github.com/Datera/configshell
    • rtslib是一个python库,做为操作Linux SCSI Target子系统的API
    • targetcli命令路径 /usr/bin/targetcli
    • python库路径
      • /lib/python2.7/site-packages/rtslib
      • /lib/python2.7/site-packages/configshell
      • /lib/python2.7/site-packages/targetcli
    • targetcli实现
      • while循环中执行 shell.run_interactive(),该函数在configshell库的shell.py中定义.
      • run_interactive中,每次都会使用上次退出时的路径
      • run_interactive 调用 _cli_loop
      • _cli_loop 调用 run_cmdline
      • run_cmdline 调用 _execute_command
      • _execute_command 执行 target.execute_command(command, pparams, kparams)
      • target.execute_command定义在configshell/node.py中
  • 如果需要在公司产品中使用LIO,如何集成,都需要做哪些工作呢?
    • 首先确认系统环境,确保内核版本在2.6.38以上,因为只有这样的内核版本支持LIO
    • 系统要安装targetcli,lsscsi等可能使用到的工具
    • ucli中增加子命令
  • linux iscsiadm使用
  • LIO使用,就是使用targetcli
    • root权限运行targetcli
    • 浏览存储对象, ls查看目录树信息,cd到执行目录
    • 创建文件存储对象
      • cd /backstores/fileio
      • create disk0 /tmp/disk0.img 10MB
      • cd /backstores/ramdisk
      • create rd0 10MB
    • 创建iSCSI目标
      • cd /iscsi
      • create
      • cd iqn.2003-01.org.linux-iscsi.localhost.x8664:sn.6b448471ba5e/tpg1/
      • luns/ create /backstores/fileio/disk0
      • luns/ create /backstores/ramdisk/rd0
      • portals/ create 0.0.0.0
      • set attribute authentication=0 demo_mode_write_protect=0 generate_node_acls=1 cache_dynamic_acls=1
      • cd /
      • ls
      • saveconfig
    • 启动iscsi target服务
      • [root@localhost ~]# service target start
      • [root@localhost ~]# service target status
    • 装载iSCSI Target
      • [root@localhost ~]# iscsiadm -m discovery -t sendtargets -p 127.0.0.1
        127.0.0.1:3260,1 iqn.2003-01.org.linux-iscsi.localhost.x8664:sn.6b448471ba5e
      • [root@localhost ~]# iscsiadm –mode node \

        –targetname iqn.2003-01.org.linux-iscsi.localhost.x8664:sn.6b448471ba5e \
        –portal 127.0.0.1 –login

      • [root@localhost dennis]# lsscsi
        [2:0:0:0] disk ATA ST3160815AS A /dev/sda
        [6:0:0:0] disk LIO-ORG disk0 4.0 /dev/sdb
        [6:0:0:1] disk LIO-ORG rd0 4.0 /dev/sdc
    • 卸载并删除iSCSI目标
      • iscsiadm –mode node –targetname iqn.2003-01.org.linux-iscsi.localhost.x8664:sn.6b448471ba5e –portal 127.0.0.1 –logout
      • targetcli iscsi/ delete iqn.2003-01.org.linux-iscsi.localhost.x8664:sn.6b448471ba5e
    • 参考 Linux-IO Target介绍
  • iSCSI Targets on Linux
    • 目前 Linux 上主要有三个 iSCSI Target 实现:
      • Linux SCSI Target – STGT / tgt
      • Linux-IO Target – LIO
      • SCST – Generic SCSI Subsystem for Linux
    • Linux 2.6.38 为分界线,此前的标准是 Linux SCSI Target , STGT 之后迄今为止的
      标准是 Linux-IO Target , LIO 确切的说 Linus Torvalds 在 2011年1月15日将
      LIO SCSI Target engine merge 到 Linux 2.6.38 中
  • dd操作
    • 直接IO,direct i/o dd, 速度可以这样记录:write/read 1100/895 MB/s
      • dd if=/dev/zero of=/dev/sdc bs=1M count=5000 oflag=direct
      • dd of=/dev/null if=/dev/sdc bs=1M count=5000 iflag=direct
    • 缓冲IO,buffered i/o dd, 速度可以这样记录:write/read 950/770 MB/s
      • dd if=/dev/zero of=/dev/sdc bs=1M count=5000
      • dd of=/dev/null if=/dev/sdc bs=1M count=5000
    • http://article.gmane.org/gmane.linux.scsi/38108
  • 数据库开发,与存储相关
  • [root@localhost ~]# cat /etc/redhat-release
    CentOS Linux release 7.0.1406 (Core)
  • 测试机器172.16.60.86
  • 暂时使用LIO作为IET替代,因为IET当前已不更新,最新版2010年。而LIO已进入内核,
    怎么说这几年应该都会持续发展,属于主流应用。

2014-11-13

  • SAN 卻可以透過某些特殊的介面或通道來提供區域網路內的所有機器進行磁碟存取。
    要注意喔,SAN 是提供『磁碟 (block device)』給主機用,而不是像 NAS 提供的是
    『網路協定的檔案系統 (NFS, SMB…)』!這兩者的差異挺大的喔!因此,掛載使用
    SAN 的主機會多出一個大磁碟,並可針對 SAN 提供的磁碟進行分割與格式化等動作。
    参考 http://linux.vbird.org/linux_server/0460iscsi.php
  • ARM Linux 3.x的设备树DeviceTree
  • 需要做本月的学习计划

2014-11-12

  • 2014/11/03至2014/11/12请假10天

2014-10-31

  • 验证snmp确实有发网络和逻辑盘信息,但是好像出来的信息都不对.
  • 发了万兆网卡进展信息邮件出来
  • Chelsio T520-CR万兆网卡借给云存储研发部生产测试
  • wireshark抓获usnmp trap出来的信息
    • 过滤规则snmp and ip.addr==172.16.60.74

2014-10-30

  • Linux-IO Target介绍, 就是LIO
  • linux IO内核参数调优之原理和参数介绍
    • page cache, 页缓存,下面的操作得出页缓存大小为1.16GB, 有168kB的数据缓存在page cache中.
      [dennis@localhost ~]$ grep -i -E ‘^cache|dirty’ /proc/meminfo
      Cached: 1213812 kB
      Dirty: 168 kB
    • write back
    • pdflush是linux系统后台运行的一个线程,这个进程负责把page cahce中的dirty状态
      的数据定期的输入磁盘。cat /proc/sys/vm/nr_pdflush_threads查看当前系统运行pdflush数量
    • 几个重要的IO参数, 和page cache有关
      • cat /proc/sys/vm/dirty_writeback_centisecs,表示页缓存中的数据多久pdflush就会被唤起去刷新脏数据
      • cat /proc/sys/vm/dirty_expire_centicecs,表示页缓存中的数据多久之后被标记为脏数据
      • cat /proc/sys/vm/dirty_backgroud_ratio,表示最多缓存脏数据的空间占总内存(MemFree+Cached-Mapped)的百分比
      • cat /proc/sys/vm/dirty_ratio,表示当脏数据占用总内存的百分比超过20%的时候,
        内核会把所有的写操作阻塞掉,等待pdflush把这些脏数据刷入到磁盘后才能恢复正常的IO写
    • http://backend.blog.163.com/blog/static/2022941262013111781643200/
  • Linux gimp 替代 widnows photoshop
  • 研究iscsi, 比较各种版本,用户态内核态,发展趋势.
  • 列出rpm包内容和解压rpm包内容,rpm -qpl *.rpm
    [dennis@localhost 10GNIC]$ rpm -qpl cxgb4-2.9.0.2-0.x86_64.rpm
    /lib/modules/2.6.32-279.el6.x86_64/updates/drivers/net/cxgb4/cxgb4.ko

2014-10-29

  • 把Intel万兆网卡的光模块接口放到 Chelsio 上, 同时使用两个网口做bonding.

2014-10-28

  • 修改getethinfo.sh, 增加获取unlink网口速度.改变/tmp/.nic文件内容.
  • ethtool eth3 |grep 10000baseT, 通过返回值判断是否为万兆网卡echo $?
  • [root@Ustor ~]# ethtool eth3 |sed -n ‘/Supports auto-negotiation/{g;1!p;};h’ \
    |awk -F’base’ ‘{print $1}’ |awk ‘{print $1}’
    10000
  • 查看ethtool源代码ethtool-2.6.33-pre1.tar.gz
    • [dennis@localhost ethtool-2.6.33-pre1]$ grep -rl ‘Supported link modes’
      ethtool.c
    • 关联的函数:
      • static void dump_supported(struct ethtool_cmd *ep)
      • static int dump_ecmd(struct ethtool_cmd *ep)
      • static int do_gset(int fd, struct ifreq *ifr), 调用send_ioctl和dump_ecmd
      • send_ioctl 调用 ioctl(fd, SIOCETHTOOL, ifr) 获取网卡信息
  • 发现一个状况,如果软raid卡换成硬raid卡,会造成硬件状态显示页面的网卡显示都有问题.
  • 所谓组IP就是一个网卡使用多个IP、多个网卡有一个相同的IP的情况,这样在使用组IP
    访问机器时,如果一个网卡出现问题了,另外一个网卡会自动顶上,或者说网络会自动切
    换到另外一张网卡上,但是就算两张网卡都完好,同时也只有一张网卡在工作,网络带宽
    也限制在一张网卡上。比较网卡绑定技术,其中模式6(balance-alb), 当单网卡带宽不够
    用时,会使用两张网卡工作, 这种绑定技术主要用于提高网络带宽.
  • 组IP
    • 增加删除IP
      • ip addr add 172.16.60.69/24 dev eth1
      • ip addr del 172.16.60.69/24 dev eth1
    • 对于组IP,使用ip addr 可以看到变化
      [root@Ustor ~]# ip addr show eth1 |grep -E ‘inet ‘
      inet 172.16.60.69/24 scope global eth1
      inet 172.16.60.10/24 scope global secondary eth1
      [root@Ustor ~]# ip addr show eth0 |grep -E ‘inet ‘
      inet 172.16.60.70/24 scope global eth0
      inet 172.16.60.10/24 scope global secondary eth0
    • 另外还可以使用
      • ifconfig eth1:1 172.16.60.10 netmask 255.255.255.0 up
      • ifconfig eth1:1 172.16.60.10 netmask 255.255.255.0 down
    • Linux 单网卡下增加多个IP地址的方法
    • Linux单网卡绑定多IP和多网卡共用单IP的方法

2014-10-27

  • 通过Glib库中的GKeyFile来读取配置文件.
    系统中的好多配置文件的读取方式都是通过GkeyFile读取的
    常用函数如下:
  • 换上Chelsio万兆网卡测试
    • 简单安装方法, 安装包ChelsioUwire-2.9.0.2-RHEL6.3-x86_64.tar.gz中的两个rpm包,
      此方法还没有验证。之前是直接make安装的.
      • chelsio-series4-firmware-2.9.0.2-0.x86_64.rpm
      • cxgb4-2.9.0.2-0.x86_64.rpm
    • 自动把eth2,eth3修改为eth4,eth5
      • udev: renamed network interface eth2 to eth4
      • udev: renamed network interface eth3 to eth5
    • Linux问题
      • 页面硬件信息看不到网卡信息(速度,连接状态)
      • 页面网络设置无法设置IP
    • windows问题
      • 换上看后,控制面板的网络设置,显示的万兆网卡图标都打叉叉,像是没有接光纤网线.
  • ip -oneline link| grep -c -E ‘^[0-9]+.[ \t]+eth[0-9a-z_]+:’ 搜索ethX的数目
  • difference between bonding ip and group ip
    • bonding ip
      • parameter, using -d bond0
    • group ip
      • parameter, using -d group
  • 网口信息结构成员
    • char ip; / IP */
    • char netmask; / 子网掩码 */
    • char gw; / 网关 */
    • char mtu; / mtu */
    • char dev; / 设备名,对组IP指定使用group */
    • char num; / 绑定用的网口名序列,如eth0:eth1:eth4 */

2014-10-26

  • Dojo,一个用javascript语言实现的开源DHTML工具包

2014-10-24

  • Linux-3.2.63版本LIO代码量
    • /home/dennis/work/kernel/linux-3.2.63/drivers/target
    • [dennis@localhost target]$ find ./ -name “.*” |xargs wc -l |awk ‘END{print $1}’
      52187
    • [dennis@localhost target]$ find iscsi/ -name “.“ |xargs wc -l |awk ‘END{print $1}’
      21801
  • million I/O s per second (IOPS)
  • LIO Target
    • yum install -y targetcli
  • 网口速度获取,两种方式:
    • ethtool eth0 | awk -F’:’ ‘/Speed/{print $2}’
    • cat /sys/class/net/eth0/speed
  • 万兆网卡集成
    • [root@Ustor ~]# cat /tmp/.nic
      nic0 eth0 net0 0c:c4:7a:0b:a3:94 link 100Mb/s
      nic0 eth1 net1 0c:c4:7a:0b:a3:95 link 100Mb/s
      nic1 eth2 net2 90:e2:ba:32:ba:28 link 10000Mb/s
      nic1 eth3 net3 90:e2:ba:32:ba:29 unlink
    • 数据/tmp/.nic来自/opt/scripts/common/getethinfo.sh
    • 由于:
      [root@Ustor ~]# cat /etc/cf/conf/hardwareinfo |grep mainboard
      mainboardtype=x9scl
      [root@Ustor ~]# cat /etc/redhat-release
      CentOS release 6.3 (Final)
      [root@Ustor ~]#
    • 所以ls -l /sys/class/net/eth*/device | awk -F’/‘ ‘/eth/{print $9,$NF,$5}’ | awk ‘{print $3}’ | sort
    • 要增加万兆网卡速度,即使在unlink的网口也一样获取speed即可
      speed=ethtool $name | awk -F':' '/Speed/{print $2}'
    • 但是没有连接网线的网口是无法使用上面的ethtool命令得到速度的,虽然无法得到,
      但是既然是没有连接上网线,就不存在要使用该网口进行绑定的情况,所以不会影响
      绑定功能的实现。
    • 看来对于不用重新装驱动的Intel网块,不用修改什么了.
    • 而对于Chelsio网块,应该完成驱动的集成即可。
  • fedora php develop
    • yum install lighttpd lighttpd-fastcgi php
    • /etc/lighttpd/modules.conf 打开下面两个项
      • include “conf.d/fastcgi.conf”
      • include “conf.d/cgi.conf”
    • /etc/lighttpd/conf.d/fastcgi.conf 配置php解析的程序路径信息
      • 使用which php-cgi 确认路径
      • “bin-path” => “/usr/bin/php-cgi -c /etc/php.ini”,
    • /var/www/lighttpd/info.php 创建该文件,内容为<?php phpinfo(); ?>
    • 启动/usr/sbin/lighttpd -D -f /etc/lighttpd/lighttpd.conf
    • 浏览器访问127.0.0.1/info.php, 如果可以显示php版本信息,就表示可以正常解析php页面了
    • 如果无法解析php页面,且返回403访问受限,但是可以访问静态页面(如index.html),
      一般情况下是cgi配置出现问题.

2014-10-23

  • [root@localhost ~]# N=12; for i in $(seq 1 $N); do ab -n 1000000 -c 100 http://10.0.0.2:80/ > /dev/null 2>&1; done
  • 十个最值得阅读学习的C开源项目代码
    • Webbench, 600
    • Tinyhttpd, 502
    • cJSON, 500
    • CMockery, 3k
    • Libev, 4.15, 8000
    • Memcached, 1.4.7, 10k
    • Lua, 5.1.4, 1.5W
    • SQLite, 3W
    • UNIX v6, 1W
    • NETBSD
  • CPU、Processor、Core的区别
  • linux下利用badblocks程序在线修复坏道
  • e2fsprogs(又稱為e2fs programs)是用以維護ext2,ext3和ext4檔案系統的工具程序集。
    由於ext2/3/4是绝大多数Linux发行版默认的文件系统,所以這套工具集也包含在众多Linux发行版内。
    e2fsprogs包含以下獨立的程式:
    • e2fsck, ext2/3/4文件系统的fsck程序,用于檢查文件系统的完整性。
    • mke2fs, 用于创建ext2/3/4檔案系統。
    • resize2fs, 調整已建立的ext2/3/4檔案系統的大小。
    • tune2fs, 修改ext2/3/4檔案系統的相關參數。
    • dumpe2fs, 顯示ext2/3/4檔案系統的相关資訊。
    • debugfs, 用于调试ext2/3/4文件系统,可以查看与更改文件系统的状态。
    • http://zh.wikipedia.org/zh/E2fsprogs
    • http://e2fsprogs.sourceforge.net/

2014-10-22

  • 修改服务timeout时间,注册表编辑,命令regedit
    找到HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control
    右键单击,创建DWORD类型的值,名字为”ServicesPipeTimeout”, 值大小60000(Decimal类型).
    参考 http://www.verydemo.com/demo_c173_i31536.html
    但是修改后,没有效果!!!还是启动不了服务.
  • sc start scmserver
    [SC] startService FAILED 1053:
    The service did not respond to the start or control request in a timely fashion.
  • windows server 2008 权限修改, 命令cacls
  • windows server 2008 权限修改
    properties -> Security -> Advanced -> Owner -> Administrators
    -> Replace owner on subcontainers and objects
    通过手动修改C:\windows\winSxs和c:\windows\WinSxS\Manifests目录权限为full control,
    就可以解决scm安装过程错误问题.
  • scm安装过程出现错误:
    c:\windows\WinSxS\Manifests\x86_Microsoft.VC90.CRT_1fc8b3b9a1e8e3b_9.0.30729.4148_x-ww_d495ac4e.cat
    c:\windows\WinSxS\Manifests\x86_Microsoft.VC90.CRT_1fc8b3b9a1e8e3b_9.0.30729.4148_x-ww_d495ac4e.manifest
    c:\windows\WinSxS\Policies\x86_policy.9.0.Microsoft.VC90.CRT_1fc8b3b9a1e8e3b_x-ww_b7353f75\9.0.21022.8.cat
    An error occured while trying to create a file in the destination directory: Access is denied
  • scm无法在某些windows server 2008版本下启动scom server服务.
  • 登陆要使用特别域的机器,rdesktop -f 172.16.130.7 -clipboard,用户名输入uit\administrator

2014-10-21

2014-10-20

2014-10-19

2014-10-17

  • 别人的职业规划:
    25-30岁,高级工程师,with资深行业背景。  
    30-35岁,能带领团队完成充满想象的产品研发。  
    35-40岁,产品架构师。  
    40-50岁,CTO  
    3年后(2013年),想法是:  
    25-30岁,架构师,资深行业背景。  
    30-35岁,CTO。  
    我的规划呢?方向呢?时间在追杀,日子不多了。
    
  • find ./ -name "*.*" -exec ls -l {} \; |awk '{print $5,$9}' |sort -n |tail find the 10 biggest files.
  • 关于集成万兆网块,虽然Intel的可以直接识别,但是网口名字还是不对,ifconfig看
    到的是eth4和eth5,但是页面确实eth2和eth3.但文件/tmp/.nic有match关系,应该没有问题
    [root@Ustor ~]# cat /tmp/.nic  
    nic0 eth0 net0 0c:c4:7a:0b:a3:94 link  100Mb/s  
    nic0 eth1 net1 0c:c4:7a:0b:a3:95 link  100Mb/s  
    nic1 eth4 net2 90:e2:ba:32:ba:28 link  10000Mb/s  
    nic1 eth5 net3 90:e2:ba:32:ba:29 unlink   
    [root@Ustor ~]# cat /etc/cf/conf/network.conf  
    ##### Network INI File #####  
    [root@Ustor ~]# cat /etc/cf/conf/network.conf.monitor   
    ##### Network INI File #####  
    [group]  
    ip=192.168.21.100  
    netmask=255.255.255.0  
    [eth0]  
    ip=192.168.21.101  
    netmask=255.255.255.0  
    [eth1]  
    ip=192.168.21.102  
    netmask=255.255.255.0  
    
    这个文件/etc/cf/conf/network.conf.monitor由谁产生?有何作用?
    [root@Ustor ~]# ls /etc/cf/conf/network.conf.monitor -l  
    -rw-r--r--. 1 root root 175 Oct 14 03:25 /etc/cf/conf/network.conf.monitor  
    [root@Ustor ~]# date  
    Fri Oct 17 05:03:53 CST 2014  
    [root@Ustor ~]# uptime  
     05:05:26 up 3 days,  1:43,  4 users,  load average: 0.23, 0.16, 0.19  
    
    该文件应该是系统启动的时候只产生一次.
  • 测试万兆读写性能总结:
    vendor type speed(w/r)
    Chelsio iscsi 800MB/s | 800MB/s
    nas      380MB/s | 140MB/s  
    
    Intel iscsi 800MB/s | 900MB/s
    nas      370MB/s | 130MB/s  
    
    iscsi性能比较高,smb方式的读写性能比较差.
  • 思考: 之前测试Intel万兆网卡速度才50MB/s,为什么会出现这样的情况,会不会下次还会碰到?
  • 建raid, 测试万兆Intel网卡读写性能
    • 8块盘建raid5,无热备
    • 开启iscsi,启动cifs,nfs服务(这两个服务可以后面的时候启动,但是iscsi必须先
      启用,否则无法创建iscsi类型的虚拟磁盘)
    • 创建两块iscsi虚拟磁盘,大小102400MB, 名字iscsi01和iscsi02, 缓冲模式,secotor大小4096
    • 创建两块nas虚拟磁盘,大小102400MB, 名字nas01和nas02
    • windows server 2008 R2 使用IOMeter对scsi卷进行读写,14个worker,7个写iscsi01,
      另外7个写iscsi02, 块大小1M,
      • 全写模式,速度由700MB/s到800MB/s, 带宽占用70%左右. vmstat查到的io速度由110MB/s左右
      • 全读模式,速度由900MB/s, 带宽占用80%左右. vmstat查到的io速度由140MB/s左右,
        ustat 2可以查到网络速度有900MB/s多
    • windows server 2008 R2 使用SANergy对nas卷进行读写,文件大小10240MB,块大小1MB
      • 单个软件写一个nas卷,写速度377.90MB/s, 带宽占用30%多,读速度131.84MB/s,带宽11%左右
      • 两个软件写nas01和nas02,写速度175MB/s和183MB/s, 带宽占用35%左右,但是网络速度曲线不平稳。
        服务端看到的网速也有300以上,也是不太稳定,有时200多,有时400多.
        读速度112.59MB/s和112.34MB/s, 带宽占用20%左右, 网络速度比较稳定。服务端网络速度有240MB/s左右.
  • 停止raid, 由于raid有3块磁盘被拔掉,已无法使用,但是当前不能直接使用mdadm -S /dev/md0
    来停止.经查,发现是在该raid上创建的nas共享(SMB方式)处于使用状态,先停止服务即可。
    • fuser 查出共享目录被smbd使用中, 无法直接umount共享目录
    • 先在网页上停止cifs服务(终端命令行怎么操作?)
    • 然后再umount /share/nas01
    • mdadm -S /dev/md0, 还是无法停止
    • 网页上停止iscsi服务,nfs服务,然后在网页上删除,可以了
  • fuser可用于查询文件、目录、socket端口和文件系统的使用进程,并且可以使用fuser关闭进程。
    当文件系统umount报device busy时,常用到fuser查询并关闭使用相应文件系统的进程
    [root@Ustor ~]# fuser -v /share/nas01/  
                         USER        PID ACCESS COMMAND  
    /share/nas01/:       root       1775 ..c.. smbd  
    [root@Ustor ~]# fuser -v -n tcp 80  
                         USER        PID ACCESS COMMAND  
    80/tcp:              root       3882 F.... lighttpd  
    
    参考 http://www.thegeekstuff.com/2012/02/linux-fuser-command/

2014-10-16

2014-10-15

  • 统计linux网口流量脚本
  • 使用 shell 脚本对 Linux 系统和进程资源进行监控
  • 开启执行 echo “/opt/YOUR_SCRIPT.sh” >>/etc/rc.local
  • 配置了crontab但是无法启动相关脚本,不知道为何..
  • /proc/pid/status 进程详细信息
    /proc/pid/cmdline 进程启动命令  
    /proc/pid/cwd 链接到进程当前工作目录  
    /proc/pid/environ 进程环境变量列表  
    /proc/pid/exe 链接到进程的执行命令文件 (使用ls查看连接)  
    /proc/pid/fd 包含进程相关的所有的文件描述符 (使用ls查看连接)  
    /proc/pid/maps 与进程相关的内存映射信息  
    /proc/pid/mem 指代进程持有的内存,不可读  
    /proc/pid/root 链接到进程的根目录  
    /proc/pid/stat 进程的状态  
    /proc/pid/statm 进程使用的内存的状态  
    /proc/pid/status 进程状态信息,比stat/statm更具可读性  
    /proc/pid/wchan, 当前进程阻塞位置的内核函数名
    
  • gvim复制行号,先在命令模式输入/,然后再用鼠标选者复制即可
  • [root@Ustor log]# pstree |grep StoreTest
    init-+-StoreTest---StoreTest---321*[{StoreTest}]  
    [root@Ustor log]# ps afx |grep StoreTest  
    24654 pts/5    S+     0:00          \_ grep StoreTest  
     6951 pts/2    S      0:00 ./StoreTest  
     6956 pts/2    Sl   1143:10  \_ ./StoreTest  
    strace -o st6951.log -s 1024 -T -tt -e trace=all -p 6951  
    [root@Ustor ~]# cat st6951.log  
    6951  09:32:24.801126 wait4(6956,  <unfinished ...>  
    
    根据以上数据,可以推测出该程序的运行过程:主函数起来后,fork一个进程,该进程
    会起N多个线程来接收客户端发过来的数据;这样的话,如果fork出来的进程挂了,还可
    以监控到并重新fork。
  • strace -o st.log -s 1024 -T -tt -e trace=all -p 6956
    • 调用很多的futex进行线程控制, futex可以使程序等待某个地址的值发生变化,当值
      发生变化后唤醒等待程序
    • recvfrom 接收数据
    • 其他
      • accept
      • select
      • write
      • stat读取/etc/localtime
  • top中看到某个进程占用CPU超过100%的情况,使用shift+i 关掉Irix模式即可显示正确的占用率.
    另外Cpu(s)显示的是平均使用率,如果想看到每个核心的使用情况,按1切换即可.

2014-10-14

2014-10-13

  • Linux 磁盘块大小
  • Linux 存储与文件系统峰会
  • IET 替代
  • 开源iSCSI Target调研
    • SCST与LIO
      • SCST是一个相对较早且比较成熟的SCSI Target开源实现。
      • LIO相比SCST是一个更晚的SCSI Target开源实现,但在与SCST竞争进入Linux内核中,
        却以LIO胜出告终。关于二者之间进入Linux内核时的争论,LWN上一篇很 有趣的文章,
        A tale of two SCSI Targets,中文翻译为“SCSI Target之 双城记”。
      • 虽然LIO因为进入Linux内核而有了更好的发展前景,但SCST也不差,Fusion-io 公司
        刚刚收购了SCST的商业支持公司ID7。
    • Tgt
      • Tgt也是一个通用的SCST Target开源实现,与前两者不同的是,在支持iSCSI协 议上,
        Tgt的所有代码是完全工作在用户态的。
      • Tgt将LU视为backstore,支持backstore可以模块化,也就是说,你可以写一个模块来
        支持你自己定义的LU。Tgt提供了多线程api接口,使得编写backstore时 ,可以使用多
        个线程同时处理SCSI请求。
      • Tgt的主线程使用epoll LT模型,监听并接收Initiator发来
        的读写请求与命令 ,而调用对应的backstore处理模块。
    • iSCSI Target支持LU是分布式文件系统时的优化
      • iSCSI Target与LU之间支持多连接并发读写请求,对于不要求排序的SCSI命令与数据,可以并发发给LU
      • iSCSI Target对SCSI命令与数据进行合并,然后发给LU。
    • 比较
      • 无论是SCST还是LIO,我都不认为它们是支持分布式文件系统的最佳选择。
        首先,它们都是工作在内核态的,一旦出问题,会导致系统挂掉,直接影响跑在系统上的其他线上服务。
        其次,SCSI与LIO作为通用的SCSI Target实现,在处理完iSCSI协议后,会把SCSI的
        处理交给内核SCSI Driver去处理,这对支持分布式文件做二次开发来说,相对更加困难。
      • LIO对于一个LU,分配一个recv线程与一个send线程,recv线程接收Initiator发来的
        iSCSI PDU,解析成SCSI请求后交给send线程,send线程将请求发给LU,并将LU返回
        的结果返回给Initiator。对于LU是分布式文件系统时,一个send线程的框架让支持
        iSCSI Target与LU之间多连接并发读写相对比较困难。而且LIO对iSCSI协议的支持,
        很难针对LU是分布式文件系统做优化。LIO的send线程 与recv线程使用一个队列进行
        通信,该队列中的SCSI请求,有些不关心顺序,有些却关心,这些都是在send线程遍
        历队列时才进行处理的。如果要支持LU的多连接并发读写,需要额外的队列来维护SCSI
        请求,这个队列对SCSI请求到达LU的顺序没有要求。当然,也要额外支持多线程等处理。
      • Tgt由于工作在用户态,没有缺点1,而且Tgt的backstore可以模块化,开发起来非常方便,
        同时backstore支持多线程处理,而且Tgt交给backstore的多线程处理的 list已经对顺序不作要求了。
      • 从以上分析来看,使用Tgt让分布式文件系统支持iSCSI更加有优势,而且更加方便。
        目前,开源分布式存储项目sheepdog与hlfs都是基于Tgt开发模块来支持 iSCSI协议的。
    • Tgt的缺点与改进
      • Tgt的backstore在使用多线程时,多个线程竞争一个list,开销较大。可以让 每个线程维护
        一个list,主线程通过CAS无锁队列的方式,将SCSI请求根据rr算 法加入到每个线程的list中。
      • Tgt的backstore与LU之间连接数与线程数,是1:1关系,且线程数为4,写死了的。
        可以修改代码,将连接数改为可配置的。
      • Tgt使用一个主线程通过epoll接受所有Initiator的读写请求,当登陆的Initiator较多时,
        这里可能成为瓶颈。通常来说,这不是问题,因为会iSCSI Target会部署多个的。
  • vmstat 计算io速度
    [root@Ustor ~]# vmstat 1 1  
    procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu-----  
     r  b  swpd   free   buff  cache   si   so    bi    bo  in   cs us sy id wa st  
     0  3  3688 1301376  48312 122752  0    0  3601  3689   88   76  1  3 94  2  0  
     0  1  3688 1178292 173252 122728  0    0 124940    30  902 1356  7 10 41 42 0  
     0  1  3688 1045240 304324 122720  0    0 131072     0  514  713  1  5 49 46 0  
     0  2  3688 1242640 108228 122652  0    0 131084     0  760  985  4  7 44 45 0  
     0  2  3688 1119508 231108 122724  0    0 122880     0  396  512  0  3 50 47 0  
     0  1  3688 1190444 160960 122716  0    0 131084    96  778 1319  5  9 44 43 0  
     0  1  3688 1057524 292032 122720  0    0 131072     0  588  668  2  4 48 46 0  
     2  3  3688 1214204 134348 122680  0    0 131092     0  839 1146  8 13 11 70 0  
    
    • bi: 发送到块设备的块数,单位:块/秒
    • bo: 从块设备接收到的块数,单位:块/秒
    • bo: 从块设备接收到的块数,单位:块/秒
  • cpu使用率,vmstat、ps和top不一致问题 http://www.sosolinux.com/thread-463-1-1.html
  • Linux查询登陆用户和执行命令的对应关系:
    w - Show who is logged on and what they are doing  
    [root@Ustor ~]# w  
     12:25:37 up 2 days,  3:10,  3 users,  load average: 1.82, 1.82, 1.68  
    USER TTY   FROM          LOGIN@  IDLE  JCPU  PCPU WHAT  
    root pts/0 172.16.50.115 11:54  31:21  0.00s 0.00s -bash  
    root pts/1 172.16.50.39  12:22   0.00s 0.00s 0.00s w  
    root pts/2 172.16.50.115 Sat10  41:32  3:13  3:13  dd if=/dev/sdc of=/dev/null bs=128k  
    
  • Intel万兆网卡 X520-SR2
  • Chelsio万兆网卡集成预研
    • 需要修改/etc/cf/conf/network.conf.monitor
    • 但是该文件不是时刻被更新的
      [root@Ustor ~]# ls -l /etc/cf/conf/network.conf.monitor   
      -rw-r--r--. 1 root root 175 Oct 11 09:18 /etc/cf/conf/network.conf.monitor  
      [root@Ustor ~]# date  
      Mon Oct 13 11:38:24 CST 2014  
      
  • 万兆samba读性能可以达到100MB/s多,将近200MB/s左右,但据说千兆网卡只有80MB/s左右,
    理论上IO性能可以达到100MB以上,而千兆网卡也至少可以提供100MB以上的网速,不应该
    只有80MB/s那么少!
  • iostat
    • 显示数据的含义(也可以通过man iostat查到)
      • Device: 以sdX形式显示的设备名称
      • tps: 每秒进程下发的IO读、写请求数量(number of transfers per second)
      • Blk_read/s: 每秒读扇区数量(一扇区为512bytes)
      • Blk_wrtn/s: 每秒写扇区数量
      • Blk_read: 取样时间间隔内读扇区总数量
      • Blk_wrtn: 取样时间间隔内写扇区总数量
    • 以kB为单位显示读写信息(-k选项)
    • 更详细的io统计信息(-x选项), watch iostat -x -k
  • windows下SANergy测试NAS共享(samba)性能, Chelsio万兆网卡
    • Test Write, File size(MB): 10240, Record size(KB): 1024
      • 单盘,一个文件, 速度 380MB/s左右, windows 任务管理器显示网络占用33%,
        ustat 1显示网速400000KB/s, vmstat 1的io中的bo显示为390000左右.
        watch iostat -k 显示结果:
        md0 637.01 4935.08 4968.58 826106745 831714748, 只有4MB/s多而已
      • 两盘,两个文件, 速度 400MB/s以上,iostat速度跟上面差不多,vmstat也差不多.
    • Test Read, File size(MB): 10240, Record size(KB): 1024
      • 单盘,一个文件, windows 任务管理器显示网络占用12%, ustat 1显示网速145000KB/s,
        vmstat 5显示io速度140000KB/s, top显示smbd占用cpu18%, watch iostat -k 显示结果
        md0 657.73 5145.82 4381.74 816028281 694859916, 只有4MB/s而已?
      • 两盘,两个文件, windows 任务管理器显示网络占用18%, ustat 1显示网速220000KB/s,
        vmstat 5显示io速度210000KB/s, top显示smbd占用cpu33%, watch iostat -k 显示结果
        md0 646.63 4271.66 4402.24 674248333 694859540, 怎么只有4MB/s而已?可能因为
        大部分数据都再缓冲区的缘故
  • windows下iozone测试NAS共享(samba)性能
    iozone.exe -R -i 0 -i 1 -s 10g -o -r 1m -t 2 -F z:\t1\1.dat z:\t2\2.dat
    • 参数说明:
      • -R 选择全自动模式
      • -i 0 write/rewrite
      • -i 1 read/reread
      • -s 2g 选择写的大小2G
      • -o 同步写
      • -t 2 选择2个线程写入
      • -F z:\t1\1.dat 指定写文件路径,有几个线程就需要几个文件名
      • -r 1m 指定写入块的大小,块越大,占cache利用率越大
    • 多线程命令执行有问题,单线程执行可以,但结果数据浮动比较大,性能也不及SANergy测试结果.
  • rdesktop -f 172.16.60.74 -u administrator -p 123456 -clipboard -r disk:cdrom=/root/tools
    增加密码以及共享目录

2014-10-11

  • 万兆性能测试

    • IOMeter测试,发现速度只有100MB/s左右;不通过网络,直接本地dd测试,发现也只有100MB/s
    • 检查发现确实是创建了raid5
      [root@Ustor ~]# MegaCli -ldinfo -lall -aall  
      Adapter 0 -- Virtual Drive Information:  
      Virtual Drive: 0 (Target Id: 0)  
      Name                :  
      RAID Level          : Primary-5, Secondary-0, RAID Level Qualifier-3  
      Size                : 16.369 TB  
      Parity Size         : 1.818 TB  
      State               : Optimal  
      Strip Size          : 256 KB  
      Number Of Drives    : 10  
      Current Cache Policy: WriteThrough, ReadAhead, Direct, No Write Cache if Bad BBU  
      
    • 会不会跟缓存有关系, 上面显示当前使用的缓存策略是直接写,修改为writeback试一试;
      准备重建raid5; (其实可以直接修改缓存策略MegaCli -ldsetprop -wb -L0 -a0)
      http://blog.csdn.net/heart_2011/article/details/7254404
    • MegaCli -cfglddel -l0 -a0 删掉raid
    • MegaCli -CfgLdAdd -r5 [50:0, 50:1, 50:2, 50:3, 50:5, 50:6, 50:7, 50:10, 50:14, 50:19]
      WB RA cached cachedbadbbu -hsp[50:23] -force -a0
    • 重新使用dd测试速度,发现正常了,可以达到1GB/s左右,
      使用命令查看速度: while killall -USR1 dd; do sleep 5; done
      [root@Ustor ~]# dd if=/dev/zero of=/dev/sdc bs=1M count=102400  
      6870+0 records in  
      6870+0 records out  
      7203717120 bytes (7.2 GB) copied, 7.20304 s, 1.0 GB/s  
      11645+0 records in  
      11645+0 records out  
      12210667520 bytes (12 GB) copied, 12.2445 s, 997 MB/s  
      16572+0 records in  
      16572+0 records out  
      
    • 由于当前raid5的虚拟磁盘的盘符变成/dev/sdc了,所以要修改/etc/ietd.conf配置文件.
      [root@Ustor ~]# vim /etc/ietd.conf   
      [root@Ustor ~]# /etc/init.d/iscsi-target restart  
      Stopping iSCSI Target:                                     [  OK  ]  
      Starting iSCSI Target:                                     [  OK  ]  
      [root@Ustor ~]# cat /proc/net/iet/volume   
      tid:1 name:iqn.2014-10.com.matrix207:storage.515.disk  
       lun:0 state:0 iotype:blockio iomode:wt blocks:35153510400 blocksize:512 path:/dev/sdc  
      
    • IOMeter, 全写,1M, 速度可以达到800MB/s到900MB/s
    • IOMeter, 全读,1M, 速度可以达到640MB/s以上
    • 修改磁盘预读大小
      [root@Ustor ~]# blockdev --report /dev/sdc   
      RO    RA   SSZ   BSZ   StartSec            Size   Device  
      rw   256   512  4096          0  17998597324800   /dev/sdc  
      [root@Ustor ~]# blockdev --setra 166384 /dev/sdc   
      [root@Ustor ~]# blockdev --report /dev/sdc   
      RO    RA   SSZ   BSZ   StartSec            Size   Device  
      rw 166384   512  4096          0  17998597324800   /dev/sdc  
      
    • vmstat 1 查看系统信息,可用内存还有满多,swap没有使用,io速度达到640MB/s左右,
      cpu还有50%空闲,所以读的速度瓶颈不再系统,在raid卡?
      [root@Ustor ~]# vmstat 1  
      procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu-----  
       r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st  
       3  0    212 401232 108108 1034116    0    0 657920     0 68862 38703  1 38 60  1  0  
       1  0    212 400932 108108 1034116    0    0 645888     0 70047 35516 15 51 34  0  0  
       4  0    212 401248 108108 1034116    0    0 659200     0 69441 39200  1 37 63  0  0  
      
    • 换软raid测试,IOMeter,每个worker写一个磁盘

      [root@Ustor ~]# iostat  
      avg-cpu:  %user   %nice %system %iowait  %steal   %idle  
                 1.00    0.00    8.46    3.98    0.00   86.57  
      
      Device:            tps   Blk_read/s   Blk_wrtn/s   Blk_read   Blk_wrtn  
      sdl               5.00         0.00       128.00          0        128  
      sde               1.00         8.00         0.00          8          0  
      sdd               1.00         8.00         0.00          8          0  
      sdb             444.00         8.00    228864.00          8     228864  
      sdf               1.00         8.00         0.00          8          0  
      sdg               1.00         8.00         0.00          8          0  
      sda               1.00         8.00         0.00          8          0  
      sdc               1.00         8.00         0.00          8          0  
      sdj               1.00         8.00         0.00          8          0  
      sdh               1.00         8.00         0.00          8          0  
      sdi               1.00         8.00         0.00          8          0  
      sdk               1.00         8.00         0.00          8          0  
      sdm               1.00         8.00         0.00          8          0  
      sdn               0.00         0.00         0.00          0          0  
      sdo               1.00         8.00         0.00          8          0  
      
    • IOMeter,每个worker写一个磁盘, 同时写12块盘,如果发现没有速度,可能是盘没有online,记得
      到磁盘管理中把磁盘offline修改为online状态

      [root@Ustor ~]# iostat  
      Linux 2.6.32-279.el6.x86_64 (Ustor) 10/11/2014 _x86_64_ (2 CPU)  
      
      avg-cpu:  %user   %nice %system %iowait  %steal   %idle  
                 1.74    0.00    3.53    0.63    0.00   94.09  
      
      Device:            tps   Blk_read/s   Blk_wrtn/s   Blk_read   Blk_wrtn  
      sdl               2.13        26.85        31.72     223650     264220  
      sde               5.86         3.58      2797.79      29835   23307264  
      sdd               5.73         3.58      2730.31      29843   22745088  
      sdb              41.37         3.89     21039.35      32428  175270400  
      sdf               5.45         3.58      2582.37      29835   21512704  
      sdg               5.91         3.58      2819.61      29835   23489024  
      sda               5.37         3.89      2523.49      32443   21022208  
      sdc               5.93         3.89      2809.16      32419   23401984  
      sdj               5.75         3.64      2729.63      30311   22739456  
      sdh               5.94         3.64      2824.89      30312   23533056  
      sdi               5.59         3.89      2649.98      32416   22075904  
      sdk               5.86         3.33      2805.10      27736   23368192  
      sdm               5.43         3.40      2580.10      28354   21493768  
      sdn               0.00         0.01         0.00         72          0  
      sdo               0.41         3.37         1.23      28034      10248  
      [root@Ustor ~]# vmstat 1  
      procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu-----  
       r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st  
       2  0      0 1417776  20292  95028    0    0    19 15902 1646 1733  2  4 94  1  0  
       4  0      0 1413924  20292  95028    0    0     0 976384 94568 121481  1 76 24  0  0  
       6  0      0 1421192  20292  95028    0    0     0 972032 94269 124334  0 74 26  0  0  
       3  0      0 1415832  20292  95028    0    0     0 969472 93624 123752  0 74 26  0  0  
       4  0      0 1404840  20292  95028    0    0    52 963584 97398 113635  5 77 17  2  0  
       7  0      0 1412384  20292  95028    0    0   104 982784 104578 94228 12 83  2  3  0  
      
    • IOMeter,每个worker读一个磁盘, 同时读12块盘, 速度可以达到1GB/s, 比写速度(900MB/s)快

      [root@Ustor ~]# vmstat 1  
      procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu-----  
       r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st  
       2  0      0 1369880  20704  95032    0    0  2148 23755   51  303  2  5 92  1  0  
       3  0      0 1368868  20712  95024    0    0 1054720    56 64629 64337  3 44 52  1  0  
       0  1      0 1369052  20712  95032    0    0 1070348     0 66405 64505  1 42 57  1  0  
       1  0      0 1367380  20752  94992    0    0 1073192   320 66778 64059  2 47 42  9  0  
       1  0      0 1367884  20752  95040    0    0 1064704    52 64031 65606  0 41 59  0  0  
       5  0      0 1367956  20752  95040    0    0 1067060     0 68887 61204  6 49 42  3  0  
       2  0      0 1367344  20752  95040    0    0 1065524     0 68184 64203  6 49 42  3  0  
       1  0      0 1368640  20752  95040    0    0 1061120     0 67536 65205  4 47 49  0  0  
       1  0      0 1368336  20752  95040    0    0 1063220     0 65961 67546  1 46 49  4  0  
       [root@Ustor ~]# iostat  
       Linux 2.6.32-279.el6.x86_64 (Ustor) 10/11/2014 _x86_64_ (2 CPU)  
      
       avg-cpu:  %user   %nice %system %iowait  %steal   %idle  
                  1.79    0.00    5.78    0.66    0.00   91.77  
      
       Device:            tps   Blk_read/s   Blk_wrtn/s   Blk_read   Blk_wrtn  
       sdl               2.11        25.65        31.81     223658     277372  
       sde              20.30      3708.12      6494.60   32330363   56625152  
       sdd              19.45      3400.88      6371.04   29651587   55547904  
       sdb              51.95      2483.91     23990.94   21656732  209172480  
       sdf              16.94      2481.50      6004.37   21635707   52350976  
       sdg              19.49      3209.14      6580.33   27979899   57372672  
       sda              17.28      2778.00      5861.56   24220843   51105792  
       sdc              18.07      2497.77      6542.98   21777555   57047040  
       sdj              19.37      3375.91      6343.09   29433943   55304192  
       sdh              19.45      3189.82      6575.17   27811416   57327616  
       sdi              18.23      2996.10      6149.07   26122384   53612544  
       sdk              19.47      3286.94      6508.22   28658248   56743936  
       sdm              17.57      2808.12      6001.55   24483506   52326408  
       sdn               0.00         0.01         0.00         72          0  
       sdo               0.41         3.39         1.18      29554      10248  
      
    • mdadm建raid5
      [root@Ustor ~]# ucli dg_create -d r5 -t 5 -n 12 0:0 0:1 0:2 0:3 0:4 0:5 0:6   
      0:7 0:8 0:9 0:10 0:15 -f 2 -x 1 0:16 -s 64 -m 200  
      r5 success  
      [root@Ustor ~]# cat /proc/mdstat   
      Personalities : [raid6] [raid5] [raid4]   
      md0 : active raid5 sdc[12](S) sdn[11] sdl[10] sdm[9] sdd[8] sdi[7] sdj[6] sdk[5] sde[4] sdg[3] sdh[2] sdf[1] sdb[0]  
            21488658752 blocks super 1.0 level 5, 64k chunk, algorithm 2 [12/12] [UUUUUUUUUUUU]  
      unused devices: <none>  
      
    • 修改/etc/ietd.conf , 共享/dev/md0
      [root@Ustor ~]# cat /etc/ietd.conf  
      Target iqn.2014-10.com.matrix207:storage.515.disk  
      Lun 0 Path=/dev/md0,Type=blockio  
      [root@Ustor ~]# cat /etc/initiators.allow  
      iqn.2014-10.com.matrix207:storage.515.disk 192.168.*.*  
      [root@Ustor ~]# /etc/init.d/iscsi-target restart  
      Stopping iSCSI Target:                                     [  OK  ]  
      Starting iSCSI Target:                                     [  OK  ]  
      [root@Ustor ~]# cat /proc/net/iet/volume   
      tid:1 name:iqn.2014-10.com.matrix207:storage.515.disk  
        lun:0 state:0 iotype:blockio iomode:wt blocks:42977317504 blocksize:512 path:/dev/md0  
      
    • IOMeter测试,全写,速度才50MB/s左右而已。。。如果本地dd测试呢?
    • dd测试呢?发现速度也不高,才400MB/s左右
      [root@Ustor ~]# dd if=/dev/zero of=/dev/md0 bs=1M count=1024000  
      1816+0 records in  
      1816+0 records out  
      1904214016 bytes (1.9 GB) copied, 3.99153 s, 477 MB/s  
      2775+0 records in  
      2775+0 records out  
      2909798400 bytes (2.9 GB) copied, 9.00454 s, 323 MB/s  
      4608+0 records in  
      4608+0 records out  
      4831838208 bytes (4.8 GB) copied, 14.0304 s, 344 MB/s  
      6669+0 records in  
      6669+0 records out  
      6992953344 bytes (7.0 GB) copied, 19.0442 s, 367 MB/s  
      9882+0 records in  
      9882+0 records out  
      10362028032 bytes (10 GB) copied, 24.0545 s, 431 MB/s  
      11352+0 records in  
      11352+0 records out  
      
    • 前面是使用ucli来创建raid5的,改用mdadm试一试, 使用10块盘.
      [root@Ustor ~]# mdadm -S /dev/md0  
      mdadm: stopped /dev/md0  
      [root@Ustor ~]# mdadm --create --auto=yes /dev/md0 --raid-devices=10 --level=5   
      /dev/sdb  /dev/sdf /dev/sdh /dev/sdg /dev/sde /dev/sdk /dev/sdj /dev/sdi /dev/sdd /dev/sdm --assume-clean  
      [root@Ustor ~]# dd if=/dev/zero of=/dev/md0 bs=1M count=1024000  
      4095+0 records in  
      4095+0 records out  
      4293918720 bytes (4.3 GB) copied, 5.5965 s, 767 MB/s  
      7841+0 records in  
      7841+0 records out  
      8221884416 bytes (8.2 GB) copied, 10.6231 s, 774 MB/s  
      11473+0 records in  
      11473+0 records out  
      
      速度还可以。
      重启ietd测试。
    • IOMeter测试,全写,速度还是50MB/s左右
    • 当前的读写策略是什么,有没有缓存策略?
    • 删掉磁盘组,改用页面配置磁盘组(使用11块磁盘)、创建iscsi类型的虚拟磁盘,IO模式使用缓冲模式,Sector:4096.
    • IOMeter测试,全写,速度达到800MB/s左右
    • IOMeter测试,全读,速度达到425MB/s左右
    • 在刚才的raid5的磁盘组上创建NAS类型的虚拟磁盘
    • IOMeter测试,12个核,顺序,全写,速度达到900MB/s左右
    • IOMeter测试,12个核,顺序,全读,速度达到350MB/s左右
    • 测试iscsi卷, 一个磁盘组建2个iscsi卷, IOMeter测试,12个核,顺序,全读,速度达到800MB/s以上
      但是vmstat 1和iostat 1查到的io读速度都只有100MB/s多而已,可能因为使用了缓冲模式。
      页面修改为直写模式,重新测试,发现磁盘io速度跟网络的速度匹配上了,看来确实是因为使用了缓冲。
      但使用直写模式,会出现速度不稳定的情况,有时速度会掉到500MB/s多
    • 如果两个NAS卷同时读,性能是否会提高呢?
      再创建一个nas类型的虚拟磁盘nas02,大小102400MB,关系名称sh002, 虚拟磁盘选择nas02,共享虚拟磁盘,
      IOMeter测试,14个核,顺序,全读,速度达到420MB/s左右
      ustat 1 看到速度454220.68KB/s左右
      vmstat 1 看到IO速度60308KB/s左右
      iostat 1 看到单盘IO速度10000KB/s左右(11块磁盘), md0(即raid磁盘组)速度131072KB/s左右。

2014-10-10

  • 使用了打patch的版本就可以了,搞死了,今天!!!!
    [root@localhost dennis]# iscsiadm -m discovery -t st -p 172.16.60.68
    172.16.60.68:3260,1 iqn.2014-10.com.matrix207:storage.4096.disk
    172.16.60.68:3260,1 iqn.2014-10.com.matrix207:storage.515.disk
  • dd了一个文件,使用iet共享,但是在i端还是无法连接, 可能是iet版本(1.4.20.2)有问题?
    明天使用1.4.20,然后打patch试一试。
  • iscsitarget 配置了target name, lun 设备,但是initiator端(linux和windows)无法连接,
    [root@localhost dennis]# iscsiadm -m discovery -t st -p 172.16.60.68
    iscsiadm: No portals found
    调试模式执行ietd -f -d 1, 可以看到一些信息,但是还是无法明白为何连接失败.
  • 光纤网卡直连无法ping通,是因为设置的网口是eth2,但是实际我连接的是eth3网口,
    设置好ip就好了,不用设置route. 另外直接ok的情况下,光纤网卡接口会亮灯.
  • vim怎么查找特殊字符,比如下面的五角星字符?
  • ★★★linux I/O 调优优化
    • I/O 优化
      • I/O 预先读请求的量(内核系统默认先响应读请求,所先响应的量可调):
        查看 blockdev –getra /dev/sda 默认值是256 此为单向
        调整 blockdev –setra 512 /dev/sda
      • I/O 请求队列长度(调大能增加硬盘吞吐量,但要占用更多内存):
        /sys/block/sda/queue/nr_requests
      • 修改I/O调度算法
        cat /sys/block/sda/queue/scheduler (四种I/O调度算法,[]为选中算法)
        每种调度算法的可调参数位于 /sys/block/sda/queue/iosched
        cho noop > /sys/block/sda/queue/scheduler
        deadline (适合小文件读写,跳跃式读写,零散读写(数据库))
        anticipatory (适合大文件读写,整块式,重复读写(web server))
        cfg (完全公平算法)
        noop(没有算法,适用于SAN架构,不在本地优化)
    • 文件系统优化
      • 查看
        filefrag -v /file 查看某文件位于文件系统信息
        dumpe2fs /dev/sda1 查看某分区信息
      • mke2fs -m 5 /dev/sda1 在/dev/sda1中预留5%的block来防止数据分段
        tune2fs -m 10 /dev/sda1 将5%改成10%
        tune2fs -r 1000 /dev/sda1 将5%改成具体block数
      • mount -o data=ordered /dev/sda1 (默认) 文件系统日志区仅存放元数据
        mount -o data=journal /dev/sda1 把数据与元数据都先写入日志区(安全,慢)
        mount -o data=writeback /dev/sda1 不按日志区元数据顺序来写数据(不安全,快)
      • 关闭文件系统访问时间更新
        mount -o notime /dev/sda1
        每隔五秒按日志区元数据来写数据
        mount -o commit=5(默认) /dev/sda1
    • 软RAID优化
      • yum install sysstat(提供iostat,sar等系统信息查看命令) -y
        iostat -x /dev/sda(得到avgrq-sz(每秒平均请求扇区数))
        计算chunk size = avgrq-sz * 512 /1024 /RAID磁盘数 (chunk size 值只能取2的n次方)
      • mdadm -C /dec/md0 -l1 -n2 -b /tmp/md0(外部位图) –write-behind=256 /dev/sdc1 –write-mostly /dev/sdd1
        (当请求满256时,多出的请求读写/dev/sdd1,否则只读写/dev/sdc1,此方式用于当/dev/sdc1性质优于/dev/sdd1)
      • /sys/block/md0/md/sync_speed_max(磁盘同步最大速度)
        /sys/block/md0/md/sync_speed_min(磁盘同步最小速度
  • 安装iscsitarget
  • 继续万兆网卡性能测试
    • 硬raid, 创建RAID5,10块硬盘组成,1块做热备.
      MegaCli -CfgLdAdd -r5 [50:0, 50:1, 50:2, 50:3, 50:5, 50:6, 50:7, 50:10, 50:14, 50:19] -Hsp [50:23] -a0
      MegaCli -ldpdinfo -aall
    • 然后使用fdisk -l 可以查看到系统已经识别到新的虚拟磁盘了。
    • 安装iscsitarget
      • tar xvf iscsitarget-1.4.20.2.tar.gz
      • cd iscsitarget-1.4.20.2
      • make
      • make install
      • /etc/init.d/iscsi-target start
      • /etc/init.d/iscsi-target status
      • /etc/iet/ietd.conf 配置 lun和target name
      • echo “Target iqn.2014-10.com.matrix207:storage.515.disk” >> /etc/ietd.conf
      • echo “Lun 0 Path=/dev/sdb,Type=blockio”>>/etc/ietd.conf
      • echo “Alias lun0”>>/etc/ietd.conf
      • echo “iqn.2014-10.com.matrix207:storage.515.disk 172.16..“>> /etc/initiators.allow
      • echo “iqn.2014-10.com.matrix207:storage.515.disk 192.168..“>> /etc/initiators.allow
      • cat /proc/net/iet/session
      • cat /proc/net/iet/volume 如果查询不到session和volume信息,可能ietd没有跑起来
      • [root@Ustor iscsitarget-1.4.20.2]# ietd -f
        1412892492.525804: kernel module version mismatch!
        碰到版本不对问题,确认下内核模块和ietd本身的版本号,
        查看内核模块版本: modinfo iscsi-trgt
        查看ietd模块版本: ietd -v
        发现两者都是1.4.20.2,那么有可能内核模块正在使用的可能是就旧版,先移除,
        rmmod iscsi_trgt, 然后加载modprobe iscsi_trgt, 然后启动/etc/init.d/iscsi-target restart

2014-10-09

  • 关于LRO,LRO(Large Receive Offload)是针对TCP的机制
  • Chelsio T520-CR 万兆网卡性能测试
    • 驱动下载网址http://service.chelsio.com/, 选择对应型号、平台、包类型
    • http://service.chelsio.com//store2/T5//Unified%20Wire%20(NIC,TOE,vNIC,iWARP,iSCSI,FCoE,WD-UDP)//Linux//ChelsioUwire-2.10.0.0/ChelsioUwire-2.10.0.0.tar.gz
    • 源码包有224MB,有点大…
    • http://www.chelsio.com/wp-content/uploads/resources/T5-Linux-Chelsio-vs-Niantic.pdf
    • 编译安装,参考http://www.chelsio.com/linux/
      • tar xvf ChelsioUwire-2.10.0.0.tar.gz
      • cd ChelsioUwire-2.10.0.0
      • make
      • make install
      • modprobe cxgb4
      • modprobe t4_tom (#optional)
    • ifconfig 会发现除了原来的千兆网卡eth0和eth1外,多了两个网口eth2、eth3,
      Chelsio网卡的Mac地址起始是00:07, 通过这个可以确认ethX是属于万兆网口.
      使用ethtool 可以检查驱动类型,以及支持的速度
      [root@Ustor ChelsioUwire-2.10.0.0]# ethtool -i eth0  
      driver: e1000e  
      version: 2.1.4-NAPI  
      firmware-version: 2.1-2  
      bus-info: 0000:04:00.0  
      [root@Ustor ChelsioUwire-2.10.0.0]# ethtool -i eth2  
      driver: cxgb4  
      version: 2.10.0.0  
      firmware-version: 1.11.27.0, TP 0.1.4.7  
      bus-info: 0000:01:00.4  
      [root@Ustor ChelsioUwire-2.10.0.0]# ethtool eth3  
      Settings for eth3:  
        Supported ports: [ ]  
        Supported link modes:   1000baseT/Full   
                                10000baseT/Full   
        Supports auto-negotiation: Yes  
        Advertised link modes:  1000baseT/Full   
                                10000baseT/Full   
      
    • 配置IP,ifconfig eth2 192.168.1.102 netmask 255.255.255.0 up
    • 性能低的处理
      • 检查是否CPU是瓶颈,输入命令top, 然后输入1,查看CPU使用率,如果超过90%,说明CPU是瓶颈.
      • LRO是否支持
    • [root@Ustor ~]# uname -r
      2.6.32-279.el6.x86_64
  • linux系统万兆网卡性能优化
    • 1.设置MTU 例如: ifconfig eth0 mtu 6000
    • 2.ethtool -g eth0 修改RX TX 为 4096
    • 3.在/etc/sysctl.conf中添加
      • net.ipv4.tcp_rmem = 53687091 53687091 536870912
      • net.ipv4.tcp_wmem = 53687091 53687091 536870912
      • net.ipv4.tcp_mem = 53687091 53687091 536870912
      • net.core.rmem_max = 536870912
      • net.core.wmem_max = 536870912
      • net.core.rmem_default = 53687091
      • net.core.wmem_default = 53687091
      • net.core.optmem_max = 536870912
  • 万兆以太网传输速度实测
  • PCI-E (PCI Express) 介绍
    • PCI-e 1.0 X1的接口可以提供单向250MB/s的带宽,
    • PCI-e 1.0 X1的接口可以提供单向500MB/s的带宽,
    • PCI-e 1.0 X4的接口可以提供单向2000MB/s的带宽,
    • PCI-e 1.0 X8的接口可以提供单向4000MB/s的带宽,
    • 普通的千兆网卡用PCI-e X1接口就可以满足了,但是万兆网卡的就至少要PCI-e X4才
      能刚刚满足带宽需求,因此可以解释市场上见到的万兆网卡基本上都是PCI-e X8接口的,
    • http://bbs.pceva.com.cn/thread-25521-1-1.html
  • 关于网卡故障
    • 现象:
      • 机器背面左边(靠近VGA的)网口灯不亮,IP无法ping通
      • 更换网线,左右两个网口网线对换,直连,接交换机故障依旧
      • 换过一块主板,但使用不了几天又会复现该问题,重启就可以解决,过2天或几天就又会出现。
    • 详细,日志文件 diagnosis/sys/messages.var :
      • kernel: NETDEV WATCHDOG: eth0: transmit timed out
      • kernel: ————[ cut here ]————
      • kernel: WARNING: at net/sched/sch_generic.c:222 dev_watchdog+0xa2/0xfa()
      • kernel: Modules linked in: sha256_generic megaraid_sas e1000e crc32c libcrc32c
      • kernel: Pid: 0, comm: swapper Not tainted 2.6.26.2-ustor20120307 #1
      • kernel:
      • kernel: Call Trace:
      • kernel: —[ end trace 9cf5c834a2cb0d26 ]—
      • kernel: e1000e 0000:04:00.0: eth0: Reset adapter
    • 估计是网卡驱动有问题,导致eth0有问题.
    • /boot/grub/menu.lst 文件中增加 kopt=pcie_aspm=off
    • intel的网卡故障
    • kernel params
    • WARNING: at net/sched/sch_generic.c:261 dev_watchdog 错误 e1000e
    • 有线网络连不上了

2014-10-08

2014-10-03

2014-09-30

  • 数据库主要的瓶颈是计算和存储节点间的网络IO和主存的磁盘IO!
    FusionCube采用InfiniBand 56Gb/s网络和SSD卡作为主存进行解决
  • 万兆网卡性能测试
    • 客户端,windows server 2008 R2 Enterprise(64 bits),
      内存24G,cpu Intel Xeon E5620 2.4GHz, 2 processors, 16核心
      LSI 硬 RAID卡, iSCSI Initiator, 11块磁盘,
      全写速度 450MB/s, BS大小1M,顺序写, 8线程, 1个worker写一个盘(有5个核留空)
      工作网卡网口是Local Area Connection 6(直接光纤对接), 占用带宽约38.5%,
      全速带宽为10Gbps, 即最高可达1250MB/s, CPU使用率2%, 内存使用1.6GB
    • 服务端,Linux, centos 6.3
      • lspci
      • e1000e-3.0.4 驱动安装
      • ChelsioUwire-2.10.0.0 万兆网卡驱动
      • elx-be2net-dd-rhel6-10.0.800.0-1.tar.gz
      • cat /etc/udev/rules.d/70-persistent-net.rules
      • ifconfig eth1 192.168.1.12/24
      • route add default gw 192.168.1.1
      • iscsitarget-1.4.20.2.tar.gz
      • make install
      • /etc/init.d/iscsi-target start
      • /etc/init.d/iscsi-target status
      • /etc/iet/ietd.conf 配置 lun和target name
      • 软raid

2014-09-29

  • linux内核源码阅读之facebook硬盘加速利器flashcache
  • /proc/scsi/scsi, 由linux-x.y.z/drivers/scsi/scsi-proc.c的函数scsi_init_procfs创建
    • 调用过程: init_scsi -> scsi_init_procfs
    • echo ‘scsi remove-single-device 0 1 2 3’ > /proc/scsi/scsi, 相当于直接拔盘
    • echo ‘scsi add-single-device 0 1 2 3’ >/proc/scsi/scsi
    • “0 1 2 3” replaced by the Host, Channel, Id, and Lun.
  • linux内核奇遇记之md源代码解读之三
    学习阵列的创建过程
  • su -c ‘yum update -y’
  • mdadm
    • mdadm /dev/md0 –grow –bitmap=internal
    • cat /proc/scsi/scsi
    • echo “scsi remove-single-device 0 00 01 00” > /proc/scsi/scsi
    • echo “scsi add-single-device 0 00 01 00” > /proc/scsi/scsi
    • mdadm –re-add /dev/md0 /dev/sde
    • mdadm –add /dev/md0 /dev/sde
    • mdadm -E /dev/sde
    • mdadm –zero-superblock /dev/sde
    • cat /proc/mdstat
    • mdadm -D /dev/md0
    • mdadm -S /dev/md0
    • mdadm -A /dev/md0 /dev/sda /dev/sdb
    • dd if=/dev/zero of=./loop1 bs=1M count=100
    • dd if=/dev/zero of=./loop2 bs=1M count=100
    • losetup -f 查看可用的loop设备
    • losetup /dev/loop1 ./loop1
    • losetup /dev/loop2 ./loop2
    • losetup -a 查看所有的loop设备
    • losetup -d /dev/loop1 删除
    • mdadm –create –auto=yes /dev/md0 –raid-devices=2 –level=1 /dev/loop1 /dev/loop2 –assume-clean
    • mdadm –create –auto=yes /dev/md1 –raid-devices=2 –level=1 /dev/loop1 /dev/loop2 –assume-clean
    • mdadm –detail /dev/md0 查看详细
    • mdadm /dev/md0 -f /dev/sdb 设置为faulty
    • mdadm /dev/md0 -r /dev/sdb 移除faulty盘
    • mdadm /dev/md0 -a /dev/sde 加入新盘

2014-09-28

  • mdadm source code
  • 当前使用iscsi可以压到200MB/s的网络速度,看会不会出现内核报错.
    又增加客户端,压到了330MB/s多. 暂时没有错误。
  • IOMeter 对ISCSI卷进行写操作,
    • 工作线程4,写100%, 顺序数据,块大小1MB
    • 结果从最后一次开始计算,更新频率为1秒
  • 追踪CPU跑满的利器,根据不同程度使用:
    • gdb
    • valgrind
    • perf
    • echo t > /proc/sysrq-trigger, perf不好用的时候这个上.
    • /proc/{pid}/wchan,里面是该进程阻塞位置的内核函数名,在所有办法都没戏的时候可以看它
  • 深入浅出多网卡绑定技术
    此文对多网卡绑定进行了简单的解析,不够深入!
  • 传统RAID的性能瓶颈点在哪里?
    传统RAID在数据重构方面表现极差,当一块盘发生故障之后,需要几十个小时才能将故
    障盘中的数据恢复。特别在数据重构的过程中,上层文件系统的性能也会受到极大的影
    响。并且在应用数据压力的情况下,数据重构的IO和应用的IO交错在一起,导致恶性循
    环,使得数据重构和应用IO性能都表现极差。
    当一块磁盘发生故障以后,处于同一个Disk Group中的其他盘将会存在大量的读操作,
    去获取条带数据,然后生成故障盘上的数据,最后写入Spare盘。这是一个完整的数据
    重构过程。所有的读发生在故障盘所处的Disk Group中,写操作只存在Spare上。因此
    ,我们很容易的发现两个性能瓶颈点:
    • Spare盘是写操作性能瓶颈点。如果单盘写入,那么对于SAS盘,其最大的写入带宽可
      以达到130MB/s左右
    • Disk Group中的幸存盘是读操作性能瓶颈点。由于所有的数据都是从一个Disk Group
      中的幸存盘上读取,所以,条带的最大读取带宽只能达到130MB/s左右.
      DDP就能破除这两个性能瓶颈点。为什么呢?因为DDP是基于CHUNK来做RAID的,CHUNK又
      是从一个Storage Pool中获取的。
    • Spare CHUNK的数据写入操作不再局限在一块盘上面,而是可以在整个Storage Pool
      中任意布局。这样,就不再存在单盘写入性能瓶颈的问题了
    • 重构条带数据读操作也不再局限在一个Disk Pool中了,而是分布在整个Storage Pool
      上,当Storage Pool中的磁盘数量足够多时,条带读性能将不再局限在单盘性能上了
  • ★★★一个IO的传奇一生
    当前已经写了14篇文章了,要看完这个!
    IO会经过的层/模块如下:
    • 应用层(用户态)
    • VFS(内核态)
    • 文件系统、块设备或页缓存
    • LVM
    • snapshot
    • RAID
    • multipath
    • SCSI Middle Level
    • HBA driver
    • PCI bus
    • PCI bus
    • 硬件
    • http://blog.51cto.com/zt/593
  • 研发管理的范畴
    5个关键步骤:选方向、定目标、控进度、带团队和排干扰
  • 做IT技术的有哪些出国工作的机会途径?
    • 出国读研
    • 参加国际会议,认识业内同行,怂恿内推
    • 使用招聘网站寻找
    • 外企公司内部调动

2014-09-26

  • 远程桌面连接 rdesktop -f 172.16.110.125 -u administrator
  • nas共享,IOMeter写,网口流量没有跑满,最多60MB/s左右
    iscsi挂载,IOMeter写,可以跑到100MS/s
  • 继续bonding mode=6问题,
    bonding 顺序 eth5:eth2:eth4:eth3, 当前active 5,主要的接收流量也在5,做如下测试
    • 当前状态: 活动接口eth5,流量在eth5
    • 执行操作: 拔掉接口eth5网线
    • 得到状态: 活动接口eth3,流量在eth2
    • 执行操作: 插上接口eth5网线
    • 得到状态: 同上
    • 执行操作: 拔掉接口eth4网线
    • 得到状态: 同上
    • 执行操作: 插上接口eth4网线
    • 得到状态: 活动接口eth3,流量在eth3, 过段时间流量跑eth5上了! 为什么?
    • 执行操作: 拔掉接口eth4网线
    • 得到状态: 活动接口eth3,流量在eth5
    • 执行操作: 插上接口eth4网线
    • 得到状态: 活动接口eth3,流量在eth4! 这次流量没有乱跑。为什么?
    • 执行操作: 设置iscsi卷, 在windows下挂载,使用IOMeter进行写,把流量压上去
    • 得到状态: 活动接口eth3,主流量在eth3,剩余流量在eth4! 总流量在110MB/s左右
      其中eth3占用100MB/s。 为什么?
      
  • Linux网卡高级命令
    • mii-tool,可以用来查看网卡状态信息,包括了以太网连接是否正常,使用的是哪种型号的网卡等等
    • ethtool,通过mii-tool命令可以查看网卡的一些底层信息,但是如果我们想要查看网
      卡的更详细信息,就可以使用ethtool 这个命令,它可以将网卡的所有信息
  • 继续bonding mode=6问题,为什么绑定的是eth2,eth3,eth4,eth5,流量主要在eth4,为什么
    不是eth2,通过cat /proc/net/boding/bond0,可以看到活动的网口是eth2.
    • ifdown eth4, ustat 1查看网络状况,发现流量跑到eth3上了
    • ifup eth4, ustat 1查看网络状况,流量仍然在eth3上了
    • ifdown eth3, ustat 1会卡死,重新跑ustat 1,发现流量跑到eth2上了
    • ifdown eth2, 发现流量跑到eth5上了
    • 发现网口down后会自动up,谁在搞鬼?(可以通过 ifconfig, 查看各网口是否出现
      “UP BROADCAST RUNNING”, 没有的话表示是down状态)
    • 重新设置bonding的IP以及接口顺序.
      ucli network -s -i 172.16.110.53 -w 172.16.110.1 -n 255.255.255.0 -m 1500 -u eth2:eth4:eth5:eth3 -d bond0
    • ucli network –start
    • [root@Ustor ~]# grep -i slave /proc/net/bonding/bond0
      Primary Slave: None  
      Currently Active Slave: eth2  
      Slave Interface: eth2  
      Slave queue ID: 0  
      Slave Interface: eth4  
      Slave queue ID: 0  
      Slave Interface: eth5  
      Slave queue ID: 0  
      Slave Interface: eth3  
      Slave queue ID: 0  
      
    • 从上面的操作结果看出,网络接口的顺序是有变化的.
    • 另外发现,只是修改了一个的绑定,为什么eth0和eth1的绑定消失了?
    • 重新做bonding,
      [root@Ustor ~]# cat /proc/net/bonding/bond0 |grep -i 'Interface'  
      Slave Interface: eth5  
      Slave Interface: eth2  
      Slave Interface: eth4  
      Slave Interface: eth3  
      
      同时发现活动网口是eth5(Currently Active Slave: eth5)
      再次确认bongding模式是6(Bonding Mode: adaptive load balancing)
    • ustat 1 发现主要流量在eth5, 这个是对的.
    • ifconfig eth4 down, 后发现流量跑到了eth4
    • ifconfig eth2 down, 流量依然在eth4, eth2的修改没有影响到eth4
    • 活动网口还是在eth5, 这好像有问题!
      [root@Ustor ~]# grep "Active" /proc/net/bonding/bond0  
      Currently Active Slave: eth5  
      
      做如下操作:
      [root@Ustor ~]# ifconfig eth5 down  
      [root@Ustor ~]# grep "Active" /proc/net/bonding/bond0  
      Currently Active Slave: eth2  
      [root@Ustor ~]# grep "Active" /proc/net/bonding/bond0  
      
      原来是这样,eth5 down的时候确认改变了活动网口
      [root@Ustor ~]# grep Interface /proc/net/bonding/bond0  
      Slave Interface: eth5  
      Slave Interface: eth2  
      Slave Interface: eth4  
      Slave Interface: eth3  
      [root@Ustor ~]# ifconfig eth2 down  
      [root@Ustor ~]# ifconfig eth4 down  
      [root@Ustor ~]# grep "Active" /proc/net/bonding/bond0  
      Currently Active Slave: eth3  
      
      活动网口是eth3,可是流量却在eth5,为什么?
    • 在正常情况下,网卡只接收目的硬件地址(MAC Address)是自身Mac的以太网帧,对于
      别的数据帧都滤掉,以减轻驱动程序的负担。但是网卡也支持另外一种被称为混杂
      promisc的模式,可以接收网络上所有的帧,比如说tcpdump,就是运行在这个模式下。
      bonding也运行在这个模式下,而且修改了驱动程序中的mac地址,将两块网卡的Mac
      地址改成相同,可以接收特定mac的数据帧。然后把相应的数据帧传送给bond驱动程序处理。
    • 接收负载均衡是通过ARP协商实现的。
      • bonding驱动截获本机发送的ARP应答,并把源硬件地址改写为bond中某个slave的
        唯一硬件地址,从而使得不同的对端使用不同的硬件地址进行通信。
      • 来自服务器端的接收流量也会被均衡。当本机发送ARP请求时,bonding驱动把对端
        的IP信息从ARP包中复制并保存下来。当ARP应答从对端到达 时,bonding驱动把它
        的硬件地址提取出来,并发起一个ARP应答给bond中的某个slave。
      • 使用ARP协商进行负载均衡的一个问题是:每次广播 ARP请求时都会使用bond的硬件
        地址,因此对端学习到这个硬件地址后,接收流量将会全部流向当前的slave。这个
        问题可以通过给所有的对端发送更新(ARP应答)来解决,应答中包含他们独一无二的
        硬件地址,从而导致流量重新分布。
      • 当新的slave加入到bond中时,或者某个未激活的slave重新激活时,接收流量也要
        重新分布。接收的负载被顺序地分布(round robin)在bond中最高速的slave上.
      • http://www.cnblogs.com/wjoyxt/archive/2014/06/19/3798299.html
    • http://hi.baidu.com/linuxtrip/item/9dd232261dc8b7dfa417b66d
    • Linux Bond的原理及其不足
  • 从dj接手万兆网卡性能问题, 400MB/s,应该有800MB/s才对.
    • 机器是gty的,11块硬盘应该是dj的
    • 存储是linux, 客户端是windows server
    • 当前是通过万兆网卡直联,千兆网卡没有接线,暂时无法ssh连入.

2014-09-25

  • 拉钩网
  • ustat 显示混乱,考虑重写
  • getopt_long 如何获取参数的第二个第三个值呢?通常只能获取一个值!
    如: ustat -t 2 3 7, 如何获取3和7

2014-09-24

  • bonding的源代码分析
  • ifenslave源码在内核目录中./linux-2.6.32.63/Documentation/networking/ifenslave.c
    编译gcc -Wall -O -I/usr/src/linux/include ifenslave.c -o ifenslave
  • bond说明文档,./linux-2.6.32.63/Documentation/networking/bonding.txt
  • ifenslave, 通过下面3个步骤创建bond
    • 确保需要的驱动已加载
      # modprobe bonding ; modprobe <3c59x|eepro100|pcnet32|tulip|...>
      
    • 给要创建的bond分配一个IP
      # ifconfig bond0 <addr> netmask <mask> broadcast <bcast>
      
    • 指定把要附加的网口
      # ifenslave [{-f|--force}] bond0 eth0 [eth1 [eth2]...]  
      
      如果bond0没有mac地址,就会使用eth0的, 后面所有的网口将使用相同的mac地址(ALB/TLB模式除外)
  • 每一次在修改bond0的mode后,都需要重新启动计算机,才能使修改生效
  • Linux bonding源码在内核网络驱动中kernel/linux-2.6.32.63/drivers/net/bonding/
    • 源码
      • bond_3ad.c
      • bond_3ad.h
      • bond_alb.c
      • bond_alb.h
      • bonding.h
      • bond_ipv6.c
      • bond_main.c
      • bond_sysfs.c
      • Makefile
    • 使用
      • ifconfig bond0 ipaddress netmask up
      • ifconfig bond0 down
      • ifenslave bond0 eth0
      • modprobe bonding miimon=100 mode=6
      • ifconfig bond0 172.16.50.9 netmask 255.255.255.0 up
      • ifenslave bond0 eth0 eth1
      • cat /proc/net/bonding/bond0
    • bond_main.c分析
      Mode of operation
      • 0 for balance-rr
      • 1 for active-backup
      • 2 for balance-xor
      • 3 for broadcast
      • 4 for 802.3ad
      • 5 for balance-tlb
      • 6 for balance-alb
        [root@Ustor ~]# cat /proc/net/bonding/bond0
        Ethernet Channel Bonding Driver: v3.6.0 (September 26, 2009)
        Bonding Mode: adaptive load balancing
        可以看出当前是模式6
      • [BOND_MODE_ROUNDROBIN] = “load balancing (round-robin)”,
      • [BOND_MODE_ACTIVEBACKUP] = “fault-tolerance (active-backup)”,
      • [BOND_MODE_XOR] = “load balancing (xor)”,
      • [BOND_MODE_BROADCAST] = “fault-tolerance (broadcast)”,
      • [BOND_MODE_8023AD] = “IEEE 802.3ad Dynamic link aggregation”,
      • [BOND_MODE_TLB] = “transmit load balancing”,
      • [BOND_MODE_ALB] = “adaptive load balancing”,
  • 总结zd15linux文档

2014-09-23

  • iscsi问题日志分析
  • 网络异常问题定位
  • [root@Ustor ~]# lspci -nn |grep -i ethernet |awk -F’[][]’ ‘{print $4}’ |awk -F’:’ ‘{print $2}’ |uniq
    1533
    1526
  • awk 数组长度
    bus_dev=(`lspci -nn |grep -i ethernet |awk -F'[][]' '{print $1,$4}' |awk '{print $1,$NF}'`)
    bus_dev_num={#bus_dev[*]}
    
  • awk 搜索中括号问
    • http://bbs.chinaunix.net/thread-3620027-1-1.html
    • [][]处理成为匹配]或[
    • [[]]处理成为匹配[]
    • [root@Ustor ~]# lspci -nn |grep -i ethernet
      03:00.0 Ethernet controller [0200]: Intel Corporation I210 Gigabit Network Connection [8086:1533] (rev 03)  
      04:00.0 Ethernet controller [0200]: Intel Corporation I210 Gigabit Network Connection [8086:1533] (rev 03)  
      09:00.0 Ethernet controller [0200]: Intel Corporation 82576 Gigabit Network Connection [8086:1526] (rev 01)  
      09:00.1 Ethernet controller [0200]: Intel Corporation 82576 Gigabit Network Connection [8086:1526] (rev 01)  
      0b:00.0 Ethernet controller [0200]: Intel Corporation 82576 Gigabit Network Connection [8086:1526] (rev 01)  
      0b:00.1 Ethernet controller [0200]: Intel Corporation 82576 Gigabit Network Connection [8086:1526] (rev 01)  
      
    • [root@Ustor ~]# lspci -nn |grep -i ethernet |awk -F’[][]’ ‘{print $4}’
      8086:1533  
      8086:1533  
      8086:1526  
      8086:1526  
      8086:1526  
      8086:1526  
      
  • lscpi
    • -n 查询显示ID, 下面显示的8086:0c00 表示厂商ID:设备ID
      [root@Ustor ~]# lspci -n  
      00:00.0 0600: 8086:0c00 (rev 06)  
      00:01.0 0604: 8086:0c01 (rev 06)  
      00:01.1 0604: 8086:0c05 (rev 06  
      
    • -nn查询显示ID和文本信息
    • -d 查询显示指定ID的设备信息
    • http://hi.baidu.com/longlong524524/item/11e1759b1ded31cd7b7f0194
  • 网口和bus信息关系
    [root@Ustor ~]# ls -l /sys/class/net/eth*/device |awk -F'/' '{print $5, $9}'  
    eth0 0000:03:00.0  
    eth1 0000:04:00.0  
    eth2 0000:09:00.0  
    eth3 0000:09:00.1  
    eth4 0000:0b:00.0  
    eth5 0000:0b:00.1  
    
  • bus-info 格式含义 bus-info: 0000:03:00.0
    • http://pkgs.fedoraproject.org/repo/pkgs/ethtool/下载ethtool source
    • 发现最后是调用ioctl(fd, SIOCETHTOOL, ifr)来填充的bus_info栏位
    • 貌似可以这样: Linux下检测网卡与网线连接状态,使用ioctl向socket发送SIOCETHTOOL命令字
      可以参考 http://idear.blog.51cto.com/4097017/853582
    • 这个是内核网站下的链接 https://www.kernel.org/pub/software/network/ethtool/
      通过该链接的上层目录,还可以看到其他很多工具
    • struct ethtool_drvinfo 声明在ethtool-copy.h
      char bus_info[ETHTOOL_BUSINFO_LEN]; / Bus info for this IF. /
      / For PCI devices, use pci_name(pci_dev). /
    • 跟踪下去就到 struct ifreq 的ifru_data , 而该成员类型是字符指针类型
    • google->linux bus information format
      查看这个网页, http://linux.die.net/man/8/lspci, 可以看到字样:
      The name of the slot where the device resides ([domain:]bus:device.function).
      所以,0000是域,03是bus号,00是设备号,0是功能号?
    • 通过lspci -h可以看到如下信息:
      -s [[[[]:]]:][][.[]] Show only devices in selected slots
      可以确认了上面说的格式形式。
  • Linux网络接口信息
    • 接口信息 ls -l /sys/class/net/eth*/device
    • 全部接口 ls -l /sys/class/net/eth*/device |awk -F’/‘ ‘{print $9,$NF,$5}’ |awk ‘{print $3}’ |sort
    • 是否启动 cat /sys/class/net/eth*/operstate
  • 如何用你家的猫黑掉邻家的无线网络
    项圈里安装了一个Spark Core芯片,里面有他特制的固件程序,还有一个WiFi卡,以及一个微型GPS模块和电池。
    • 固件程序应该是用来对扫猫到的无线网络进行破解
    • wifi卡用来扫猫无线网络
    • GPS模块用来记录行走路径
    • 电池当然是提供电源了
      后续提到了wardialing技术,容易破解的WEP加密方式
  • CipherShed
    CipherShed is free (as in free-of-charge and free-speech) encryption software for keeping
    your data secure and private. It started as a fork of the now-discontinued TrueCrypt Project.
  • vi插入时间配置
    :nnoremap “=strftime(“%F %R”)gP

2014-09-22

  • ubuntu 12.04 环境无法编译resume项目, make pdf 出现错误:
    Font T1/cmr/m/n/10=ecrm1000 at 10.0pt not loadable: Metric (TFM) file or
    installed font not found.
    解决方法
    • sudo apt-get install texlive-latex-recommended texlive-latex-extra texlive-fonts-recommended
    • sudo apt-get install tex-gyre
  • 修改完善简历!
  • 华为创新的未来:任正非答“2012实验室”科学家16问
  • 华为2012实验室
  • 4网口的网卡确实存在问题,明天再解!
  • 挂载问题
  • WiFi定位-SkyHook接口
  • Wi-Fi 定位的原理是什么?
    • 使用无线网卡
  • How to get wireless mac address on linux
    • 使用无线网卡
      • 插入无线网卡,如果可以扫描无线信号就跳过下面的步骤.
      • dmesg 查询是否可以识别无线网卡,如果可以,继续下一步
      • lsusb, 查询网线网卡芯片号, 然后去网上搜索相关的源码
        [dennis@localhost ~]$ lsusb  
        Bus 001 Device 008: ID 0bda:8179 Realtek Semiconductor Corp. RTL8188EUS 802.11n Wireless Network Adapter  
        <https://github.com/lwfinger/rtl8188eu>  
        git clone https://github.com/lwfinger/rtl8188eu.git  
        make && make install   
        modprobe 8188eu  
        [root@localhost rtl8188eu-master]# modinfo 8188eu  
        filename:       /lib/modules/3.15.8-200.fc20.x86_64/kernel/drivers/net/wireless/8188eu.ko  
        version:        v4.1.4_6773.20130222  
        author:         Realtek Semiconductor Corp.  
        description:    Realtek Wireless Lan Driver  
        
      • iwlist wlp0s29f7u8 scanning | grep -i -E “Address|ESSID”
      • 参考http://blog.csdn.net/rainysia/article/details/17484537
  • iscsi
    • command used by ucli
      • ietadm –op new –tid=0 –user –params Name=%s
      • ietadm –op new –tid=%d –user –params=IncomingUser=%s,Password=%s
      • ietadm –op new –tid=%d –lun=%d –params Path=/dev/%s/%s,IOMode=%s,Sector=%s,Type=%s
      • ietadm –op delete –tid=%d
      • ietadm –op delete –tid=%s –sid=%s –cid=%s
      • ietadm –op delete –tid=%d –user –params=IncomingUser=%s
      • ietadm –op update –tid=%d –lun=%d
      • ietadm –op update –tid=%d –params=InitialR2T=No,ImmediateData=Yes,MaxRecvDataSegmentLength=8192,
        MaxXmitDataSegmentLength=8192,MaxBurstLength=262144,MaxOutStandingR2T=8,Wthreads=%d
    • config file
      • /etc/ietd.conf
      • /etc/iscsi.user
      • /etc/initiator.allow
      • /etc/cf/conf/ietd.ini
      • /etc/cf/conf/iscsi.conf
    • monitor
      • /proc/net/iet/session
      • /proc/net/iet/volume

2014-09-19

  • 绑定流程:
    首先会使用-s保存网络参数到配置文件,然后使用–start读取配置文件的网络参数,设置网络。
    ucli network -s -i …. -d bond0 设置网络
    ucli network –start 启动网络
    • network.c
      • -s 参数会调用net_write_conf函数把相关配置写入配置文件/etc/cf/conf/network.conf.monitor
      • –start 参数会调用 net_start 函数
      • net_write_conf 函数
        调用 net_write_ini
        调用 net_write_ini
      • net_start 函数
        调用 net_analysis_conf
    • netanalysis.c
      • net_analysis_conf 函数
        执行 modprobe -r bonding
        调用 net_set_bond
      • net_set_bond 函数
        检查/etc/cf/bonding_policy.conf, 取出mode
        执行modprobe bonding mode=%d max_bonds=%d miimon=100
        默认情况下mode的值为6
    • 配置文件信息
      [root@Ustor ~]# grep confxml /etc/ucli.conf  
      confxmlpath=/etc/cf/conf/  
      [root@Ustor ~]# cat /etc/cf/conf/network.conf.monitor  
      ##### Network INI File #####  
      [bond0]  
      ip=172.16.110.52  
      netmask=255.255.255.0  
      gw=172.16.110.1  
      num=eth2:eth3:eth4:eth5  
      [bond1]  
      ip=172.16.110.51  
      netmask=255.255.255.0  
      gw=172.16.110.1  
      num=eth0:eth1  
      
  • 解决页面网卡信息显示错误问题
  • Linux bonding
    • 检查内核模块
      • modinfo bonding
      • lsmod |grep bond
    • 编辑配置文件
      • etc/sysconfig/network-scripts/ifcfg-bond0
      • etc/sysconfig/network-scripts/ifcfg-eth0
      • etc/sysconfig/network-scripts/ifcfg-eth1
      • /etc/modprobe.conf
    • bonding的模式:0-6,即:7种模式
      • mod=0 即:(balance-rr) Round-robin policy(平衡抡循环策略)
        传输数据包顺序是依次传输(即:第1个包走eth0,下一个包就走eth1....
        一直循环下去,直到最后一个传输完毕),此模式提供负载平衡和容错能力
        
      • mod=1 即: (active-backup) Active-backup policy(主-备份策略)
        只有一个设备处于活动状态,当一个宕掉另一个马上由备份转换为主设备。
        
      • mod=2 即:(balance-xor) XOR policy(平衡策略)
      • mod=3 即:broadcast(广播策略)
      • mod=4 即:(802.3ad) IEEE 802.3ad Dynamic link aggregation(IEEE 802.3ad 动态链接聚合)
      • mod=5 即:(balance-tlb) Adaptive transmit load balancing(适配器传输负载均衡)
      • mod=6 即:(balance-alb) Adaptive load balancing(适配器适应性负载均衡)
        该模式包含了balance-tlb模式,同时加上针对IPV4流量的接收负载均衡
        (receive load balance, rlb),而且不需要任何switch(交换机)的支持。
        
    • mod=6与mod=0的区别:
      • mod=0,会发现2个口的流量都很稳定,基本一样的带宽。缺点:需要交换机支持
      • mod=6,先把eth0流量占满,再占eth1,….ethX;不需要交换机支持
    • cat /proc/net/bonding/bond0
    • http://www.huawei.com/ecommunity/bbs/10155553.html
  • linux内核网络相关职位
    • linuxc/c++研发工程师(内核网络服务开发方向)
      • 熟练掌握C语言,有linux内核模块开发经验。
      • 熟悉Linux内核协议栈,Netfilter框架和内核模块开发。
      • 熟悉tcp/ip协议,熟悉常用http,ftp,p2p等应用层协议。
    • 网络开发工程师
      负责云计算网络产品预研开发。
      • 熟悉Linux或FreeBSD系统,内核,系统开发,c语言精通;
      • 熟悉网络原理和实现,了解L4-7层的负载均衡原理、网络安全、攻防原理;
      • 有负载均衡,高性能网络服务器, 网络安全相关研发经验的优先;
      • 熟悉Linux内核(网络相关),有相关开发调试经验优先。
    • linux内核开发工程师(网络通信方向)
      • 精通linux内核开发,精通c/c++语言,基本数据结构算法使用熟练;
      • 熟悉互联网网络架构,熟悉路由交换技术;
      • 了解网络编程,TCP/IP协议栈原理和编程,熟悉linux下iptables的扩展应用;
      • 熟悉linux路由内核架构及设计,熟悉应用协议分析,及软件架构设计;
  • Linux内核开发方向发展如何?
    • 纯搞kernel主要外企,工资少,upstream开发,任务有挑战性,也比较专注
    • BAT等互联网公司,工资高,内部维护,fix bugs/backport,挑战性低了很多,也比较杂
    • 按照某宝的算法,积极向上5年kernel开发,工资大约15K左右,年底奖金大约50K左右,
      另外4年总共给30w左右的股票。
    • ★★★业务永远是王道,技术都是支撑业务的
  • Linux内核七项发展方向
    • 虚拟化技术
  • 如何学习LINUX,网络方向的
    • 1.系统方面,熟练使用linux操作系统下各种命令,服务配置,开源软件管理,特别是
      偏互联网方向的web,proxy,cache,db,storage等系统以及iptables,netstat
      ,iostat,sar,free等内存、IO、CPU、网络等系统管理工具。
    • 2.脚本方面,熟练使用shell编程,熟练掌握3P(PHP,PERL,PYTHON)之一。
    • 3.网络方面,看看《TCP/IP网络》方面的书籍,找个小公司接触各种网络设备,并学
      以致用,如必要靠一些网络证书。
    • 4.程序方面,熟练使用C语言编程,看完《UNIX环境高级编程》,完成各种课后习题。
    • 5.内核方面,基于以上学习,看LINUX内核代码。
    • 6.然后找一个大公司做LINUX网络方向的工作,开启职业生涯。

2014-09-18

  • 工作上有如下几个问题要解决:
    • 组IP,负载均衡
      • 功能作用是什么?
      • iscsi 工作ok
    • 绑定IP, 负载均衡
      • 功能作用是什么?
      • iscsi 工作fail
    • samba性能问题
      • 千兆网卡只跑到70~80MB/s,正常应该跑到100MB/s,iscsi和nfs就可以.
    • 万兆网卡页面显示问题
  • zd15linux
    解决ip修改问题和raid降级槽位错误问题
    • 增加中文README_CN
    • 增加一次编译产生raid1和ssd系统安装包
    • 修正IP修改重启后失效问题, dhcp修改为静态ip
    • 删除读取配置文件时打印信息
    • 在umtool中增加获取raid磁盘组和磁盘信息
    • 修改umtool获取raid状态错误的问题

2014-09-17

  • 编译更新e1000e驱动
    • 当前系统中的版本是2.1.4-NAPI
      [root@Ustor ~]# modinfo e1000e  
      filename:       /lib/modules/2.6.32-279.el6.x86_64/kernel/drivers/net/e1000e/e1000e.ko  
      version:        2.1.4-NAPI  
      license:        GPL  
      description:    Intel(R) PRO/1000 Network Driver  
      author:         Intel Corporation, <linux.nics@intel.com>  
      
    • 编译安装
      • scp e1000e-3.1.0.2.tar.gz root@172.16.110.52:/root
      • ssh root@172.16.110.52
      • tar xvf e1000e-3.1.0.2.tar.gz
      • cd e1000e-3.1.0.2
      • make install
      • lsmod |grep e1000e
      • modinfo e1000e
      • rmmod e1000e; modprobe e1000e 移除旧版本,安装新版本
        更换驱动后,网络访问会失败,需要重新启动网络服务(通过172.16.110.125串口操作)
        service network restart  
        ucli network --stop  
        ucli network --start  
        
      • ethtool -i eth0 确认当前使用的驱动版本是刚才编译的
        [root@Ustor ~]# ethtool -i eth0  
        driver: e1000e  
        version: 3.1.0.2-NAPI  
        firmware-version: 1.9-0  
        bus-info: 0000:04:00.0  
        
    • ustat 1 查看网络情况
    • vim使用:r !dmesg查看kernel信息
    • http://sourceforge.net/projects/e1000/files/e1000e%20stable/

2014-09-16

  • git tutorials: comparing workflows
  • 时刻提醒自己,目标是什么, linux kernel developer.
  • Linux多网口绑定实现负载均衡出现的问题
    swapper: page allocation failure. order:0, mode:0x20
    Pid: 0, comm: swapper Not tainted 2.6.32-279.el6.x86_6
    • 一个临时解决方案是sysctl -w vm.zone_reclaim_mode=1
    • http://blog.csdn.net/hopingwhite/article/details/7712334
    • Linux内存管理优化:面向低延迟/高吞吐量数据库GraphDB
    • /proc/sys/vm/zone_reclaim_mode
    • local, 172.16.110.52
    • lsmod |grep bonding
    • modinfo bonding
    • mode:Mode of operation;
      • 0 for balance-rr
      • 1 for active-backup
      • 2 for balance-xor
      • 3 for broadcast
      • 4 for 802.3ad
      • 5 for balance-tlb
      • 6 for balance-alb (charp)
    • Linux的多网卡绑定功能使用的是内核中的”bonding”模块,bonding驱动提供了绑定/集成(bond)
      多个网卡为一个虚拟逻辑网口的功能.一般来说,分为热后备(hot standby)和负载均衡(load balancing).
  • zd15linux
    • 使用rm -rf代替rsync来删除数据盘的文件
    • 删除多余的安装包

2014-09-15

  • AWS EC2
    • aws.amazon.com, login with user-name and passwd
    • create INSTANCE
      • example CentOS 7.0
    • ssh login
      • when create instance, remember to download the pem file
      • ssh -i [full path of pem file] ec2-user@host-ip
      • 54.169.26.101
    • scp upload files
      • scp -i ~/.ssh/denniskey.pem xfs.log ec2-user@host-ip:/home/ec2-user/
      • the upload file should add after the pem key file
    • install software
      • sudo yum install SOFTWARE
    • default, can not login with root
    • Not need password to login
    • ssh login using root
      • sudo passwd 修改root passwd
      • sudo vi /etc/ssh/sshd_config 增加以下两项
        PermitRootLogin yes
        PasswordAuthentication yes
      • 重启sshd服务
        sudo service sshd restart
    • http://www.codemind.net/wordpress/138.html
    • http://leonax.net/p/3280/connect-amazon-ec2-instance-through-putty/
  • Rapidly clean directory with rsync
    • mkdir empty
    • rsync -a –delete empty/ dest/
  • zd15linux
    • 解决没有清空数据盘文件的bug
    • 修正备份覆盖文件逻辑
    • 增加支持对数据盘进行单独备份和恢复

2014-09-12

  • Linux下使用rsync最快速删除海量文件的方法
    • 1.先安装rsync: yum install rsync
    • 2.建立一个空的文件夹: mkdir /tmp/test
    • 3.用rsync删除目标目录: rsync –delete-before -a -H -v –progress –stats /tmp/test/ log/
    • 选项说明:
      • –delete-before 接收者在传输之前进行删除操作
      • –progress 在传输时显示传输过程
      • -a 归档模式,表示以递归方式传输文件,并保持所有文件属性
      • -H 保持硬连接的文件
      • -v 详细输出模式
      • –stats 给出某些文件的传输状态
    • my code: (using for function)
      • TMPDIR=mktemp -d /tmp/rsync.XXXXXX
      • rsync –delete-before -a -H -v –progress –stats $TMPDIR $1
    • http://www.ha97.com/4107.html
  • zd15linux
    修改bug
    • 解决RAID重建亮红灯的问题
    • 增加备份数据时提示是否覆盖原有数据
    • 增加在恢复数据盘时清空原有数据
  • 上午请假至14:00

2014-09-11

  • 请假

2014-09-10

  • 请假

2014-09-09

  • 请假

2014-09-08

  • 中秋放假
  • Linux performance tools

2014-09-07

  • linux sync

2014-09-06

  • bash trap

2014-09-05

  • zd15linux
    追加文件raid.sh和urestore.conf,解决restore分区问题
    • 之前使用.gitignore忽略了/src/bin目录,这次增加跟踪,追加raid.sh和urestore.conf到项目中
    • 解决restore.sh分区的bug
    • BUG:暂时解决不了要重新分区的恢复
  • zd15linux BUG:
    在重新分区后,无法识别新分区,待解决!
  • zd15linux 做测试
    [ 2014-09-05.16:53:01.540043674 ]:  partition for os  
    [ 2014-09-05.16:53:01.685951668 ]:  make filesystem for os  
    [ 2014-09-05.16:53:04.764767987 ]:  partition for data  
    [ 2014-09-05.16:53:04.898527619 ]:  make filesystem for data  
    [ 2014-09-05.16:53:04.900724698 ]:  finish partition  
    
    理论上做附件系统是很费时的,这里不应该那么快, 这么快,应该是/dev/sda4,/dev/sda5
    都还没有生成,或者说没有被系统识别到,有问题.
    参考这个 partx替代partprobe让硬盘识别新分区
    使用partx -a /dev/sda8 /dev/sda 和partprobe /dev/sda8 都不能解决.
  • md5计算
    备份前:
    [root@localhost ~]# md5sum backup/*  
    5b968f65a7eb10b630863be645b73daf  backup/boot.disk  
    4db90379f3803309dc015d675f79fcf2  backup/data.tar.gz  
    0154d194cc0eba696addf243483e38d6  backup/mbr.disk  
    8772e8539c94fac5ecbee14069e5ed68  backup/partition.bak  
    660faac9dc850f835c0fc603ba29da91  backup/root.disk
    
    备份后:
    [root@localhost ~]# md5sum backup/*  
    96e8a605b036e5ffa4d621a90c3cd9ad  backup/boot.disk  
    f43bb8c7443067141c605cabe64a8a72  backup/data.tar.gz  
    0154d194cc0eba696addf243483e38d6  backup/mbr.disk  
    8772e8539c94fac5ecbee14069e5ed68  backup/partition.bak  
    3c985bd0a26d92ac665fa1fd1b351ec6  backup/root.disk  
    7cb0c761f78bdf65b87bea458550c397  backup/root.tar.gz  
    
    发现只有mbr.disk和partition.bak是没有变的,其实这也合理。
  • 想看看linux的操作系统安装程序是怎么实现的
  • 测试没有raid的情况下自动创建raid
  • 解分区不坏的情况的恢复要正常
  • 解dd根分区异常问题

2014-09-04

  • 全部分区删掉,恢复时候出现dd根分区空间容量不足的怪问题.
  • 全部分区保留, 删除修改几个文件,dd恢复os后,发现文件有问题,怎么破? 但是用tar
    就没有问题,但是tar的话启动不了系统,会报错.
  • zd15linux
    增加支持自动创建raid功能,ssd增加安装megacli
    • 修改urestore.conf, 支持根分区指定备份类型(tar或dd,默认dd)
    • ssd打包增加megacli,用来支持uraid工具
    • urestore增加支持自动创建raid功能,由urestore.conf配置
    • urestore增加检查系统挂载点,防止再没有raid的情况下误恢复到当前系统盘
    • 修改技术文档

2014-09-03

  • zd15linux
    增加备份mbr,增加判断/dev/sda是否为要备份的磁盘,防止误操作内置盘,增加raid工具
    • 增加uraid工具,可以自动创建RAID1和RAID5
    • 增加备份恢复mbr
    • 增加在磁盘分区时判断和创建磁盘label
    • 增加检测当前是否有磁盘做恢复
    • 分区表不再每次恢复系统后做备份
  • 做了一个uraid工具, 可以创建raid1,raid5
  • 执行parted -s /dev/sda p出现错误”Error: Can’t have a partition outside the disk!”
    • 参考这篇文章http://www.rodsbooks.com/missing-parts/,使用如下方法,但没解决.
      • sfdisk -d /dev/sda >parts.txt
      • sfdisk --force /dev/sda <parts.txt
    • 发现问题了,原来我之前备份的系统使用的1.8T的磁盘空间,当前的raid1值有999GB,
      在根据之前的分区表进行分区时,当然会出现分区outside the disk的问题.
  • 进入内置盘系统, radi系统盘被识别为/dev/sda, 插入两块新盘,安装Megacli命令,
    做成新的raid1,并被识别为/dev/sdc,这个时候系统中有两个raid1. 为了方便识别raid
    可以用命令megacli -LDSetProp -Name "ldnew" -L1 -aALL命名raid, 其中-L1表示
    设置VD1
  • 是否要做一个工具,可以自动把两块指定slot位置的磁盘做成raid1(当然也可以自动把
    指定slot的N块磁盘做成raidX),方便测试.
  • 确认raid1的系统是好的,然后进入内置盘备份,重启,插入两块新盘做新的raid1,
    再次进内置盘系统,做恢复,看是否ok
  • 做如下测试:
    • 1.保留出现光标进不了系统的raid1,拔出磁盘。
    • 2.插入两块新盘,做raid1建逻辑盘, DVD安装系统时做好分区并写入主引导记录(MBR),
      然后退出(即不安装系统), 重启系统看会不会出现grub引导.
    • 3.插入1和2共四块磁盘,进入内置盘系统,查看比较上面1和2的磁盘信息,看有什么差异。
  • 备份恢复MBR分区法份方法如下:
    • 备份MBR: dd if=/dev/sda1 of=/root/mbr bs=512 count=1
    • 恢复MBR: dd if=/root/mbr of=/dev/sda1 bs=512 count=1
  • 硬盘的分区表是存放在硬盘的446字节开始的64个字节中,备份硬盘分区表的方法如下:
    • 备份硬盘分区表: dd if=/dev/sda1 of=/root/mbr bs=1 skip=446 count=64
    • 恢复硬盘分区表: dd if=/root/mbr of=/dev/sda1 bs=1 skip=446 count=64

2014-09-02

  • 恢复MBR,还是起不了,也没有grub界面…???
  • 做一个试验,使用光盘进入安装界面,创建好挂载点比格式化磁盘,然后退出,进内置
    盘系统,看里面是不是有MBR信息了。
  • MBR(Master Boot Record),主引导记录(512bytes)=启动代码(446bytes)+硬盘分区表(64bytes)+0x55 0xAA
  • 重新启动系统后,显示其就一个小横线一闪一闪, 没有出现grub加载;怀疑根本就没有
    grub信息在这个逻辑盘上,通过进入内置盘的系统,dd出来/dev/sda上前512字节内容
    和内置盘系统所在磁盘的512字节做比较,发现确实无grub信息.
    可能是这样:
    • fdisk的分区,第一个分出来的/boot是跟逻辑盘的前512字节在一起的?
    • 使用pated分区, 第一个分出来的/boot是从1024字节开始的?
    • 已经装过系统的逻辑盘,上面的前512B有保留grub信息
    • 新建逻辑盘,上面没有grub信息
    • 硬盘的前512字节到底放了些什么东西?
  • 在新的raid1中执行系统恢复,出现错误“Error: /dev/sda: unrecognised disk label”
    直接执行parted -s /dev/sda mkpart primary ext4 0 200M, 就有上面的问题, 找了
    一下原因,应该是没有做mklabel的缘故, 增加执行命令parted -s /dev/sdb mklabel msdos
  • 拿掉原来的raid1磁盘,重新插入两个磁盘, 做好raid1后直接reset来恢复all,看是否ok.
  • ★★★在为企业为产品付出艰辛的过程中,有时候会掉进不断完善的深渊.其实改变和提高自己
    才是最重要的, 别忘了自己的初衷!
  • 有空可以研究下zmap的实现框架

2014-09-01

  • zd15linux
    根分区恢复使用dd替代tar,增加恢复UUID
    • tar恢复/分区会造成root帐号无法登陆的问题,改用dd恢复
    • 增加在重新分区后自动更新grub.conf和fstab中的UUID功能
    • 另外tar好像会造成swap分区丢失,需要修改fstab才能挂载
  • tar 增加-p参数,依然会报”tar: Exiting with failure status due to previous errors”
  • sed -i ‘s/ONBOOT=no/ONBOOT=yes/‘ /etc/sysconfig/network-scripts/ifcfg-eth0
    service network restart
  • root帐号登陆不了,在登陆界面发现Boot messages, 出现如下错误:
    Mounting local filesystems: mount: mount point swap does not exist  
    
    发现正常的显示如下:
    UUID=c58f19b5-5405-474a-94f2-a2776756e245 /      ext4  defaults   1 1  
    UUID=cd8bd041-e9db-4771-b5ac-fef16c633d99 /boot  ext4  defaults   1 2  
    UUID=7f2d1527-4cce-4050-98b8-e05a21c17083 swap   swap  defaults   0 0  
    
    而恢复的/etc/fstab是这样:
    UUID=8f7b15ed-ebcc-406e-bb58-f9f241ebb6e4 /      ext4  defaults   1 1  
    UUID=b48495ff-d476-44e5-9f9e-202fb52df2f2 /boot  ext4  defaults   1 2  
    UUID=7895e26f-e08c-4823-bee5-c64d4efa16e0 /data  ext4  defaults   1 2  
    UUID=0c0204b3-f0ca-48a2-ae9a-6a8056b6fe2c swap    defaults        0 0  
    
    尝试修改,然后重新启动看看是否正常
    启动后,不再报swap的mount错误了,但是root帐号还是进不了,闪退…
  • BackupYourSystem/TAR
  • tar的过程中会出现如下错误,会不会影响备份?
    tar: Exiting with failure status due to previous errors
    http://bbs.csdn.net/topics/390849085
  • sed中使用变量,应该使用双引号替代单引号
  • sed中使用变量,应该使用双引号替代单引号
  • 客户windows版本恢复失败?咋搞?
  • 修改swap分区的UUID
    注意,不能使用tune2fs,该命令只能用于ext2/3/4系统(man tune2fs可以查到)
    如果swap分区正在使用,要先停止,swapoff, 然后mkswap /dev/sdaX, 就会看到新
    的UUID产生了,但是是无法设置为指定的UUID。记得修改/etc/fstab,使得UUID一致.
  • 修改了根目录所在分区的UUID,确认根/boot/grub/grub.conf中的UUID一样,重启看能
    不能正常启动。发现在fsck.ext4做磁盘检测时发现数据分区的UUID不正确,出现错误
    信息,进入root帐号修改了该分区UUID,然后重新启动。ok,进入系统桌面了。可是无
    法登陆,怎么回事? 切换到字符模式,发现是登陆了一下就退出了。如果使用错误的
    秘密会出现错误提示. 可能是数据不完整,比如说lost+found目录不存在导致的?
  • 修改UUID, awk使用=或空格符号做分隔符
    • grep 'UUID.*data' /mnt/root/etc/fstab |awk -F'=| ' '{print $2}'
    • grep UUID /mnt/boot/grub/grub.conf |awk -F'=| ' '{print $6}' |xargs tune2fs /dev/sda2 -U
  • 关于zd15linux可以使用虚拟机来做测试
  • Ubuntu系统备份恢复升级策略
  • CentOS 如何重新安装开机管理程序GRUB

2014-08-31

  • Dash与Bash的语法区别
    如今Debian和Ubuntu中,/bin/sh默认已经指向dash,这是一个不同于bash的shell,
    它主要是为了执行脚本而出现,而不是交互,它速度更快,但功能相比bash要少很多,
    语法严格遵守POSIX标准,下面简要列举下从bash迁移到dash一般需要注意的问题.
    dennis@dennis:~$ ls -l /bin/sh
    lrwxrwxrwx 1 root root 4 Mar 27 19:19 /bin/sh -> dash*
    http://www.linuxfly.org/post/686/
  • Wicked Cool Shell Scripts: The Library
  • Bash shell-scripting libraries

2014-08-30

  • parted 源码下载 http://ftp.gnu.org/gnu/parted/
  • 所以在备份的时候,还需要备份分区的UUID,然后在做磁盘分区的时候要把UUID写回.
  • LINUX查看分区UUID的方法
    • blkid
    • ls -l /dev/disk/by-uuid/
    • cat /etc/fstab
  • Linux生成分区UUID
    • uuidgen会返回一个合法的uuid,结合tune2fs可以新生成一个uuid并写入ext2,3,4
      分区中uuidgen |xargs tune2fs /dev/sda[0-9] -U
    • 也可以把fstab里找到的原uuid写回分区: tune2fs -U $UUID /dev/sda[0-9]
  • 20:06下班
  • 使用parted进行分区还原后,启动失败,是磁盘分区的UUID已经变掉了?待验证!
  • ubackup
    ...  
    /mnt/root/bin/lssubsys  
    /mnt/root/bin/dbus-send  
    /mnt/root/bin/hostname  
    /mnt/root/net/  
    **tar: Exiting with failure status due to previous errors** 为什么错误  
    finish backup /  
    ...  
    
  • [root@localhost ~]# parted -s /dev/sda print

    Model: LSI MR9260-8i (scsi)  
    Disk /dev/sda: 1000GB  
    Sector size (logical/physical): 512B/4096B  
    Partition Table: msdos  
    
    Number  Start   End     Size    Type      File system     Flags  
     1      1049kB  525MB   524MB   primary   ext4            boot  
     2      525MB   11.3GB  10.7GB  primary   ext4  
     3      11.3GB  15.6GB  4295MB  primary   linux-swap(v1)  
     4      15.6GB  1000GB  984GB   extended  
     5      15.6GB  1000GB  984GB   logical   ext4  
    
  • parted进行分区
    -s, –script
    never prompts for user intervention  
    
  • zd15linux
    • 使用parted替代fdisk对分区进行格式化
    • 完成备份和恢复脚本功能, 增加还原的log, 增加版本信息
    • Update README
  • 错误 restore.sh: line 211: [: ==: unary operator expected
    对应 if [ $RESTORE_TYPE == $RESTORE_TYPE_OS ]; then
    原因 RESTORE_TYPE没有成功赋值
  • 下午13:44来加班

2014-08-29

  • zd15linux
    • 修改备份和恢复脚本,增加备份分区表,恢复依赖分区表
  • fdisk -l 错误Partition 1 does not end on cylinder boundary
    参考 http://bbs.csdn.net/topics/390269137
  • fdisk
  • Linux下磁盘批量化自动分区挂载脚本实现
  • [root@localhost ~]# fdisk -l /dev/sda |grep ‘^/dev/sda’
    /dev/sda1   *           1         131     1048576   83  Linux  
    /dev/sda2             131        2742    20971520   83  Linux  
    /dev/sda3            2742        3264     4194304   82  Linux swap / Solaris  
    /dev/sda4            3264      121535   950008832    5  Extended  
    /dev/sda5            3264      121535   950007808   83  Linux   
    
    这里可以看到使用DVD通过安装装系统后,得到的分区表的start会跟上一end是相等的
    但是在使用fdisk /dev/sda进行格式化磁盘时:
    [root@localhost ~]# fdisk /dev/sda  
    .......(省略)  
    Command (m for help): n  
    Command action  
       e   extended  
       p   primary partition (1-4)  
    p  
    Partition number (1-4): 1  
    First cylinder (1-121534, default 1):   
    Using default value 1  
    Last cylinder, +cylinders or +size{K,M,G} (1-121534, default 121534): 131   
    Command (m for help): n  
    Command action  
       e   extended  
       p   primary partition (1-4)  
    p  
    Partition number (1-4): 2  
    First cylinder (132-121534, default 132): 131 (**必须使用的起始值要大于end**)  
    Value out of range.  
    First cylinder (132-121534, default 132):   
    Using default value 132  
    Last cylinder, +cylinders or +size{K,M,G} (132-121534, default 121534): 200  
    
    这就造成无法使用fdisk /dev/sda来还原分区了?!!
    怎么破?
    可是为什么要还原呢?因为如果/root分区的数据是用dd方式来备份的话,那么还原
    也应该是用dd,但是如果分区大小不一致会造成dd出错吗?
  • 下午解备份恢复问题
  • zd15linux
    解决降级显示slot num问题, umtool增加设置重建功能
    • 增加设置配置文件值
    • 修改raid1的slot位置信息获取逻辑
    • umtool增加设置重建功能
    • raid1磁盘组降级显示具体降级slot号错误, 重建只显示slot号
    • 增加megcli相关命令执行记录

2014-08-28

  • zd15linux
    修改raid状态获取方式
    • 更新dev-plan.xls,增加bug记录
    • 修改raid状态获取方式,slot的获取还有问题
    • 增加megacli帮助文件
  • 设置raid磁盘组名,megacli -LDSetProp -Name "VDtest" -Lall -aALL
  • 如果raid1降级,而且现在里面只插入一块磁盘,而且现在重新启动umonitor,该报
    哪个slot出现问题? 这个时候根本就无法查看该raid1由哪些磁盘组成!
  • 简化命令 echo "alias megacli=/opt/MegaRAID/MegaCli/MegaCli64">>~/.bashrc
  • 硬RAID查询riad包含哪些磁盘
    • megacli -LdPdInfo -aAll
    • 还可以这样查,megacli -CfgDsply -a0,这是从做windows版的SNMP的代码得到的.

2014-08-27

  • Linux shel 的Here document 用法
    • 什么是Here Document
      Here Document 是在Linux Shell 中的一种特殊的重定向方式,它的基本的形式如下
      cmd << delimiter
      Here Document Content
      delimiter
      它的作用就是将两个delimiter之间的内容(Here Document Content 部分) 传递给
      cmd 作为输入参数。
    • 参考 http://www.2cto.com/os/201307/231010.html
  • zd15linux
    安装raid1系统时,分区到第四个,会自动出现扩展分区
    增加umtool工具,解决Bug,更新备份和恢复的工作方式
    • 简化和清理Makefile
    • 增加内存单位显示,单位使用MB
    • 修改备份和恢复脚本为使用配置文件信息做具体操作
    • 修改硬盘容量显示,使用两位小数的浮点数,单位保留使用GB
    • 解决重建状态显示为降级的问题,增加显示具体重建的磁盘
    • 增加umtool工具,用于获取指定的监控信息,可供第三方使用

2014-08-26

  • 通过resume项目,使用pandoc打印安装文档为pdf;
    打印的时候要注意以下几点:
    • 1.不能使用#号标题
    • 2.主标题后有3行说明
    • 3.不能使用_符号
  • zd15linux
    加密shell脚本,修改安装脚本
    • 合并raid1系统中的监控软件包及其依赖包,执行一次安装脚本即可全部安装
    • 增加加密shell脚本backup.sh和restore.sh
    • 修改脚本名,恢复使用urestore,备份使用ubackup,隐藏实现方式
    • 修改安装脚本,增加停止和启动进程功能
  • shc 加密shell脚本

2014-08-25

  • at 操作
    • 指定时关机
      [root@ ~]# at 21:30 2014-08-25
      at> sync
      at> sync
      at> shutdown -h now
      at> #注意这里的是CTRL+D结束at指令
      job 5 at 2014-08-25 21:30
    • atq 查看at队列
    • at -l 查看at列表
    • atrm 4 删除指定队列号任务
  • 上午测试了raid1系统软件,下午测试ssd系统软件.
  • zd15linux
    完善Makefile的安装包功能, 替换sendmsg为umsg
    • 增加恢复功能自动判断格式化磁盘功能
    • 修改磁盘剩余容量获取方式
    • 修改内存使用率获取方式
    • SSD安装包增加backup.sh
    • 增加系统和软件安装步骤文档install-steps.md
    • 整理doc下的文档,增加项目设计文档zd15-design.doc
    • 完善Makefile的安装包功能
    • 删除没有用到的头文件
    • 删除没有多余的rpm包
    • 修改使用sendmsg的地方为umsg

2014-08-24

2014-08-23

2014-08-22

  • iscsi auto login
    • iscsicli logintarget iqn.xxxyyyzzz.com:rr.aabb T 192.168.1.5 3260 aabb 123456789098 1 0
  • zd15linux
    配置环境
    • 修改 /etc/sysconfig/network-scripts/ifcfg-eth0, 设置自动启动eth0网络
    • 安装软件包,增加lm_sensors-libs-3.1.1-17.el6.x86_64.rpm和
      net-snmp-libs-5.5-44.el6.x86_64.rpm包, 修改安装脚本, 解决依赖问题
    • memory used 跟 top 不一致
    • 编写backup.sh和restore.sh
    • 增加backup.sh
    • 修改restore.sh
    • 修改partition.sh
    • 增加两个rpm包,完善raid1系统软件的单机rpm软件安装
    • 删除ureset中的测试代码
    • 测试了系统恢复,使用dd恢复分区,平均速度才6.9M/s, 太慢了.
      1044162+0 records in  
      1044162+0 records out  
      534610944 bytes (535 MB) copied, 76.2583 s, 7.0 MB/s  
      finish restore /boot  
      20980890+0 records in  
      20980890+0 records out  
      10742215680 bytes (11 GB) copied, 1560.92 s, 6.9 MB/s  
      finish restore /  
      [root@localhost ~]# echo 1560/60 |bc  
      26  
      耗时共27分钟 
      
  • awk grep sed

2014-08-21

  • zd15linux
    安装raid1的操作系统, 补充如下选择
    • Basic Server
    • 开发 -> 开发工具[x]
    • 开发 -> 服务器平台开发[x]
    • 桌面 -> 桌面[x]
    • 中文支持
  • 用RPM打包软件
  • zd15linux
    完成系统恢复功能,重整模块关系,升级umsg
    • 修改安装gcc的rpm安装脚本
    • 删除没有用到的代码文件
    • 重命名sendmsg为umsg
    • 重命名os_reset为ureset
    • 升级umsg功能,可以发送全部指令,但帮助信息只保留基本功能
    • 从seriad抽离通用消息通信标志0x5555,改由umonitor启动时发送
    • 从seriad抽离系统恢复代码,改为发送消息给系统恢复模块处理
    • 增加restore.sh用来执行实际的系统恢复操作
    • 增加doc/termios.md,Linux串口开发说明文档
  • enum 类型,最大值0xFFFFFFFF, 即4个bytes
  • Linux使用fdisk自动分区shell脚本

2014-08-20

  • zd15linux
    解决串口指令没有收到的问题了,程序是要跟显示控制器沟通才能收到数据,之前发送
    的是0x1020,但是真正发送出去的顺序会是 20 10, 而需要的是 10 20, 顺序搞反了
    修改后就正确了.
  • linux串口程序
  • linux串口参数设置
  • zd15linux
    在SSD上上安装windows2003,然后raid1启动,恢复操作系统,进入windows2003, 看
    会不会收到串口指令启动恢复脚本. 以此来确定串口指令发送是没有问题的.
    原来的linux分区为500M, 3052M, 26980M(剩余空间), 安装widnwos2003时删除所有分区,
    使用整个硬盘安装.
    进入windows2003系统,安装一些软件后, 重起进入raid1,做恢复操作,确实可以收到
    指令执行脚本进行恢复动作.

2014-08-19

2014-08-18

  • zd15linux
    找到子标题字符乱码问题的原因了,串口设置有问题,参考
    ★★★http://www.dotblogs.com.tw/k/archive/2012/07/24/73572.aspx
    IP地址也可以解决.
  • zd15linux
    • 解决调试信息打印格式
    • 从seriald中抽离系统恢复代码到os_reset, Makefile增加单独编译该模块
    • 从安装盘中拷贝gcc安装所需rpm包,放到tools/gcc目录,用于SSD的Basic Server版本
    • 删除没有用到的tools目录下的rpm包
  • dd备份分区, 看来dd恢复系统会很快.
    [root@localhost ~]# dd if=/dev/sda1 of=/root/boot.disk  
    1024000+0 records in  
    1024000+0 records out  
    524288000 bytes (524 MB) copied, 3.66355 s, 143 MB/s  
    [root@localhost ~]# dd if=/dev/sda2 of=/root/root.disk  
    20971520+0 records in  
    20971520+0 records out  
    10737418240 bytes (11 GB) copied, 94.0496 s, 114 MB/s  
    [root@localhost ~]# dd if=/dev/sda3 of=/root/data.disk  
    10485760+0 records in  
    10485760+0 records out  
    5368709120 bytes (5.4 GB) copied, 45.122 s, 119 MB/s  
    重起进入raid1系统,乱删一统,然后,reset OS,进入SSD后做恢复操作  
    [root@localhost ~]# dd if=boot.disk of=/dev/sda1  
    1024000+0 records in  
    1024000+0 records out  
    524288000 bytes (524 MB) copied, 32.7281 s, 16.0 MB/s  
    [root@localhost ~]# dd if=root.disk of=/dev/sda2  
    20971520+0 records in  
    20971520+0 records out  
    10737418240 bytes (11 GB) copied, 712.276 s, 15.1 MB/s  
    
    看来备份跟恢复的速度比是1:10, anyway, 先关机,然后启动系统进入raid1,看系统
    有没有恢复成功.
    OK, 恢复成功! 删掉的文件又回来了.
  • zd15linux只支持恢复,不支持备份, 备份需要手动操作完成,不属于产品功能范畴?
  • 判断硬盘类型:
    [root@localhost ~]# lsscsi
    [0:2:0:0] disk LSI MR9260-8i 2.13 /dev/sda
    [1:0:0:0] disk ATA SanDisk SSD U100 10.5 /dev/sdb
    记得安装lsscsi-0.23-2.el6.x86_64.rpm
    判断系统根目录安装在哪个硬盘分区可以使用
    [root@localhost ~]# mount |grep “ \/ “ |awk ‘{print $1}’
    /dev/sdb3
    由以上这两个结果,就可以知道系统装在哪个硬盘上.
  • 有时候出现安装缺少libxxx.so, 其实不是要取安装libxxxxx.rpm, 而是要安装xxx.rpm
  • 在SSD上手动安装gcc,涉及的安装包
    • 1.rpm -ivh libgcc-4.4.7-3.el6.x86_64.rpm
    • 2.rpm -ivh kernel-headers-2.6.32-358.el6.x86_64.rpm
    • 3.rpm -ivh glibc-headers-2.12-1.107.el6.x86_64.rpm
    • 4.rpm -ivh glibc-devel-2.12-1.107.el6.x86_64.rpm
    • 5.rpm -ivh mpfr-2.4.1-6.el6.x86_64.rpm
    • 6.rpm -ivh cpp-4.4.7-3.el6.x86_64.rpm
    • 7.rpm -ivh ppl-0.10.2-11.el6.x86_64.rpm
    • 8.rpm -ivh cloog-ppl-0.15.7-1.2.el6.x86_64.rpm
    • 9.rpm -ivh gcc-4.4.7-3.el6.x86_64.rpm
    • 合并安装应该是这样(没有验证)
      rpm -ivh libgcc-4.4.7-3.el6.x86_64.rpm kernel-headers-2.6.32-358.el6.x86_64.rpm \
      glibc-headers-2.12-1.107.el6.x86_64.rpm glibc-devel-2.12-1.107.el6.x86_64.rpm \
      mpfr-2.4.1-6.el6.x86_64.rpm cpp-4.4.7-3.el6.x86_64.rpm ppl-0.10.2-11.el6.x86_64.rpm \
      cloog-ppl-0.15.7-1.2.el6.x86_64.rpm gcc-4.4.7-3.el6.x86_64.rpm
  • 在raid1系统运行时, 回形针插入reset孔,选择restore OS, 系统会自动重起. 这个功能
    应该相当于按了主机的复位键. 重起后系统会给SSD盘供电(通过2pin电源线), 这样系统
    会优先进入SSD中的系统.
  • 安装完开发版后,安装ipmitool和OpenIPMI, 然后启动服务
    • rpm -ivh ipmitool-1.8.11-13.el6.1.x86_64.rpm
    • rpm -ivh OpenIPMI-libs-2.0.16-14.el6.x86_64.rpm
    • rpm -ivh OpenIPMI-2.0.16-14.el6.x86_64.rpm
    • chkconfig ipmi on
    • service ipmi start
  • 鉴于CentOS6.4 Basic Server版yum代理,fileproxy代理都无法安装gcc OpenIPMI ipmitool,
    也无法通过iso文件做rpm包安装(依赖过多), 打算重新安装系统,装开发版(1316个安装包)
  • 单独安装OpenIPMI的rpm包会出现很多的依赖警告:
    [root@localhost ~]# rpm -ivh /mnt/dvd/Packages/OpenIPMI-devel-2.0.16-14.el6.x86_64.rpm  
    warning: /mnt/dvd/Packages/OpenIPMI-devel-2.0.16-14.el6.x86_64.rpm: Header V3  
    RSA/SHA1 Signature, key ID c105b9de: NOKEY  
    error: Failed dependencies:  
        OpenIPMI = 2.0.16-14.el6 is needed by OpenIPMI-devel-2.0.16-14.el6.x86_64  
        OpenIPMI-libs = 2.0.16-14.el6 is needed by OpenIPMI-devel-2.0.16-14.el6.x86_64  
        libIPMIlanserv.so.0()(64bit) is needed by OpenIPMI-devel-2.0.16-14.el6.x86_64  
        libOpenIPMI.so.0()(64bit) is needed by OpenIPMI-devel-2.0.16-14.el6.x86_64  
        libOpenIPMIcmdlang.so.0()(64bit) is needed by OpenIPMI-devel-2.0.16-14.el6.x86_64  
        libOpenIPMIglib.so.0()(64bit) is needed by OpenIPMI-devel-2.0.16-14.el6.x86_64  
        libOpenIPMIposix.so.0()(64bit) is needed by OpenIPMI-devel-2.0.16-14.el6.x86_64  
        libOpenIPMIpthread.so.0()(64bit) is needed by OpenIPMI-devel-2.0.16-14.el6.x86_64  
        libOpenIPMIui.so.1()(64bit) is needed by OpenIPMI-devel-2.0.16-14.el6.x86_64  
        libOpenIPMIutils.so.0()(64bit) is needed by OpenIPMI-devel-2.0.16-14.el6.x86_64  
        pkgconfig(ncurses) is needed by OpenIPMI-devel-2.0.16-14.el6.x86_64  
    
  • ext2

2014-08-16

  • 备份
  • linux安装分区选择参考 http://www.cnblogs.com/gylei/archive/2011/12/04/2275987.html
    建议zd15linux raid1系统分区为:
    • 标配(1T 3.5寸硬盘, 160G 2.5寸SSD硬盘, 4G 内存)
      • /boot 500M
      • swap 16384M (16G)
      • / 5120M (5G)
      • /data 51200M (50G)
      • /bs 51200M (50G)
      • 用掉122G
    • 测试(1T 3.5寸硬盘, 32 G 2.5寸SSD硬盘, 2G 内存?)
      • /boot 500M
      • swap 2048M (2G)
      • / 5120M (5G)
      • /data 5120M (5G)
      • /bs 5120M (5G)
      • 用掉18G
    • 这样的分区便于在SSD上做备份还原, 要不然可能存不了那么多的数据,但是这样又很
      浪费1T的磁盘空间
  • zd15linux 系统正确的安装方式:
    • SSD磁盘接到主板SATA口上(目前测试来看,位置0或1都可以)
    • 设置BIOS中的SAS CONFIG模式为IDE,不要使用AHCI,启动顺序为CD/DVD第一,
      第二如果接了SSD就是SSD,否则应该是MegaRaid
    • 在raid1上安装系统
      • 拔掉SSD上的5pin电源线
      • raid卡接入主板相应卡槽, 磁盘柜插入两块1T的硬盘
      • 开机按ctrl+H进入RAID卡设置,选中两块磁盘建raid1
      • 重新启动接DVD光驱, 安装CentOS6.4到刚才建的raid1磁盘上
      • 使用指定分区安装方式(Create Custom Layout)
      • 目前的分区/boot 500M, swap 3052M, / 剩余空间
      • 启动项选择默认的/dev/sda即可
      • 选择Basic Server,自定义增加桌面
      • 安装完毕后,重起确认能进入系统(桌面型)
    • 在SSD上安装系统
      • 插上SSD上的5pin电源线,还有一根数据线
      • 拔掉主板上的raid卡(如果保留raid卡和相应的硬盘插入状态, 等下的安装过程中
        会识别raid1的磁盘为/dev/sda, SSD变成/dev/sdb; 这个时候如果引导程序装在
        /dev/sda上的话,如果raid1的引导出现问题, SSD上的系统就进不了; 如果装在
        /dev/sdb上的话,如果raid1磁盘没有接入, SSD会是/dev/sda, 但上面没有引导
        程序,同样启动失败.
      • 重新启动接DVD光驱, 安装CentOS6.4到SSD硬盘上
      • 使用指定分区安装方式(Create Custom Layout)
      • 目前的分区/boot 500M, swap 3052M, / 剩余空间(约26G)
      • 启动项选择默认的/dev/sda即可
      • 选择Basic Server
      • 安装完毕后,重起确认能进入系统(终端型)
    • SSD上安装完后,关机,接上RAID卡,插入raid1的磁盘,开机,按del健进入bios
      可以看到o动顺序里第二的是SSD,没有MegaRaid. 这时候可以从SSD启动.
    • 确认可以SSD启动后,拔掉SSD接口的5pin电源线, 开机, biso确认启动顺序第二的
      是MegaRaid,继续启动可以进入raid1的桌面系统
  • blkid 查看分区UUID
    /dev/sda3: UUID="bb5a9c5c-e290-49aa-af89-be82a9835e1c" TYPE="ext4"  
    /dev/sda1: UUID="a5a53e5d-517a-4fd3-9959-0424eaca48da" TYPE="ext4"  
    /dev/sda2: UUID="8b9c0d24-2a81-4920-bead-31a6daa5de3c" TYPE="swap"  
    /dev/sdb1: UUID="ecbb87e1-ca97-44b4-ac0d-f9ee21f00612" TYPE="ext4"  
    /dev/sdb2: UUID="4bb5f2ab-7a00-4c1a-9ebc-aa690a2fc288" TYPE="swap"  
    /dev/sdb3: UUID="6b333930-6286-4358-8925-1245fdf2c83c" TYPE="ext4"  
    
    通过此命令输出,再配合grub.conf的可以确认从哪个磁盘分区启动
  • cat /boot/grub/grub.conf
    default=0  
    timeout=5  
    splashimage=(hd0,0)/grub/splash.xpm.gz  
    hiddenmenu  
    title CentOS (2.6.32-358.el6.x86_64)  
       root (hd0,0)  
       kernel /vmlinuz-2.6.32-358.el6.x86_64 ro root=UUID=6b333930-6286-4358-89  
              25-1245fdf2c83c rd_NO_LUKS  KEYBOARDTYPE=pc KEYTABLE=us rd_NO_MD   
              crashkernel=auto LANG=zh_CN.UTF-8 rd_NO_LVM rd_NO_DM rhgb quiet  
       initrd /initramfs-2.6.32-358.el6.x86_64.img  
    
    说明grub启动已经从指定的UUID磁盘启动
  • 解磁盘阵列抢占本地磁盘/dev/sda问题, 本地磁盘变成/dev/sdb,导致系统启动出现问题.
    这种现象是因为连接外部存储的适配器的优先级比本地的scsi/fc的适配器的优先级高造成的.
  • 早上10:10左右过来加班,晚上19:10左右离开.

2014-08-15

2014-08-14

2014-08-13

  • zd15linux
    • ssd安装CentOS6.4
      • 设置自动连接eth0, 修改/etc/sysconfig/network-scripts/ifcfg-eth0中
        ONBOOT=no为yes, 然后重起, 下次就可以正常连接网络了.
      • 该系统如何检测到raid1中的磁盘分区呢?
      • fdisk -l 找不到raid1磁盘, 原来是没有插入硬盘, 插入硬盘后且安装MegaCli
        rpm -ivh Lib_Utils-1.00-09.noarch.rpm MegaCli-8.00.48-1.i386.rpm,然后
        /opt/MegaRAID/MegaCli/MegaCli64 -pdlist -aAll 找到磁盘,重起系统
      • 重起系统进的是raid1中的系统,Y? 就是不能从SSD中启动…
  • Whonix,匿名操作系统,可以隐藏真实IP和DNS, 就算root被入侵,也无法获取.
  • HACK BACK A DIY Guide for those without the patience to wait for whistleblowers

2014-08-12

  • 上传之前写的setproctitle例子到github的C仓库中
  • zd15linux
    • 拔掉SSD的4pin电源线,不接2pin电源线, 测试后发现,linux和windows发送给串口
      的数据是一样的-_-, 那到底为什么一个正常一个乱码呢????, message消息发送也
      是一样的,但linux下就发送不成功!!!
    • 既然暂时解决不了备份恢复的问题,先看看乱码问题.
    • ssd的windows上开启远程登陆,这样就不用跑到机器边做操作
    • 编译windows的serialcomm动态库,在ssd上跑,保存发送的串口信息. 用来对比linux
      中发送的信息,希望解决子菜单最后一个字符乱码问题以及发送消息失败问题
    • ssd上运行Ghost32.exe,备份raid1中的Linux失败
  • ds2img

2014-08-11

2014-08-10

  • 书籍”Linux内核探秘:深入解析文件系统和设备驱动的架构与设计”
  • 内核学习和应用四个阶段
    • 起步阶段
      起步阶段基本都是从驱动入手。这一阶段的表现是,实际做过几个驱动,能够移植
      驱动到不同的系统平台,对驱动能够做一定的修改,能够裁剪内核,以适应具体的
      需求;对Linux的bootloader能够根据需求做修改。
    • 熟练阶段
      对内核的一个或者几个部分比较熟悉,针对熟悉部分,可以进行深度的开发应用。
      比如对设备驱动相关的总线、设备、中断比较熟悉,并且可以做深层次的开发。这
      一阶段的特点是对内核的理解还不够全面,需要时间积累增加对内核整体的把握。
    • 高级阶段
      对整个内核的重要部分都进行了比较深入的分析。这一阶段的特点是全面性,即使
      要学习内核某些新的重要特性,也能在短时间内迅速掌握重点。
    • 终极阶段
      此阶段是Linux内核组维护人员所达到的水准,能做开创性的工作,具有重大的应用
      价值。处于这个阶段的主要是欧美的资深开发人员(或者说是内核hacker),国内达
      到这个水准的技术人员非常少。
  • ★★★深入分析Linux内核源码
    • 虚拟文件系统
    • 主要数据结构间的关系
      • 超级块struct super_block 是对一个文件系统的描述 http://oss.org.cn/kernel-book/ch08/8.2.1.htm
      • 索引节点inode是对一个文件物理属性的描述
      • 目录项dentry(directory enrty)是对一个文件逻辑属性的描述
      • 文件与进程之间的关系是由task_struct来描述的
      • 一个进程所处的位置是由fs_struct来描述的
      • 而一个进程(或用户)打开的文件是由files_struct来描述的
      • 而整个系统所打开的文件是由file结构来描述
    • Ext2文件系统
  • 深入分析Linux内核源代码 陈莉君 编著
  • journal block device (jbd)源代码分析——ext3日志机制分析
  • xfs测试
    • dd if=/dev/zero of=/home/dennis/xfs.data bs=1M count=1024
    • sudo apt-get install xfsprogs
    • sudo mkdir /mnt/xfs
    • sudo mount /home/dennis/xfs.data /mnt/xfs
    • sudo cp xfs.log /mnt/xfs
    • df -Th |grep -E “Filesystem|xfs”
      Filesystem Type Size Used Avail Use% Mounted on
      /dev/loop0 xfs 1014M 33M 982M 4% /mnt/xfs
    • dennis@dennis:~$ sudo tune2fs -l /dev/loop0
      tune2fs 1.42 (29-Nov-2011)
      tune2fs: Bad magic number in super-block while trying to open /dev/loop0
      Couldn’t find valid filesystem superblock.
  • 从文件 I/O 看 Linux 的虚拟文件系统
  • 学习 Linux,101: 硬盘布局
  • 学习 Linux,101: 创建分区和文件系统
  • 在centos5.1上应用xfs文件系统
  • centos6构建XFS文件系统

2014-08-08

2014-08-07

  • zd15linux
    增加rpm包,解决centos6.4版本系统信息获取问题
    • 修改获取磁盘剩余容量方法bug, 解决出现换行情况的问题
    • 解决Centos6.4版本获取已使用内存错误问题
  • zd15linux
    • 安装centos6.4到raid1中成功
    • 分区情况 df -Th, 结果如下:
      Filesystem Type Size Used Avail Use% Mounted on
      /dev/mapper/VolGroup-lv_root ext4 50G 2.4G 45G 6% /
      tmpfs tmpfs 926M 72K 926M 1% /dev/shm
      /dev/sda1 ext4 485M 38M 423M 9% /boot
      /dev/mapper/VolGroup-lv_home ext4 863G 201M 819G 1% /home
    • 软件安装, yum install OpenIPMI,会装如下软件
      • (1/4): OpenIPMI-2.0.16-14.el6.x86_64.rpm
      • (2/4): lm_sensors-libs-3.1.1-17.el6.x86_64.rpm
      • (3/4): net-snmp-libs-5.5-49.el6_5.1.x86_64.rpm
      • (4/4): openssl-1.0.1e-16.el6_5.14.x86_64.rpm
  • MegaCli
    • 查询Raid /opt/MegaRAID/MegaCli/MegaCli64 -LDInfo -Lall -aALL
    • 修改Unconfigured bad 为Unconfigured good
      • /opt/MegaRAID/MegaCli/MegaCli64 -PDMakeGood -PhysDrv[252:3] -aAll
    • 修改Foreign盘为可用盘
      • MegaCli -CfgForeign -Scan -aALL
      • MegaCli -CfgForeign -Clear -aALL
    • 查询指定盘信息 /opt/MegaRAID/MegaCli/MegaCli64 -PdInfo -PhysDrv[252:3] -aALL
    • 插入外来盘(Foreign)做重建(rebuild)步骤
      • 1.MegaCli -PDMakeGood -PhysDrv[E:S] -aALL
      • 2.MegaCli -CfgForeign -Clear -aALL
      • 3.MegaCli -PDHSP -Set -PhysDrv [E:S] -aALL # make this unconfigured drive a hot spare
    • 查询重建进度
      • /opt/MegaRAID/MegaCli/MegaCli64 -pdrbld -showprog -PhysDrv[252:3] -aAll
        Rebuild Progress on Device at Enclosure 252, Slot 3 Completed 3% in 4 Minutes
      • /opt/MegaRAID/MegaCli/MegaCli64 -pdrbld -progdsply -PhysDrv[252:3] -aAll
  • 查看nginx是如何设置进程titile的
    • nginx 设置了title为“nginx: master process”和“nginx: worker process”
    • 使用grep查询 grep -rl “worker process” ./ 得到两个文件
      • ./core/nginx.c
      • ./os/unix/ngx_process_cycle.c
    • grep 去掉l参数,发现
      • ./os/unix/ngx_process_cycle.c: ngx_setproctitle(“worker process”);
      • ./os/unix/ngx_process_cycle.c: ngx_setproctitle(“worker process is shutting down”);
    • 说明是使用ngx_setproctitle来设置进程titile的,查该函数
    • grep -r “ngx_setproctitle” ./ 发现文件 ./os/unix/ngx_setproctitle.c
      p = ngx_cpystrn((u_char ) ngx_os_argv[0], (u_char ) “nginx: “,
      ngx_os_argv_last - ngx_os_argv[0]);  
      
      p = ngx_cpystrn(p, (u_char ) title, ngx_os_argv_last - (char ) p);
    • 上面两个函数的作用就是把ngix: 和 title依次拷贝到ngx_os_argv[0]中, 经查
      发现ngx_os_argv就是整个nginx的main函数的参数列表指针argv
    • 所以修改进程titile是通过修改argv[0]实现的,但是有个问题要解决,就是如果新
      的titile超过了原来argv[0]的长度,就会覆盖到argv[1]。
    • 另外可参考:

2014-08-06

  • TODO: 给进程加上title, 这样可以在ps命令中更容易识别, 这个功能可以加入到rssp中
  • 跟踪调试
    • 利用日志信息跟踪
      • 日志等级:debug、info、notice、warn、error、crit、alert、emerg
    • 利用gdb调试
      • CFLAGS标志记得加上-g参数,否则会出现”No symbol table is loaded. Use the “file” command.”
      • -O0 参数禁止gcc编译优化
      • 带参数运行 gdb –args ./t -c /etc/t.conf,进入到gdb后r即可
      • 带参数运行 gdb ./t,进入到gdb后执行r -c /etc/t.conf即可
    • cgdb http://cgdb.github.io/
    • 利用strace/pstack调试
      • -p pid:通过进程号来指定被跟踪的进程
      • -o filename:将跟踪信息输出到指定文件
      • -f:跟踪其通过frok调用产生的子进程。
      • -t:输出每一个系统调用的发起时间。
      • -T:输出每一个系统调用消耗的时间。
    • gcc 增加参数-finstrument-functions(可以加入到CFLAGS中) 获取函数调用流程
      还有配合addr2line使用,这个感觉比较麻烦。
    • 参考http://lenky.info/ebook/ nginx核心讲解 中的跟踪调试章节
  • 免翻墙镜像
  • Xfs文件系统磁盘布局之一:准备工作
  • read/write系统调用执行路径图解
  • gcc -E test.c -E参数使得gcc在预处理后编译前停止,并且打印经过预处理的代码
  • printf(“%d\n”, linux) 会打印出1,说明linux被预处理替换为1了
  • 文件系统
  • 一次调查centos 6.2上xfs文件系统宕机后文件
    • 复现脚本
      #!/bin/bash
      dst=${1}
      for ((i=1;i<=10000;i++)); do tmpfile=${dst}/file.$(date ‘+%T’).${i} echo ${tmpfile} dd if=/dev/zero of=${tmpfile} bs=1M count=8 &>/dev/null
      done
    • 执行脚本 ./xfs-bug.sh ${XFS_MNT} # XFS_MNT为xfs文 件系统的挂载点
    • 查看结果 ls -l ${XFS_MNT} | less
    • 即操作系统在 用户没有执行sync(1)命令的情况下,会默认将超过30s的脏数据写
      回磁盘。而这里很多长度不对的文件的创建时间已经超过这一时间。 说明此脚
      本可以基本复现用户的问题,并且2.6.32-220.23.1内核上的xfs确实存在缺陷。
    • 两个补丁
      • xfs: log the inode in ->write_inode calls for kupdate
      • xfs: log all dirty inodes in xfs_fs_sync_fs
    • Linux内核的脏数据回写是由内核 writeback机制来保证的.
    • 第一个补丁的作用是修复xfs在Linux内核尝试回写超过30s的脏数据时的一个bug.
      即在此补丁 之前,有可能在某些条件下xfs无法正确回写超过已经超过30s的脏
      数据。此补丁是在xfs_fs_write_inode()函 数中 判 断wbc->for_kupdate变量.
      而这 一变量在Linux kernel尝试刷新超过30s脏 数据时会被置为1。
    • 第二个补丁修复的则是由于Linux Kernel中writeback路 径的修改引起的xfs回写
      行为的不正常。根据描述,由于writeback路径的修改造成 older_than_this变量
      的检查更加严格,由此造成有可能被置脏的inode得不到回写。这里的
      older_than_this恰恰是系统回写超过30s脏 数据时判断脏数据时间的标志。
  • centos6.4 安装

2014-08-05

  • zd15linux 确认客户指定使用centos 6.4操作系统
  • xy week_report study
    • 20130527
      • 硬RAID出现文件系统断电损坏的情况,debug了一下,发现是ag中
        free inod的数量与agf中的free inode数量不一致,导致free inode数量不一致,
        free inode的B+树异常; 进行文件系统写时文件系统立即损坏。
        1. 这里是如何做debug的?
        2. 什么是ag,agf?
      • 目前对XFS掉电保护研究的结果:软raid比硬RAID的保护性好,因为软RAID有屏障。
        软RAID可以通过sync cache命令将数据写到硬盘;硬RAID控制权在硬RAID卡。
    • xfs_repair 用修复xfs文件系统故障
    • 总结主要工作:
      • 负责iscsi,bug解决,功能实现;客户端支持、掉线、丢包、负载均衡、性能调优、C++实现.
      • 负责xfs文件系统,bug解决
      • maid功能,核态和用户态实现
      • 研究vfs、ext3日志文件系统原理
      • 研究镜像mirror
      • 研究raid、md
      • 网络、磁盘IO
  • xfh week_report study
    • 总结有用的工作:
      • cgroup,lxc
      • cgroup原理分析。
      • cgroup控制虚拟机资源接口代码编写。
      • maid实现
  • zd15linux
    • 为什么sendmsg发送消息失败,不能正常显示?
    • 发送消息LCD会出现”Display shutdown on connecting server to power”
    • 这里的server指什么?
    • 上面的操作是在raid1中的os中做发送消息操作的
    • ssd盘,拔掉2pin电源线,保留4pin电源线, 现象为
      “Display shutdown on connecting server to power”
    • ssd盘,拔掉2pin电源线,拔掉4pin电源线, 现象为
      “The key Up/PgUp and Dn/PgDn is for menu select”
    • ssd盘,保留2pin电源线,拔掉4pin电源线, 现象为
      “The key Up/PgUp and Dn/PgDn is for menu select”
    • ssd盘,保留2pin电源线,拔掉4pin电源线, 拔掉靠近开关机的小板的电源线
      “Display shutdown on connecting server to power”
    • ssd盘,保留2pin电源线,拔掉4pin电源线, 拔掉靠近开关机的小板的通往LCD控制板的电源线
      “Display shutdown on connecting server to power”
  • g4l
    有机会可以研究以下g4l的原理
  • dd命令实现Ghost功能
    • sudo fdisk -u -l /dev/sda
    • dd if=/dev/sda of=/ghost.img bs=512 count=[fdisk -l -u中最大end值+1]
    • 这样dd出来的就是/dev/sda使用的使用的系统空间(分区空间),当然如果把整个
      磁盘空间都给分区了,dd的结果就是整个磁盘大小
    • dd if=/ghost.img of=/dev/sda 恢复系统
    • http://www.linuxidc.com/Linux/2012-03/57302.htm
  • virtio
  • ds2img
    • 增加支持多个结构体头文件

2014-08-04

  • zd15linux
    代码功能增加和重构
    • 修改会\n隔离标题和内容,可是又出现标题乱码问题
    • 增加计算数组大小的宏
    • 增加提前指定项名的配置信息
    • 增加打印原始数据信息,包含ascii信息
    • 增加调试级别
    • 删除纯粹的printf调用,使用debug_printf
    • 修改sendmsg,增加版本信息,增加使用说明
    • 修改sendmsg,只支持消息发送,不支持其他控制操作,增加消息长度检查
    • 修改serialcomm,加入回调函数处理LCD消息
    • 重构seriald代码
    • 重构sysinfo代码
    • 重构umonitor代码

2014-08-03

  • util-linux
    包含很多linux命令, 常用的有dmesg,ipcrm,ipcs,kill,mkfs,umount,hexdump,fdisk
  • 16G容量的u盘在刻录FC20桌面系统后,windows操作系统上只看到4.8MB大小的解决方法
    • u盘插到linux系统,fdisk -l 查询到挂载的是/dev/sdc1
    • umount /dev/sdc, mkfs.vfat /dev/sdc1, 然后插入windows系统,发现也只有1G大小
    • u盘插到linux系统
    • umount /dev/sdc, mkfs.vfat -I /dev/sdc,然后插入windows系统,有14.7G大小了
  • zd15linux
    解决bug和增加功能
    • 解决也标题乱码问题
    • 解决cpu型号和核心值乱码问题
    • 增加版本信息
    • 增加获取参数信息
    • 增加daemon方式运行
  • linux操作系统备份与还原
    • tar特点
      • 保留权限
      • 适合备份整个目录
      • 可以选择不同的压缩方式
      • 如果选择不压缩还能实现增量备份,部份还原
      • 这种方式如果要clone linux系统是不现实的,因为可能有文件不能tar.
    • dd特点
      • 对块进行操作,能备份整个硬盘(包括分区表、MBR,其他Linux不能很好支持的文件系统)
      • 可以进行压缩(麻烦一点)
      • 由于是备份整个硬盘,包含没有用到的空间,备份文件比较大
    • ghost
    • g4l
    • 文件级别的操作:
      • sudo su
      • cd /
      • tar cvpzf linuxbackup.tgz –exclude=/proc –exclude=/lost+found \
        –exclude=/linuxbackup.tgz –exclude=/mnt –exclude=/sys /
      • tar xvpfz linuxbackup.tgz -C / 还原
    • 系统级别的操作:
    • 硬盘级别的操作:(3种操作方式)
      • dd if=/dev/sda of=/backup/sda.dd 备份
      • dd if=/dev/sda |gzip -c# >/backup/sda.dd.gz #号用1~9代替, 最快~最小
      • dd if=/dev/sda |bzip2 -c3 >/backup/sda.dd.bz2 #号用1~9代替, 最快~最小
      • killall -s SIGUSR1 dd 查看dd进度
      • dd if=/backup/sda.dd of=/dev/sda 还原
      • gzip -dc /backup/sda.dd.gz |dd of=/dev/sda
      • bzip2 -dc /backup/sda.dd.bz2 |dd of=/dev/sda
    • http://www.jb51.net/os/RedHat/1106.html
    • http://www.cnblogs.com/redhatlinux/articles/2421248.html
    • http://blog.csdn.net/huhui_cs/article/details/8710658
    • http://blog.chinaunix.net/uid-9068997-id-2010390.html

2014-08-01

2014-07-31

  • ipmitool输出的温度信息中的THERMAL是不是指主板温度?
    [root@localhost ~]# ipmitool sdr type Temperature
    CPU0_TEMP | 21h | ok | 7.1 | 27 degrees C
    THERMAL01 | 23h | ok | 7.1 | 34 degrees C
    THERMAL02 | 24h | ok | 7.1 | 35 degrees C
    可以通过查看source,看什么情况下打印该信息。
    [root@localhost ~]# ipmitool -V
    ipmitool version 1.8.13
    主页 http://ipmitool.sourceforge.net/
    下载地址 http://sourceforge.net/projects/ipmitool/files/ipmitool/1.8.13/
    编译加入print跟踪打印了,但是还没有跟踪到位置,后面发现增加一个参数-v
    就可以获取更详细的信息,确认了后面两个温度信息都是系统主板的信息
    ipmitool sdr type Temperature -v
    Sensor ID : THERMAL01 (0x23)
    Entity ID : 7.1 (System Board)
    Sensor Type (Threshold) : Temperature (0x01)
    Sensor Reading : 34 (+/- 0) degrees C
    最终获取主板温度命令如下:
    • ipmitool sdr type Temperature |grep -v CPU |awk ‘{a+=$9} END {print a/NR}’
      • grep -v 反选
      • 后面的awk获取第九列数字和,最后打印平均值
  • status和state区别
    • status 指人时暗指相对的地位,指物时相当于 situation。
    • state 人或物存在或所处的状态,和 condition 大体上可以互换使用。
    • situation 较狭义地指由环境综合决定的特定时间上的状态或情形。
    • condition 指一定的原因/条件或环境所产生的特定情况。
    • http://www.cnblogs.com/czllfy/archive/2011/04/26/2029548.html
  • zd15linux
    • hddtemp无法获取raid磁盘温度信息,计划修改为使用MegaCli命令获取
    • /opt/MegaRAID/MegaCli/MegaCli64 -pdlist -aALL
    • /opt/MegaRAID/MegaCli/MegaCli64 -pdlist -aALL | grep -E “Slot|Temp”
      显示结果如下:
      Slot Number: 2
      Drive Temperature :42C (107.60 F)
      Slot Number: 3
      Drive Temperature :46C (114.80 F)
    • 但是怎么确定系统盘安装在哪两个磁盘?如果知道的话,可以输出这个2个盘的平
      均值,或者依次输出两个值(第1秒输出第一个盘, 第2秒输出第二个盘)

2014-07-30

  • 修改网络接口名, 刚装的centos7的接口名为enp6s0和enp7s0, 需要修改为eth0,命令如下:
    • cp /etc/sysconfig/network-scripts/{ifcfg-enp6s0,ifcfg-eth0}
    • sed -i ‘s/enp6s0/eth0/‘ /etc/sysconfig/network-scripts/ifcfg-eth0
    • 增加文件 $touch /etc/udev/rules.d/70-persistent-net.rules
    • 未完待续!!!
    • http://www.linuxidc.com/Linux/2012-05/59710.htm
  • squid代理设置
  • zd15linux
    • raid1安装centos7,mini版本启动失败
    • raid1安装centos7,开发版本启动成功
    • 版本信息
      [root@localhost ~]# cat /etc/redhat-release
      CentOS Linux release 7.0.1406 (Core)
      [root@localhost ~]# uname -r
      3.10.0-123.el7.x86_64
      [root@localhost ~]# uptime
      16:41:52 up 8 min, 3 users, load average: 0.06, 0.37, 0.31
  • linux core util commond source
  • 查看dd命令的执行进度
  • /proc/diskstats 硬盘参数详解如下:
    • 参考 http://blog.csdn.net/tenfyguo/article/details/7477526
    • [dennis@localhost Downloads]$ cat /proc/diskstats | grep “sdc “
      下面的显示去掉了 “8 32 sd “
      • 1 2 3 4 5 6 7 8 9 10 11
      • 132725 108 1062664 167643 2681 81983 643440 24022041 147 177399 24801880
      • 274044 108 2193216 348847 6582 195199 1579680 54459810 150 388700 55296467
      • 480307 108 3843320 608357 13408 392863 3217920 101917275 139 719423 103013695
      • 636845 108 5095624 802159 18568 542271 4456320 138060107 132 971278 139338459
      • 717802 108 5743280 902925 21254 620223 5100960 156763894 134 1101859 158182895
    • 第1个域:读完成次数 —– 读磁盘的次数,成功完成读的总次数。
    • 第2个域:合并读完成次数, 第6个域:合并写完成次数。为了效率可能会合并相邻
      的读和写。从而两次4K的读在它最终被处理到磁盘上之前可能会变成一次  
      8K的读,才被计数(和排队),因此只有一次I/O操作。这个域使你知道  
      这样的操作有多频繁。
      
    • 第3个域:读扇区的次数,成功读过的扇区总次数。
    • 第4个域:读花费的毫秒数,这是所有读操作所花费的毫秒数(用make_request()到
      end_that_request_last()测量)。
      
    • 第5个域:写完成次数 —-写完成的次数,成功写完成的总次数。
    • 第6个域:合并写完成次数 —–合并写次数。
    • 第7个域:写扇区次数 —- 写扇区的次数,成功写扇区总次数。
    • 第8个域:写操作花费的毫秒数 — 写花费的毫秒数,这是所有写操作所花费的毫秒数
    • 第9个域:正在处理的输入/输出请求数 – -I/O的当前进度,只有这个域应该是0。
      当请求被交给适当的request_queue_t时增加和请求完成时减小。
      
    • 第10个域:输入/输出操作花费的毫秒数 —-花在I/O操作上的毫秒数,这个域会增长只要field 9不为0。
    • 第11个域:输入/输出操作花费的加权毫秒数 —– 加权,花在I/O操作上的毫秒数,
      在每次I/O开始,I/O结束,I/O合并时这个域都会增加。这可以给I/O完成  
      时间和存储那些可以累积的提供一个便利的测量标准。
      
  • vmstat

    • [dennis@localhost Downloads]$ vmstat 1 10
    • procs ———–memory———- —swap– —–io—- -system– —-cpu—-
    • r b swpd free buff cache si so bi bo in cs us sy id wa
    • 0 2 262060 79832 1290864 736688 0 2 82 80 165 143 5 1 92 2
    • 0 2 262060 81964 1279336 746696 0 0 5176 3840 5693 10504 5 10 23 62
    • 0 2 262060 75888 1282288 749680 0 0 5896 3840 5259 11483 5 5 41 49
    • 0 2 262060 70184 1285204 752636 0 0 5860 0 5213 11354 6 2 39 53
    • 1 2 262060 79092 1281472 747172 0 0 5668 3904 5047 11017 5 4 43 49
    • 1 2 262060 79584 1284256 743532 0 0 5832 0 5004 11202 5 2 43 50
    • 0 2 262060 77532 1287020 742796 0 0 5672 3840 5126 11111 6 3 39 53
    • 0 2 262060 79668 1289484 738468 0 0 5316 0 5598 10422 5 5 23 68
    • 0 2 262060 79536 1290632 737000 0 0 5180 3840 4860 10482 6 3 41 50
    • 0 2 262060 79880 1291936 735188 0 0 5160 0 5469 10400 5 6 27 62
  • centos-7 u-disk install, success

    • dd if=/home/dennis/Downloads/CentOS-7-x86_64-bin-DVD.iso of=/dev/sdc
  • kernel
    • raid在linux-2.6.32.63/drivers/md目录下
    • xfs在linux-2.6.32.63/fs/目录下
    • /proc/diskstats在linux-2.6.32.63/block/目录下
  • shell script 清除注释
    参考一下下面的文章,可以单独做一个命令,或嵌入之前写的ds2img中,来自动生成结
    构体关系图
  • rssp
    主要修正请求数据问题
    • 解决for循环中没有break导致每个命令执行都打印”Not found task handler”
    • 修正测试用的请求数据(11,18)
  • script
    • 使用which替代whereis判断系统命令存在与否, whereis就算找不到也不会返回1

2014-07-29

  • 重写了之前的产生Makefile的脚本
    • 碰到一个很头痛的问题, shell中的getopts怎么在第二层函数调用中起不了作用了?
      可是在之前的wifi脚本中是可以使用的, 搞了好久还是搞不定,先不弄了.
  • 解决git pull问题
    • 问题: insufficient permission for adding an object to repository database .git/objects
    • 解决方法: 修改.git/objects下权限为root的目录
      • ll | grep root
      • chown -R dennis: THE_DIR_NEED_CHANGE_OWNER
    • http://blog.csdn.net/lxlzhn/article/details/9041925
  • rssp
    • 修改命令6
    • 修改config.conf, 完成命令跟请求文件的对应

2014-07-28

2014-07-27

2014-07-25

  • rssp
    修改和增加请求命令数据
    • 做请求命令数据11,13,14,15,17,18,401,402,404,405,406,407,408
    • 修改有问题的命令3,5,6数据
  • zd15-linux
    • 增加函数运行时间测试代码
    • 增加IP和MAC获取功能
    • 后期完善各个功能的编码
  • strace -o output.txt -s 1024 -T -tt -e trace=all -p 28979
    • -p 指定进程id
    • -o 指定输出文件
    • -t 在输出中的每一行前加上时间信息
    • -tt 在输出中的每一行前加上时间信息,微秒级
    • -T 记录每个系统调用花费的时间,可以看看哪个系统调用时间长
    • -s 1024 显示系统调用参数,字符串显示长度默认是32
    • -e trace=??? 指定关心的系统调用
      • -e trace=network 只记录和网络api相关的系统调用
      • -e trace=file 只记录涉及到文件名的系统调用
      • -e trace=desc 只记录涉及到文件句柄的系统调用
      • 还有其他的包括process,ipc,signal等。
    • http://blog.csdn.net/xifeijian/article/details/9080791
  • linux统计程序运行时间
    • clock 头文件
    • gettimeofday 头文件
    • 32位long,最大值 2147483647, 64位最大值 9223372036854775807
    • 32位,clock函数取得的时间最大值为2147483647/1000000 s,约为35分钟, 64位为292471年
    • 32位,gettimeofday取得的最大值为2147483647 + 2147483647/1000000 s,约为68年
    • clock计算的只是CPU时间, gettimeofday计算的是程序实际运行时间
      • CPU时间=用户态执行时间+内核态执行时间
      • 实际运行时间=CPU时间+等待时间(cpu被抢占)
    • clock 函数在linux中使用的问题
      • 如果超过一个小时,将要导致溢出.(64位没有问题)
      • 函数clock没有考虑CPU被子进程使用的情况.
      • 也不能区分用户空间和内核空间.
  • linux编程获取本机IP地址
  • 获取Mac地址
    if( (ioctl( sock_mac, SIOCGIFHWADDR, &tmp)) < 0 ){
    printf("mac ioctl error\n");  
    return -1;  
    
    }
  • linux获取IP MAC
  • 二维数组初始化
    • char arr[2][2] = {0}; 在C仓库的util代码中出现告警,为何?
    • char arr[2][2] = {}; 这样也可以全部初始化为0
  • C respository
    • 增加程序运行时间测试代码
  • Makefile中最好都用CFLAGS变量, 这样加调试参数就很方便 CFLAGS += -g -Wall,
    object自动编译的时候会自动使用CFLAGS的参数
  • linux itoa 需要自己实现

2014-07-24

2014-07-23

  • rssp
    • 解决file2buf参数错误(上一版本修改了函数接口)
    • 修改版本号生成脚本, 使用git rev-list HEAD | head -1获取commit号
    • 修改配置文件全部在/opt/fission/rssp/目录,使得普通权限即可运行
    • 增加服务级别信息,以后完善运行级别代码
    • 增加debug级别到printf中,使用级别来打印信息
    • 移除用不到的rtu.c
    • 增加README
  • git 获取HEAD的commit版本git rev-list HEAD | head -1
  • BASH的保护性编程技巧
  • 四层和七层负载均衡的区别
  • zd15-linux
    • 硬件信息、系统信息编码
    • 串口通了^_^,主板上连接的是com2,对应linux下应该是/dev/ttyS1,原先一直用
      /dev/ttyS0所以没有连接成功.
      char *dev = “/dev/ttyS1”;
      serial_open(dev);
      set_speed(115200);
      set_Parity(8, 1, ‘N’);
  • 使用ifconfig eth0设置ip在重启系统后会失效,修改系统配置文件
    /etc/sysconfig/network-scripts/ifcfg-eth0
    才会保持修改生效
    另外还要设置BOOTPROTO=none,如果为dhcp,又自动分配了
  • 如何优化文件系统,提供视频流性能
    • 随机写优化为顺序写
    • 目标?随机写入带宽达到3200Mb,可接入400路8Mb高清码流
  • SCSI磁盘信息获取流程
    • 打开/dev/sgX, 得到文件描述符, int fd=open(“/dev/sgX”, O_RDWR);
    • 准备SCSI命令, 和内存缓冲空间
      命令SG_IO为异步SCSI命令,定义在/usr/include/scsi/sg.h中
      • SG_IO 对应结构体 struct sg_io_hdr , 定义在/usr/include/scsi/sg.h
      • SCSI_IOCTL_GET_IDLUN 对应结构体 struct scsi_idlun { int dev_id; int host_unique_id; }
      • SCSI_IOCTL_GET_BUS_NUMBER 对应int型数据
      • SG_GET_SCSI_ID 对应结构体 struct sg_scsi_id, 定义在/usr/include/scsi/sg.h
    • 调用ioctl执行SCSI命令, ioctl(fd, SCSI_CMD, &STRUCT_MAP_WITH_SCSI_CMD)
    • 关闭文件描述符, close(fd)
    • 功能
      • 硬件信息:型号、物理类型、序列号、温度、转速、工作速率、磁盘LU、磁盘端口
        SAS地址、厂商、固件、LED灯状态等
      • 位置信息:Enclosure、slot
      • 逻辑信息:运行状态(在线、空闲热备盘、重构盘)、逻辑类型(成员盘、
        空闲热备盘、空闲盘)、所属RAID组、所属卷组
      • SMART信息
    • 更多使用例子可以参考sg3_utils源码 http://sg.danny.cz/sg/p/sg3_utils-1.39.tar.xz
    • 参考

2014-07-22

  • maid
    • 最早出现在 2002年,自2003年以来MAID技术逐渐被应用于数据保护和数据归档
    • MAID存储的功能及解决方案
    • MAID存储中SATA硬盘启动的时间大约为10秒
    • MAID节点功能工作方式的三个阶段:
      • 假设2分钟内无资料读取,硬盘磁头就会自行停留到没有存取数据的地方,以节省
        磁头的功耗,进入第一阶段.
      • 过了10分钟后若仍没有读取,就会进入第二阶段, 硬盘会降低转速至4000rpm;
      • 若过了15分钟后仍没有读取资料,就会进入第三阶段,硬盘于是会停止运转,
        等到系统呼叫时再启动,但由于硬盘仍处于通电状态,因此还是在“准备状态”,
        再启动的时间约为10~15秒。
    • 功能和特点:
      • MAID存储系统中的磁盘或磁盘RAID组可以在没有读写访问时依据策略下电;
      • 下电磁盘自动依策略进行故障检查;
      • 磁盘在下电以后,一旦有读写请求,磁盘自动上电,RAID组可重新提供正常访问;
      • 降低能耗,电能节约可到达30%;
      • 减少环境和管理成本;
      • 更长的磁盘使用寿命。
    • MAID 2.0:MAID技术华丽转身
      • Level 0:Level 0是常见的硬盘驱动器全速旋转模式,它的基准是全能耗和最短
        的数据访问时间。
      • Level 1:Level 1是让磁盘读取/写入磁头停靠。
      • Level 2:除了磁头停靠之外,盘片转速减慢30%~50%。
      • Level 3:是常见的MAID状态,在该等级下磁盘盘片停转,磁头停靠,驱动器设置
        为“睡眠模式”(不过仍然为驱动器供能)
  • rssp
    完成命令14,17,18,基准时间设置函数,解决一些bug
    • 完成基准时间设置
    • 实现命令14,17,18
    • 完成公共代码
    • 解决命令8和9使用错误的指针问题
    • 命令11不再使用malloc申请内存这种多此一举的方式
    • opm增加保存配置信息到文件的操作
  • 存储技术原理分析
    • 文件系统
      • read系统调用的处理流程
      • write系统调用的处理流程
  • Linux I/O performance tests using dd
  • 文件系统 IO处理流程
  • linux 使用sockopt与内核交换数据
    Linux提供了多种通信方式来实现内核和用户之间的数据通信,基于 socket的sockopt
    是最常用也比较简单易用的一种方式。它的本质和ioctl()很相似,只是ioctl()需要创
    建新的设备文件,而sockopt只需要创建一个socket套接字便可以使用户与内核进行通信。

2014-07-21

  • 链表的文件储存方法
    将链存到文件,感觉是件很危险的事情。一不小心关机,链就断了,要做日志,保证能
    回滚c的大概是这样:

    typedef enum {
        INSERT,
        DELETE,
        RESTORE,
    }vecop_t;
    
    typedef struct veclog_s{
        vecop_t op;
        int64_t logoffset[4];
        double data[2];
        crc32_t crc;
        int32_t iscommit;
    }veclog_t;
    typedef struct vec_s {
        double x,y;
        int64_t offset;
    }vec_t;
    
    typdef struct vecmeta_s{
        int64_t ___magic;
        int64_t first_elem;
        int64_t lash_elem;
        int64_t tota_elem
        int64_t dirty;
        int32_t lognum;
        int32_t pad
        veclog_t log[LOG_SIZE];
    }vecmeta_t;
    

    磁盘结构大概这样?

    内存结构:

    typedef struct vec_s{
        int fd;
        vecmeta_t meta;
        struct list_head elemlist;
        struct list_head loglist;
        vec_insert   insert;
        vec_delete  delete;
        vec_flush     flush;
        vec_pack     pack;
        vec_init        init;
    }vec_t;
    
    flush (){
        /*设置脏位*/
        /*写日志*/
        /*写文件*/
        /*设置日志提交位*/
        /*写crc/
        /*恢复脏位*/
    }
    
    init () {
        /*如果日志为脏,检查最近的一个为提交的日志*/
        /*如果crc正确, 重新尝试做操作*/
        /*否则, 常识恢复以前的状态。*/
    }
    

    插入,删除数据的时候, 不实际删除数据,只修改offset;append到末尾

    以插入为例子, 日志如下:

    OP INSERT
    OFFSET0   //在OFFSET 0后插入
    OFFSET1   //OFFSET的下一个元素是 OFFSET1
    OFFSET2   //要插入的元素位于OFFSET2;
    data[2]   //要插入的数据
    

    如果发生错误,比如系统崩溃,则需要恢复原来的链.恢复链也要做日志。恢复过程再次崩溃。

  • linux内核函数schedule()实现进程的调度
    直接调用
    如果current进程因缺乏资源而要立刻被阻塞,就主动调用调度程序。

    • a.把current进程插入适当的等待队列。
    • b.把current进程的状态改为TASK_INTERRUPTIBLE或TASK_UNINTERRUPTIBLE。
    • c.调用schedule()。
    • d.检查资源是否可用,如果不可用就转到b。
    • e.一但资源可用就从等待队列中删除当前进程current。
      内核反复检查进程需要的资源是否可用,如果不可用,就调用schedule()把CPU分配给
      其它进程,直到资源可用。这些步骤与wait_event()所执行的步骤很相似。
      许多反复执行长任务的设备驱动程序也直接调用调度程序。每次反复循环时,驱动程序
      都检查TIF_NEED_RESCHED标志,如果需要就调用schedule()自动放弃CPU。
    • http://blog.csdn.net/dong_zhihong/article/details/7990560
  • task_struct数据结构
  • IET源码分析
    • 分析核态源码
    • 分析结构体
      • iscsi_sess_param
      • iscsi_trgt_param
      • tio
      • network_thread_info
      • work_thread
      • iscsi_target
      • iet_volume
      • iscsi_session
      • iscsi_conn
      • iscsi_pdu
      • iscsi_cmnd
    • 分析网络线程 nthread
    • 分析工作线程 wthread
    • 分析队列 iscsi_queue
  • proc文件系统
  • raidx.ko 对应的 raid source 在哪?
  • Linux 用户态内核态通信(IPC)方式:

2014-07-20

  • 守护进程的程序不会再fork进程? 答案是“可以”
  • 服务程序启动和停止
  • 守护进程的监控可以用daemontools工具集中的supervise来监控,也可以自己实现,但
    是不能只是通过另外一个应用程序去做,因为做守护的进程自身也需要被守护.
  • 进程间监控、心跳
    主进程如何判断子进程是否退出,如果退出要重启该进程
  • select/accept系统调用过程发生系统中断
    在select或accept函数处理中间进行信号处理,会发生系统中断,而发生系中断会导致
    select调用返回-1, 同时错误代码errno的值为EINTR(Error interrupte), 所以解决方
    法是这样
    • select所在进程不要进行信号处理 signal(SIGCHLD, SIG_IGN); 这样至少不会因为
      信号处理导致中断发生,当然不能避免其他操作导致中断发生。
    • 在判断slelect调用的返回值为-1的处理代码中,增加判断是否为中断发生
      rv = select(listenfd + 1, &set, NULL, NULL, &timeout);
      if(rv == -1) {
      perror("select"); /* an error accured */  
      /* 如果不是系统中断导致错误发生,退出循环体,结束进程 */  
      if (errno != EINTR)  
          break;  
      
      }
  • rssp
    daemon功能ok
    • 修改配置文件位置为/etc/rssp.conf,解决守护进程下打开配置文件失败导致程序启
      动失败问题.
    • 解决信号处理造成网络通信进程退出的问题(引起select返回-1)
    • 主进程增加子进程的信号处理函数,以后可以在其中加入子进程重启功能
    • 增加服务控制脚本(还没有验证)

2014-07-19

  • 守护进程的程序不会再fork进程?

2014-07-18

  • 存储
  • openlog
    如果系统没有syslogd服务进程,openlog或syslog不会起任何作用.
    如果可以正常工作,产生的日志会记录在/var/log/message中
    配置文件应该是/etc/syslog.conf
  • 动态库
  • zd15-linux
    • Linux下jni的使用
    • yum search java | grep ^java 搜索的结果发现没有像java6 java7 这样的东西
    • su -c ‘find /usr/lib/ -name “jni.h”‘
      /usr/lib/jvm/java-1.7.0-openjdk-1.7.0.60-2.5.0.1.fc20.x86_64/include/jni.h
    • How to download and install prebuilt OpenJDK packages
    • OpenJDK和JDK区别
    • Fedora x86_64 机器中,需要拷贝生成的库到/usr/lib64目录,应用程序才找得到库
    • JNI FC20 x86_64 环境测试ok, 不过当前没有验证是否支持中文字符参数
  • 中兴力维ZXNVM CMR1000-24/CMR2000-24
    • 自主创新ZNV-VFS视频监控文件系统
      VFS视频监控文件系统,是业界首个专为视频监控定制研发的文件系统,能够使视频数
      据写入性能大幅提升,经公安部实测,随机写入带宽达到3200Mbps,可接入400路8M高
      清码流。同时,VFS文件系统会把大量的随机写优化为顺序写,大大减少磁头的寻道时
      间,延长硬盘的使用寿命,降低硬盘维护及购置成本。
  • 存储io
  • maid 功能问题
    磁盘操作完成(可以用dd测试),发现磁盘内还有操作,无法完成maid想要的磁盘操作(断电节能)
  • 如何看代码
    看代码,首要关注的是它的数据结构、线程环境、队列,最后才是数据流。
    要学会从大的架构层面去分析代码,不要仅仅局限在某个单一流程上
    • data structure
    • thread
    • queue
    • work flow
  • 提升磁盘IO性能的几个技巧 http://kb.cnblogs.com/page/100153/
    • 增加顺序读取,减少随机读取
    • 小文件比较多,将多个小文件合并存储到一个大文件中的方式来降低随机访问
    • 一次尽可能多写入或多读取。
      也就是说,将程序的读写buffer设置得尽可能大一些。
      例如日志或者redo log的写入,不是每次调用都直接写磁盘,而是先缓存到内存中,
      等buffer满了再写入磁盘,也可以定时写入磁盘。
  • 存储技术原理分析

2014-07-17

  • NODE.js
  • git恢复误删文件
    • git checkout HEAD^ a.txt
    • git add a.txt && git commit -m “restore a.txt” && git push origin master
  • Bootstrp 简洁、直观、强悍的前端开发框架,让web开发更迅速、简单。
  • UNIX高级环境编程 和 UNIX网络编程之进程间通讯
    • posix 和 system V 消息队列
    • 守护进程单例(只有一个副本),重新读取配置(捕捉SIGHUP信号)
  • zd15-linux
    • jdk
    • yum install java-1.7.0-openjdk
    • yum install java-1.7.0-openjdk-devel
  • Makefie compile dynamic library
    • gcc -shared -fPIC hello.c -o libhello.so
  • 硬Raid信息查询
    • 查询版本 /opt/MegaRAID/MegaCli/MegaCli64 -v
      MegaCLI SAS RAID Management Tool  Ver 8.00.48 Mar 23, 2011  
      (c)Copyright 2011, LSI Corporation, All Rights Reserved.  
      
      这里使用的版本是8.00.48, 不同的版本得到的信息格式或字样可能不同,要注意.
    • 查询Raid /opt/MegaRAID/MegaCli/MegaCli64 -LDInfo -Lall -aALL
      Adapter 0 -- Virtual Drive Information:  
      Virtual Drive: 0 (Target Id: 0)  
      Name                :  
      RAID Level          : Primary-1, Secondary-0, RAID Level Qualifier-0  
      Size                : 931.0 GB  
      State               : Optimal  
      Strip Size          : 256 KB  
      Number Of Drives    : 2  
      Span Depth          : 1  
      Default Cache Policy: WriteBack, ReadAheadNone, Cached, Write Cache OK if Bad BBU  
      Current Cache Policy: WriteBack, ReadAheadNone, Cached, Write Cache OK if Bad BBU  
      Access Policy       : Read/Write  
      Disk Cache Policy   : Enabled  
      Encryption Type     : None  
      Bad Blocks Exist: No  
      
      1. 其中RAID Level行中的Primary-1就表示这个磁盘组是Raid1
      2. State行就是raid的状态, Optimal是正常, Degraded是降级,降级后插入新磁盘会变为重建
    • 查询磁盘 /opt/MegaRAID/MegaCli/MegaCli64 -pdlist -aALL
      Adapter #0  
      Enclosure Device ID: 252  
      Slot Number: 2  
      Enclosure position: 0  
      Device Id: 133  
      Sequence Number: 2  
      Media Error Count: 0  
      Other Error Count: 0  
      Predictive Failure Count: 0  
      Last Predictive Failure Event Seq Number: 0  
      PD Type: SATA  
      Raw Size: 931.512 GB [0x74706db0 Sectors]  
      Non Coerced Size: 931.012 GB [0x74606db0 Sectors]  
      Coerced Size: 931.0 GB [0x74600000 Sectors]  
      Firmware state: Online, Spun Up  
      SAS Address(0): 0x4433221101000000  
      Connected Port Number: 0(path0)   
      Inquiry Data:  JPW9K0HZ08Z9TLHitachi HUA722010CLA330   JP4OA3EA  
      FDE Capable: Not Capable  
      FDE Enable: Disable  
      Secured: Unsecured  
      Locked: Unlocked  
      Needs EKM Attention: No  
      Foreign State: None   
      Device Speed: 3.0Gb/s   
      Link Speed: 3.0Gb/s   
      Media Type: Hard Disk Device  
      Drive:  Not Certified  
      Drive Temperature :43C (109.40 F)  
      ...(省略)  
      
    • 查询重建 /opt/MegaRAID/MegaCli/MegaCli64 -PDRbld -ShowProg -PhysDrv [252:2] -a0
    • 磁盘下线 /opt/MegaRAID/MegaCli/MegaCli64 -PDOffline -PhysDrv [252:2] -a0
      Adapter: 0: EnclId-252 SlotId-2 state changed to OffLine.
    • 磁盘上线 /opt/MegaRAID/MegaCli/MegaCli64 -PDOnline -PhysDrv [252:2] -a0
      Adapter: 0: EnclId-252 SlotId-2 state changed to OnLine.

2014-07-16

2014-07-15

  • 整理socket公共代码
  • 协助检查mib库和说明文档的一致性问题.
    请准备三份不同的MIB库和说明文档,标准品、中性和DCN版本,主要是名字不一样
  • zd15-linux
    • 复原硬件,找了4个螺丝来固定主板,cpu没有固定用的小板就先不管了。
    • 从RAID中启动Centos 6.5系统失败,出现kernel panic - not syncing: Attempted to kill init!
  • docker
    又重新了解了下docker的主要应用场景和对整个IT的影响
    • docker采用go语言开发,主要使用了Cgroup,LXC,aufs等技术来实现虚拟化,项目当前
      托管在github上,整个项目代码量约1W行.当前追捧的公司有google,microsoft,
      RedHat等.
    • docker主要影响部署环节,原来的做法是测试的时候在测试环境中做各种配置,然后
      运行,测试ok后打包发布(安装包)。然后就到部署环节,部署的时候还要做一遍相关
      配置,如果配置比较多,这个环节就很容易出错。有了docker,做法会是这样,测试
      的时候就直接在docker的容器中测试,发布的时候也直接把测试用的容器发布出去就
      好了,测试和部署环节使用的一样,减少错误。当然这样的应用可以使用虚拟机的方
      式解决,但是虚拟机太重,还要跑一个虚拟硬件的东西,还要安装一个OS。
    • docker不影响开发环节,原来该怎么写程序还是要怎么写,顶多是要在测试的时候要
      放到相应的容器中测试,测试完了发布的时候就直接使用容器中的配置来发布就ok.
    • 为什么使用go来开发,go如何调用cgroup,lxc,aufs?为什么不直接使用c或c++?
    • http://special.csdncms.csdn.net/BeDocker/
    • http://oilbeater.com/docker/2014/06/29/what-is-docker.html
    • http://zhuanlan.zhihu.com/prattle/19693311

2014-07-14

  • rssp
    • 增加daemon
    • 修改参数获取为getopt_long
    • 优化服务启动代码
    • add tag v0.1
  • zd15-linux
  • 整理以前的工作日记(2006~2013),目前找不到2013的笔记.

2014-07-12

  • rssp
    • 解lmc-sender接收rssp发送的数据的大小为0的问题,查里ee2dd1843,76c1d98ef,
      1921580bb版本,没有结果.
    • 发现是tcp_connect有问题,修改回原来的代码就ok了,可是为什么使用unpv13e的代
      码会有问题呢,这个以后有机会做个公共socket代码库.
  • git回退到某个历史版本方法,3个命令:
    git clone url my_repos
    cd my_repos
    git reset –hard [COMMIT]

2014-07-11

2014-07-10

2014-07-09

2014-07-08

2014-07-07

  • zd15-linux
    • Download Centos-6.4, app running environment
    • Add Makefile
    • Add spin_lock log debug and command code
    • Add message queue code
    • Add code for serial communication
    • Add API code for system info(cpu,memory,disk,uptime)

2014-07-06

  • rssp
    • test ECS(Elastic Compute Service) of aliyun, ip:29115248202, test ssh
    • run rssp on remote, and run lmc_sender at local, sent file is ok, but failed to receive.
    • clean lmc code, merge with rssp, try to use one common code.

2014-07-04

  • IET
  • zd15-linux

2014-07-03

  • IET
  • rssp

2014-07-02

  • IET

2014-07-01

  • IET

2014-06-30

  • IET

2014-06-29

  • rssp

2014-06-28

  • rssp

2014-06-27

  • IET

2014-06-26

  • IET

2014-06-25

  • IET

2014-06-24

  • update rssp
  • study iSCSI Enterprise Target(IET)

2014-06-23

  • update rssp
  • send a sms develop report to manager
  • study iSCSI Enterprise Target

2014-06-22

  • update rssp

2014-06-21

  • update rssp, finish command 1
  • zero length array in structure

2014-06-20

  • study mfs

2014-06-19

  • commit sms to github
  • update vimrc project, clean files and add install script
  • update rssp
  • study mfs

2014-06-18

  • wavecom GSM
    • Ask gbc, where to buy the device? He will send the website tonight.
    • Success to send SMS on Fedora 20 by c code.
    • clean sms code.

2014-06-17

  • wavecom GSM, test on windows XP.
    • Install drive from mini CD.
    • Use hyperterminal, send AT command success, but fail to send SMS(signal weak).
    • Test tools from www.sendsms.cn
    • found the antenna was broken.
  • wavecom GSM, test on Fedora 20.
    • use code sms1.0zip, alcasync.
    • buy a china-mobile SIM card.
  • wavecom GSM, test on Ubuntu.
    • test AT command ok with minicom.
  • MooseFS
    • Installation

2014-06-16

  • wavecom GSM m1306b module
    • Use minicom on Fedora 20, connection ok, but fail to send any AT command.

2014-06-12

  • Install virtualbox on Fedora
  • HDD data recovery on Linux, use TestDisk,
    and ref this paper TestDisk Page
  • study how to send and receive sms using gsm modem on linux for wavecom m1306b

2014-06-11

  • Meeting, half day
  • Backup data
  • Failed to login VID with “VMware-view-open-client-4.5.0-297975.x86_64”,
    occur protocol error.
  • After using a little time, all new pop dialog is black.

2014-06-10

  • read all the mail about zd15 project
  • find the demand schedule of zd15, and make a function list
  • Docker
  • backup data

2014-06-09

  • Write update_version.bat, use for auto update version information at each compile,
    it work similar to update_version.sh.
  • review code of CI, thinking some TODO items.
  • Thinking modules implementation plan of zd15 Linux version.

2014-06-06

  • USNMP
    • add company information to installation
    • filte unavaliable chassis
    • merge oid of master-chassis and extern chassis to one oid
    • change application from front to background service mode.
    • add software info to register to avoid re-install
    • use cppcheck for static code analysis,ignor the “code style” issue
      for more tools view this
      List of tools for static code analysis
    • submit code to svn repository

2014-06-05

  • USNMP
    • complete get disk groups information, use command “MegaCli.exe -CfgDsply -a0 -nolog”
    • complete get disks information
    • package installation as usnmp.exe, md5 b9f1d13757d6a8609a7876b28095e193
    • not support oid 1.3.6.1.4.1.30901.1.1.1.2.1
    • Megacli will install on C:\Windows\SysWOW64

2014-06-04

2014-06-03

  • USNMP
    • Conclusion the support features
    • Fix Jbod count error with different Megacli version
    • Add version information

2014-05-30

  • zd15
    • test

2014-05-29

  • zd15
    • submit code to svn repository.
    • clean code.
    • add display disk number which degraded or failed.

2014-05-28

  • zd15 bug fix
    • add auto generate mask by IP
    • add check IP address
    • reboot OS after restore
    • divide zero in GetRaidTemperature function of LcdDll project
  • package zd15
  • query process running time: ps -eo pid,lstart,etime | grep 1234

2014-05-27

  • apply for authority of VID, SVN, TWIKI and so on.
  • commit code to SVN repository
  • iscsi Enterprise Target study
  • clone blog to summerxiao

2014-05-26

  • package zd15

2014-05-24

  • zd15 bug fix
    • Fix LED light off when it is on Raid degraded status.
    • Add debug.cpp/h to project for debugging.
  • debug windows service application, use debugview.exe; Using
    OutputDebugString to print the message in code.

2014-05-23

  • zd15 bug fix
    • Display chinese words garbled(code encode issue, fixed by create a new
      file and copy to it).
    • FindWindow api just work for the same type application, if application A
      is a application start by user operate, but application B is a service
      application which start by os, then, A can not find the window of B.
    • The raid alarm function is not implement yet, should add code to finish.
    • Make c root directory as the install directory of Inno setup script.
  • add version information to handleMsg.dll …
  • write blog with github

2014-05-22

  • Find the folder which process used, use ProcessExplorer.
    http://technet.microsoft.com/en-us/sysinternals/bb896653.aspx
  • calculate md5 for files use winmd5
    http://www.winmd5.com/
  • zd15 bug fix
    • before replace dll file, stop lcd_seriald service on service dialog panel first
    • Faild to execute checkIP.bat in handleMsg.dll
    • Faild to change ip address in checkIP.bat
  • python simple http server for windows, use ‘python -m http.server’

2014-05-21

  • USNMP
    • change from get data every time to cache data
    • implement physical disk table and disk group table.
      use mib2c.iterate.conf, and select option 2
    • the fetch method of old code is looked ugly, it free
      and allocate memory too much frequently
  • Fix net-snmp-5.4.4 compile error for release version
  • Megacli display difference result with difference version
  • snmpwalk -v2c …, display
    No more variables left in this MIB View (It is past the end of the MIB tree)
    use “snmpwalk -v1 …” instead
  • count lines of code, use linecode.
    http://download.csdn.net/detail/hsc456/1608673
  • distribute application which was developed by VS2008, install vcredist_x86.exe
    http://www.microsoft.com/en-us/download/details.aspx?id=29
  • can not use ‘return’ for c macro, it just use for implement expression statment.

2014-05-20

  • USNMP
    • implement physical disk table
    • program cash when the index is a big negative number
  • For visual studio IDE, disable compile warning use “#pragma warning (disable: XXXX)”

2014-05-19

  • USNMP
    • disk group table
  • compile net-snmp-5.7.2
  • compile net-snmp-5.4