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,那么文件尺寸
应该是(4300)(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
- [root@localhost src]# targetcli /iscsi/ get
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)有数据要发给对方,就确认信息和数据一起发给对方
- 如果收到一个包后(request)暂时没有数据要发给对方,就延迟发送确认(response)
- Nagle算法:
- 如果发出去的数据还没有被确认(还没接收到response),这时有很多小数据生成,
就把小数据收集起来,丑满一个MSS或等收到确认后再发送。
- 如果发出去的数据还没有被确认(还没接收到response),这时有很多小数据生成,
- 延迟确认:
- portmap
- http://en.wikipedia.org/wiki/Portmap
- rpcinfo -p
- 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
- [root@Ustor ~]# ethtool -k eth2
- 一些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协议参数,
- /proc/sys/net/ipv4/
- tcp_sack
- /etc/sysctl.conf
- reference: Linux网络服务参数配置说明及实战
- /proc/sys/net/ipv4/
- 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次网络通讯)
- 客户端:我想读某文件。
- NAS: 你有权限,读吧。
- 客户端:先读64KB。
- NAS:给你64KB。
- 客户端:再读接下来的64KB。
- NAS:给你64KB。
- smb 2 (从3到6只要进行2次网络通讯)
- 客户端:我想读某文件。
- NAS: 你有权限,读吧。
- 客户端:先读64KB。
- 客户端:再读接下来的64KB。
- NAS:给你64KB。
- NAS:给你64KB
- 客户端每次读的数据大小,也会影响到性能. 64KB是一个比较好的数值
- 另外一个性能影响因素是服务器的响应时间。对于读操作,最常用的优化方式是启用“prefetch”
- NFS共享在使用前需要挂载(mount)。挂载时使用的参数很大程度上影响了读写的性能
- TCP or UDP
- rsize和wsize,每次读写的最大值
- 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
- 经过测试,在VDI环境中,发现执行shc -rT -f test.sh, 每次得到的test.sh.x的大
2014-12-25
- 存储频道 chinaunix
- shell脚本使用shc加密后,出现”test.sh.x: has expired! Please contact your provide”
- Emulex 万兆网卡驱动
- http://www.emulex.cn/downloads/emulex/drivers/windows/windows-server-2008-r2/drivers/
- wget http://www-dl.emulex.com/support/elx/rt10.2.9/ga/Windows/elxdrvr-nic-10.2.478.1-5.exe
- 172.16.130.17 windows server 2008 R2 Enterprise
- 172.16.130.158 Storage server(CentOS release 6.3)
- 安装时选择安装所有驱动(Unpack All Drivers),并记录安装的路径,安装完毕后无
法自动识别,就选择刚才的路径,找到合适的驱动来手动安装. 这里选择的路径是:
C:\Users\Administrator\Documents\Emulex\Drivers\NIC-10.2.478.1-5\x64\win2008R2
- SMB3.0的新特征:
- 连续可用性:多通道支持
- 连续可用性:persistent handles
- 客户端连续可用性:Instance ID
- Windows不同操作系统版本支持不同SMB协议版本,具体参考如下信息:
- CIFS:SMB的前身版本,用于微软1996年发布的windows NT4.0操作系统。
- SMB 1.0:该版本使用于Windows 2000、Windows XP、Windows Server 2003和Windows Server 2003 R2。
- SMB 2.0:该版本用于Windows Vista (SP1或之后版本)和Windows Server 2008。
- SMB 2.1:该版本用于Windows 7和Windows Server 2008R2。
- SMB 3.0:该版本用于Windows 8和Windows Server 2012。
- https://community.emc.com/docs/DOC-27348
- 有哪些实用的计算机相关技能,可以在一天内学会?
2014-12-24
- Tim后端技术, 这个blog不错
- 大型网站技术架构:核心原理与案例分析
这本书还不错,有空可以学习下架构性的东西,这个也算未来的发展方向 - 计算机图书排行榜,可以了解下最新的一些图书信息
- nmap扫描原理 http://blog.csdn.net/aspirationflow/article/details/7694274
- nmap系统侦测 http://nmap.org/man/zh/man-os-detection.html
- continue SCC(source code compile), 完成windows版本scc_build.bat和scc_upload.bat
- 批处理获取当前进程ID, 参考here
- ftp上传 http://www.cnblogs.com/angus332770349/archive/2012/06/18/2553392.html
- os detection
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
- ssh -p 2200 root@myipaddress
- [dennis@localhost ~]$ ssh -p 2200 root@172.16.110.121 “cmd /c dir c:\“
- [dennis@localhost ~]$ ssh -p 2200 root@172.16.110.121 “cmd /c ipconfig”
- http://www.freesshd.com/
- http://ywwd.net/read-646
- http://blog.csdn.net/lililiyunqiang/article/details/39337319
- json
- object
{}
- array
[]
- library for parsing json file, cJSON http://sourceforge.net/projects/cjson/
- reference http://www.cnblogs.com/chineseboy/p/3959852.html
- object
- gdb
- print structure info,
(gdb) p *struct_point
- run to net line,
(gdb) n
- print structure info,
- 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
- 写打包脚本
- 编译ok
- 上传还有问题.
- Makefile 一行命令启动一个sub shell, 中切换工作目录:cd /tmp && you-operation-cmds
- vmware client 下载
2014-12-18
- CentOS 控制台中文支持,
- yum groupinfo Chinese-support
- yum groupinstall Chinese-support
- http://myblog.jyc.edu.cn/?p=146
- yum 指定本地源
- 挂载iso文件到/mnt/cdrom
- 修改/etc/yum.repos.d/CentOS-Media.repo,增加”file:///mnt/cdrom/“
[c6-media] name=CentOS-$releasever - Media baseurl=file:///media/CentOS/ file:///media/cdrom/ file:///media/cdrecorder/ file:///mnt/cdrom/ gdgcheck=1 enabled=1 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
- tar不包含指定目录
tar cvfz chenxu.tar.gz dir --exclude dir/dir1 --exclude dir/dir2/dir3
- 巧用Systemtap注入延迟模拟IO设备抖动
- 系统技术深度探索和应用
- mkpart 建立新分区,其中扩展分区和逻辑分区只对msdos和dvh分区表有效
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
- TFS的数据服务化之路
- Amazon S3 & Simpledb内部实现分析
- 使用 Amazon S3 服务轻松实现存储
- 主流开源云系统PK
- Sector / Sphere , High Performance Distributed File System and Parallel Data Processing Engine
- LibreS3 是一个可靠的开源的亚马逊 S3 服务的开源实现。可使用标准的 S3 客户端库
和工具(例如 python-boto, s3cmd, DragonDisk, 等等)来访问它。LibreS3 使用
Skylable Sx 作为存储后端,可自动提供数据去重和复制功能。- http://www.skylable.com/
- 可是没有源码
- 已确认MIB库中性包,之前有发邮件出来,直接用那个版本就好.
2014-12-15
- Amazon EBS架构猜想
- cloud architecture
- 云存储基础架构剖析
- REST 设计风格
- Amazon s3
- Amazon simple storage server
- http://aws.amazon.com/cn/documentation/s3/
- 亚马逊S3服务介绍
- 装机器,验证swap分区没有挂载问题.
- 需要确认MIB库是否中性,不是需要修改一个版本.
2014-12-14
- 七牛开发者中心
- 百度网盘的linux桌面客户端
- 开源网盘
- OwnCloud,是一个开源的个人云服务器搭建程序。 简单来说就是一个基于Php的自建
网盘。基本上是私人使用,没有用户注册功能,但是有用户添加功能,你可以无限制
地添加用户,OwnCloud还提供了不少的免费应用,这些应用可以让你更好观看视频、倾听音乐等。 - owncloud
- OwnCloud,是一个开源的个人云服务器搭建程序。 简单来说就是一个基于Php的自建
- 七牛云存储平台的实战经验分享
- 微世界企业网盘功能对比
- 从零开始云计算 金山云 ( 金山快盘) 杨钢
- Dropbox从4000~4000万用户的过程中的可扩展性经验
- Dropbox的基础架构:
- 几乎全部用的是Python,C的代码行不过万
- MySQL
- Paster/Pylons/Cheetah(网页框架)
- S3/EC2来进行文件存储
- Memcached来进行缓存
- Ganglia来绘图
- Nginx作为前端服务器
- Haproxy作为应用服务器的负载均衡器,放在nginx后
- Nagios用作内部健康检查
- Pingdom作为外部服务监控
- GeoIP将IP映射为位置
- Scaling lessons learned at Dropbox, part 1
- 過來人談 Dropbox 的技術心得
- Dropbox Analytics
- Understanding Personal Cloud Storage Services
- Dropbox的基础架构:
- 网盘和云存储区别:
- 从应用角度看,网盘更多是存储数据,但是云存储的功能却要包含更多内容。
目前来看,云存储服务提供商更愿意围绕服务打造出一个包含文件同步、工作协同、
多应用汇聚的平台,而不仅仅是放个数据那么简单。 - 而在底层架构上,云存储应用了包括分布式文件系统、多租户管理与身份验证、虚拟化
等诸多技术手段。网盘的技术构架则相对简单,以用户管理为例,网络硬盘仅仅只是依
靠数据库管理进行用户区分,而并没有实现单一账户下多权限的划分、多账户间协作等管控内容。 - http://storage.chinabyte.com/282/12231282.shtml
- 从应用角度看,网盘更多是存储数据,但是云存储的功能却要包含更多内容。
2014-12-12
- 用SDK实现属于自己的网盘
- 华为网盘c/c++客户端sdk
- 如何在“我的电脑”中创建文件夹
- Favorite posts on HighScalability
- 基于Hadoop2.2.0版本分布式云盘的设计与实现
- 采用了Struts2+tomcat7+mysql+Ajax+hadoop2.2来部署架构整个系统。
- 实现的功能
- (1)显示用户系统下所有文件列表
- (2)实现上传、下载、重命名、删除文件功能
- (3)实现客户端音频(多数格式的)音乐播放功能<暂不支持视频播放>
- (4)实现在线图片预览的功能
- (5)实现在线文本文档的浏览功能
- 其实无论是百度的网盘,还是360网盘,还是华为网盘,其无非都是类似于像Hadoop这样
的做分布式存储,前台展现给客户。分布式存储有的是用openstack。还有的像淘宝的TFS,
华为的自己开发的云端系统,华为OceanStor CloudStor CSS云存储等等吧。。
- 从Hadoop框架与MapReduce模式中谈海量数据处理
- 三张图看遍Linux 性能监控、测试、优化工具
- Linux performance tools
- pdf file
- http://www.brendangregg.com/blog/2014-11-22/linux-perf-tools-2014.html
- System Libraies
- System Call Interface
- VFS
- File Systems
- Volumn Manager
- Block Deivce Interface
- Sockets
- TCP/UDP
- IP
- Ethernet
- Scheduler
- Virtual Memory
- Device Drivers
- submit Chelsio 10GNIC driver rpm package to svn, and change ks.cfg file
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
- DM-Cache project
- http://visa.cis.fiu.edu/tiki/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=…
- Easier storage-ACL setup
- Name shows up as LUN model name
- Tags for initiator aliases and grouping
- ‘info’ command
- IPv6 portal support
- WWNs normalized
- Only show HW fabrics that are present
- 10 previous configs saved.
- More info in summary
- iSER support
- Better sorting
- Playlist available here: http://www.youtube.com/playlist?list=…
- 修改了启动加载的脚本,导致开机的时候跑不到登陆界面,可以通过再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:v00008086d00001533svsdbcsci igb
- 查询网卡的ID信息
- 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
- Need to use
- 关于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
- SSD在存储上应该怎么用
- 解决ucli设置IP失败问题
- 背景: 系统不变,更换了主板
- ucli network -s -i IP …, 出现配置冲突信息
- 追查原因:
- 查看dmesg,发现udev会修改eth名, 经查,发现udev的规则文件中设置好了对应
eth0和eth1应该对应哪个mac地址,这个是对应之前的主板网卡的,现在是新主板
mac地址对不上了,所以要修改eth名 - ucli network模块只是简单判断eth3是否存在,使用的判断方式有问题.
- 查看dmesg,发现udev会修改eth名, 经查,发现udev的规则文件中设置好了对应
- 追查原因:
- 关于samba和nfs是否支持断点续传
- 查看SELinux状态及关闭SELinux
- 查看SELinux状态:
- /usr/sbin/sestatus -v
- getenforce
- 关闭SELinux:
- 临时关闭(不用重启机器): setenforce 0
- 需要重启机器: 修改/etc/selinux/config,将SELINUX=enforcing改为SELINUX=disabled
- 查看SELinux状态:
- Raid,LVM,DeviceMapper
- 块存储的世界
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
- 如果无法连接,可能是/etc/samba/smb.conf中的配置是要用户名秘密登陆模式?
- 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
- 主机: 172.16.130.143
2014-12-04
- 明天工作:
- 看下是否有保留组IP功能的必要.
- 搜索下业界的存储产品都使用了哪些iscis的功能特性
- 继续整理LIO开发计划
- 研究下facebook的ssd缓存,主要有以下链接:
- 有空的时间,是否尝试自己来实现以下SSD做磁盘缓存.
- 高级专利搜索
- google search
- awk.so
- wen.lu
- jason
- jason文件 http://www.json.org/
- 文件解析 by C https://github.com/udp/json-parser
- 文件解析 by C++ http://www.open-open.com/lib/view/open1405221517405.html
- 关于targetcli无法从逻辑卷创建lun设备:
同事重新编译了lvm逻辑卷相关命令工具(pv,vg,lv等),解决了问题。具体怎么解决无法知晓。- targetcli /backstores/block create dg1lv1 /dev/dg1/lv1
- 成功在windows是上使用IOMeter 1M,0% read,0% random进行裸盘写测试,速度约70MB/s
- wxWidgets windows 编译安装测试
- 下载 3.02版的windows版本源码
- 使用Microsoft Visual C++编译
- cd到wxWidgets-3.0.2\build\msw目录
- nmake /f makefile.vc BUILD=release
- 使用minGW编译
- 安装MinGW5.1.6版本
- 把安装目录加入到环境变量中,如目录c:\MinGW\bin
- cd到wxWidgets-3.0.2\build\msw目录
- mingw32-make -f makefile.gcc
2014-12-03
- 搭配wxWidgets Linux 开发环境
- yum install codeblocks -y
- 启动CodeBlocks,用工程向导创建wxWidgets工程,F9编译,示例能正常编译和运行
- 关于开发,可以查看使用手册 http://docs.wxwidgets.org/3.0/index.html
- Ubuntu下Code::Blocks + wxWidgets 2.9.3开发环境搭建
- 万兆网卡测试
- 环境
- 存储 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
- Download Chelsio T520-CR万兆网卡 windows driver
- GC, 垃圾回收算法实现
2014-11-28
- LIO开发者Nicholas A. Bellinger
- http://www.youtube.com/watch?v=NDSAcbsZdX4
- 他的一段介绍:http://kvmforum2014.sched.org/speaker/nicholasa.bellinger#.VHgsu3-tVPc
I’m the SCSI (LIO) target maintainer for the Linux kernel, and co-founder + CTO
at Datera. I’m also the principle author of the upstream iscsi-target, iSCSI
extentions for RDMA (iSER) target, qlogic 4/8/16 Fibre Channel target, and
vhost-scsi drivers. My ongoing projects include vhost-scsi live migratation
support in QEMU, the generational rewrite of the Linux/SCSI initiator subsystem
(scsi-mq), and T10 Protection Information (DIF) support with virtio-scsi + vhost-scsii.
I’ve presented at Linux Storage & Filesystem workshop in 2008, 2009, 2010 and 2014,
and LinuxCon North American in 2009. - KVM I/O performance and end-to-end reliability
- Arne Redlich的githhub页面https://github.com/aredlich
- IET项目另外一位主要开发者Ross Walker已经没有再继续为IET贡献代码
http://sourceforge.net/u/rswwalker/profile/ - IET项目开发者Arne Redlich为内核贡献代码搜索:
搜索directory: /home/dennis/work/kernel/linux-3.10.61/drivers
搜索command: grep -rn ‘Arne Redlich’ ../
../drivers/infiniband/ulp/iser/iscsi_iser.c:42: Arne Redlich
../drivers/scsi/libiscsi_tcp.c:25: Arne Redlich
../drivers/scsi/iscsi_tcp.c:25: * Arne Redlich - IET项目开发者Arne Redlich和Zhenyu Wang都有为linux 内核scsi贡献代码,见
drivers/scsi/iscsi_tcp.{c,h} - IET项目下载
- svn checkout svn://svn.code.sf.net/p/iscsitarget/code/trunk iscsitarget-code
- 使用svn log >iet.log, 查看log信息可以得到所有提交的记录信息.
- IET项目成员的Arne Redlich还在为IET贡献代码
- http://sourceforge.net/p/iscsitarget/code/503/
- 显示的贡献日期是2014-06-17, 半年前
- http://sourceforge.net/u/agr1/profile/这个页面的右手边上的user activity
会显示用户的最新动态,可以看待该开发者还一直维护IET,只是没有release新版本而已.
- IET项目成员, http://sourceforge.net/p/iscsitarget/wiki/Home/
- Arne Redlich (admin)
- Ming Zhang
- Ross Walker (admin)
- Tomonori fujita
- collect TCM/LIO information
- who is Nicholas A. Bellinger? http://www.linkedin.com/pub/nicholas-bellinger/1/5b4/458
- 开发者 Ming Zhang http://www.linkedin.com/in/blackmagic02881
- http://linuxplumbersconf.org/2009/slides/Nicholas-A.-Bellinger-LIO-LPC-2009.pdf
- https://www.usenix.org/legacy/event/lsf08/tech/IO_bellinger.pdf
- Feature - based Comparison of iSCSI Target Implementations
2014-11-27
- 分析LIO实现
- /etc/fstab 文件解释
- 激活交换分区
- swapon /dev/sda3
- 参考 swap分区随开机自动加载的实现方法
- mkswap /dev/sda3
- swapon /dev/sda3
- blkid /dev/sda3
- vim /etc/fstab
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/
- [root@localhost linux-3.10.0-123.el7]# service target start
- 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
- 查询系统所用lvm版本 rpm -qf $(which lvcreate)
- lvm 源码 https://git.fedorahosted.org/git/lvm2.git
- lvm 作者在创建之初的介绍http://www.ota.be/linux/workshops/19990612/lvm.pdf
- lvm 作者在LinkedIn https://www.linkedin.com/pub/heinz-mauelshagen/9/78a/a81
- 理解 LVM (Logical Volume Manager)
- raid
- 硬raid,
- 无法直接看到单个磁盘,必须建raid才能看到磁盘阵列(raid0-1-5…)
- 使用Megacli命令创建raid, 创建完毕后会使用fdisk -l可以看到类似/dev/sdX这样设备
- 软raid,
- 直接使用fdisk就可以看到单个磁盘
- pvcreate, vgcreate, lvcreate
- LVM on RAID
- 硬raid,
- 打印代码,使用gvim打开代码然后选择工具中的保存为html格式文件, 然后使用firefox
打开预览格式颜色,修改html文件的字体和背景颜色,然后在firefox中可以打印成pdf文件.
2014-11-24
- 查看ustor创建iscsi卷流程,思考如何加入LIO
- 可以参考taobao开源项目tsar中的rpm打包方法,在源码中支持自动生成rpm包
- 老码农教你学英语
- 成为谷歌软件工程师你需要准备什么?
- 十步完全理解SQL
- 方向
- iscsi - LIO
2014-11-22
- neil brown,内核md作者
- md驱动和mdadm维护者网站: http://blog.neil.brown.name/
- list of all entries http://neil.brown.name/blog/front?action=all
2014-11-21
- centos7.0上使用targetcli创建iscsi卷
- 172.16.130.200
- ping的时候指定源地址, ping -I 192.16.4.23 192.16.4.70
- 添加子接口IP #ifconfig eth2:1 192.16.4.23 netmask 255.255.255.0 up
- 去掉子接口IP #ifconfig eth2:1 192.16.4.23 netmask 255.255.255.0 down
- 参考http://bbs.chinaunix.net/thread-2081551-1-1.html
- 参考http://itlab.idcquan.com/linux/administer/778944.html
- 解组IP(一个网口多个ip地址)中第二个IP地址无法ping通问题.
- rdesktop -f 172.16.130.7 -clipboard,用户名输入uit.win2008.com\administrator
- 是否绑定可以替换组IP?
- 关于HW工作环境介绍最好的信息http://www.zhihu.com/question/21630492
- 已发信息托辞
- 下周一需面谈
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
- http://pinyin.sogou.com/linux/ , 下载 sogou_pinyin_linux_1.1.0.0037_amd64.deb
- Linux下驱动开发调试技术
- 使用printk
- 查看OOP消息
- 使用strace
- 使用内核内置的hacking选项
- 使用ioctl方法
- 使用/proc 文件系统
- 使用kgdb
- 磁盘阵列同步和重建区别:
- 同步的目的是让所有数据盘数据一致(对于raid1来说,就是所有盘的数据一样,对
于raid5来说是写校验数据). - 重建目的是数据冗余。重建只有在阵列降级之后并且有热备盘的时候才会发生.
- 同步写的是正常的数据盘,而重建是写热备盘。
- 同步的目的是让所有数据盘数据一致(对于raid1来说,就是所有盘的数据一样,对
- 继续学习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设备的请求能够转发到磁盘上去。
- do_md_run
- 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
- 主要做了以下几件事情:
- 完成snmp windows开发
- 完成zd15 Linux版本开发
- 完成短信猫Linux接口研发
- IP绑定分析
- 万兆网卡性能测试和支持
- 关于未来要做的几个事情:
- 关于IET替换:使用LIO的话,了解下targetcli命令怎么使用就基本可以整合到ucli中
- HA:如果只是简单的优化性能,没有必要大改,除非想好好的把该产品做好
- NFS v4: 从长计议
- SAMBA IO: 从长计议
2014-11-17
- PostgreSQL架构分析
- iSCSI Multi-Path I/O (MPIO) Example
- 深入了解iSCSI的2种多路径访问机制
- MPIO, Multiple Path Input/Output, 多重路径, 允许1个iSCSI Initiator透过多个
Session连入同1个iSCSI Target设备 - MC/S, Multiple Connections per Session, 多重连接, 允许在同一个Session中,在
iSCSI Initiator与iSCSI Target间建立多个TCP/IP连接
- MPIO, Multiple Path Input/Output, 多重路径, 允许1个iSCSI Initiator透过多个
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
- [root@localhost ~]# iscsiadm -m discovery -t sendtargets -p 127.0.0.1
- 卸载并删除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 中
- 目前 Linux 上主要有三个 iSCSI Target 实现:
- 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
- 直接IO,direct i/o dd, 速度可以这样记录:write/read 1100/895 MB/s
- 数据库开发,与存储相关
- 数据库核心开发知多少–大家一起来写数据库引擎
- 如果您来参与开发数据库引擎,您认为难点在哪?
- sql parser
- sql reducer
- execution plan builder
- storage
怎么在磁盘中存储数据,meta data,index,实际数据怎么管理内存和外存之前的速度
差几个数量级,因为这个差异,数据库都会实现一个buffer manager策略,按块读取异
步IO也是一种可以利用的技术,分离读与写,这些都可以算作是难点.事务处理,这个
东西绝对是难点中的难点.
- NOSQL相关开源实现参考
- PostgreSQL
- Google Supersonic是谷歌最近开源的一套面向列存储数据库的查询引擎库,可作为
数据仓库项目的back-end,使用C++编写,当前发布版本为0.9.3,项目官方网址为:
https://code.google.com/p/supersonic/。Supersonic提供了一整套数据转换原语,
其中应用了大量cache-aware算法、SIMD指令以及向量化执行,这使其可以充分利用
现代化超流水线处理器的计算能力和计算资源,这无疑是该查询库最诱人的一点。 - http://blog.sina.com.cn/s/blog_48c95a190101b041.html
- 相关书籍
- 数据库系统实现(第2版) Jeffrey D.Ullman http://product.china-pub.com/216526
- PostgreSQL数据库内核分析 彭智勇 彭煜玮 http://product.china-pub.com/198803
- 数据库系统概念(第5版) 杨冬青
- [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/
- page cache, 页缓存,下面的操作得出页缓存大小为1.16GB, 有168kB的数据缓存在page cache中.
- Linux gimp 替代 widnows photoshop
- gimp.x86_64 : GNU Image Manipulation Program
- tutorials
- gimp中文教程以及作品展示
- Gimp 中文教程
- 研究iscsi, 比较各种版本,用户态内核态,发展趋势.
- Features comparison between Linux SCSI targets
- 比较
- SCST, 内核态
- STGT, 用户态,https://github.com/fujita/tgt,时有更新.当前版本v1.0.51
- IET, 用户态+内核态,
- LIO/TCM, 内核态
- 列出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) 获取网卡信息
- [dennis@localhost ethtool-2.6.33-pre1]$ grep -rl ‘Supported link modes’
- 发现一个状况,如果软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的方法
- 增加删除IP
2014-10-27
- 通过Glib库中的GKeyFile来读取配置文件.
系统中的好多配置文件的读取方式都是通过GkeyFile读取的
常用函数如下:- g_key_file_new()
- g_key_file_load_from_file()
- g_key_file_get_groups()
- 参考 http://blog.csdn.net/yebufan/article/details/9713539
- 换上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问题
- 换上看后,控制面板的网络设置,显示的万兆网卡图标都打叉叉,像是没有接光纤网线.
- 简单安装方法, 安装包ChelsioUwire-2.9.0.2-RHEL6.3-x86_64.tar.gz中的两个rpm包,
- 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
- parameter, using
- group ip
- parameter, using
-d group
- parameter, using
- bonding ip
- 网口信息结构成员
- 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网块,应该完成驱动的集成即可。
- [root@Ustor ~]# cat /tmp/.nic
- 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服务.
- 这个版本不行
- OS Name: microsoft Windows Server 2008 Enterprise
- OS Version: 6.0.6002 Service Pack 2 Build 6002
- 这个版本可以
- OS Name: microsoft Windows Server 2008 Enterprise
- OS Version: 6.1.7601 Service Pack 1 Build 7601
- 手动启动服务会报错: Error 1053: The service did not respond
to the start or control request in a timely fashion.- 这里有说解决方法: http://support.microsoft.com/kb/839174
- 从上面一个可以一个不可以,也看到可以的是装了SP1,不可以的没有装解决方法的链
接里也说要装 Microsoft .NET Framework 1.1 Service Pack 1, 所以下载个试一试
http://www.microsoft.com/en-us/download/details.aspx?id=33, 大小10MB,
最后发现无法在sp2版本中安装这个包。 - .NET service fails with error 1053 on Windows Server 2003 r2 sp2
和 http://support.microsoft.com/kb/936707, 说明了为什么SP2.0不行
- 这个版本不行
- 登陆要使用特别域的机器,rdesktop -f 172.16.130.7 -clipboard,用户名输入uit\administrator
2014-10-21
- 需要拷贝以前电脑坏硬盘中的资料.
- 验证scm可以安装在windows 2008下
- 脑图工具
- zip
- zip abc.zip abc.exe
- unzip -Z abc.zip 查看压缩文件
- 修改了snmp获取磁盘组(dg)容量的代码,已发出做验证工作.
2014-10-20
- 天下第一行书 王羲之兰亭集序
- http://www.loveis.lmtheme.ru/
- http://article.yeeyan.org/view/greenzorro/373129
- http://the-pittmans.com/
- http://www.quechua.com/campaigns/lookbook-spring-summer/#/home
- 70个全球最华丽的互动型单页网站欣赏
- 25佳漂亮的结婚邀请 & 婚礼请柬网站设计
snmp
磁盘组容量大小不正确问题
get_dg_capacity
int get_dg_capacity(int index) { int i=0, size = 0; if (NOT_IN_RANGE_DG(index)) return 0; for (i=0; i<g_dg_info[index].pd_count; i++) size += g_dg_info[index].pds[i].size; return size; }
- g_dg_info[dg_index].pds[pd_index].size = (int)(atof(result)1024); / TB -> GB */
- 可见size的单位是GB
- 外网访问内网
- 花生壳 linux版本下载 http://hsk.oray.com/download/#type=linux
- tar开后执行phddns,注意要在root权限下执行
[root@localhost dennis]# phddns Enter server address(press ENTER use phddns60.oray.net): Enter your Oray account:matrix207 Password: Network interface(s): [p4p1] = [IP:172.16.50.39] [lo] = [IP:127.0.0.1] Choose one(default eth0):p4p1 Log to use(default /var/log/phddns.log): /var/log/phddns.log Save to configuration file (/etc/phlinux.conf)?(yes/no/other):yes 172.16.50.39 NIC bind success defOnStatusChanged okConnecting defOnStatusChanged okRedirecting defOnStatusChanged okConnecting defOnStatusChanged okDomainListed defOnDomainRegistered matrix207.eicp.net ... defOnStatusChanged okDomainsRegistered, UserType: 0
- 开机运行 echo “/usr/bin/phddns -c /etc/phlinux.conf -d”>>/etc/rc.local
- 参考 花生壳 for linux的安装以及使用
- Linux系统用花生壳做内网映射
- 个人blog搭建
- 安装lighttpd,
yum install lighttpd
- 配置文件/etc/lighttpd/lighttpd.conf
- var.server_root = “/var/www”
- server.document-root = server_root + “/lighttpd”
- 可以创建目录/var/www/myhome/,增加文件index.html, 并且修改上面的server.document-root
- 启动
- lighttpd -t -f /etc/lighttpd/lighttpd.conf
- su -c ‘systemctl start lighttpd’
- 访问测试, 浏览器输入: 127.0.0.1
- 参考链接:
- 安装lighttpd,
- TODO
- study bootstrap, http://getbootstrap.com/
- 搭建个人blog,把marry相关信息(路线图)共享出来
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关系,应该没有问题
这个文件/etc/cf/conf/network.conf.monitor由谁产生?有何作用?[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
该文件应该是系统启动的时候只产生一次.[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
Intel iscsi 800MB/s | 900MB/snas 380MB/s | 140MB/s
iscsi性能比较高,smb方式的读写性能比较差.nas 370MB/s | 130MB/s
- 思考: 之前测试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查询并关闭使用相应文件系统的进程
参考 http://www.thegeekstuff.com/2012/02/linux-fuser-command/[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
2014-10-16
- Linux网络子系统, 搞内核网络开发的话,可以好好学习下;另外这里的文章笔记做的
不错,就是采用图文结合的方式;
理解一个程序的实现主要从两点来理解,一个是业务的处理流程,另一个就是数据的组织结构 - LDD网路驱动程序编写
- 重新整理bonding资料
- 重新读 传统RAID的性能瓶颈点在哪里?
明白了文章中的两个图的意思了.对新的raid2.0技术又有了些了解. - 网络虚拟化
- Netfilter框架开发,精通Netfilter和IPTable技术
- 熟悉网络2/3层协议和技术,如OSPF/ARP/GRE/BRIDGE/BGP
- 熟悉TCP协议栈实现,有传输协议优化经验
- 熟悉openswitch/openflow网络虚拟化技术
- 存储业务后台开发
- Linux, C/C++, TCP/IP,数据结构和算法
- Linux内核开发
- 熟悉Linux内核,精通内核网络、存储、文件系统、内存、调度器等模块之一
- 熟悉使用Linux底层工具链,了解其原理
- 熟悉CPU体系结构
- 出色的内核故障调试经验
- 通过vmstat的简单分析数据库操作
- 查询iostat中设备dm-XX和具体设备的对应关系
- mount
- ls -l /dev/mapper/
- lvdisplay |awk ‘/LV Name/{n=$3} /Block device/{d=$3; sub(“.*:”,”dm-“,d); print d,n;}’
解析一下awk:- 搜索LV Name, 第三列的值赋给n
- 搜索Block device, 第三列的值赋给d, 并且替换d中冒号:前的字符为dm-, 然后打印d和n
- http://superuser.com/questions/131519/what-is-this-dm-0-device
- http://serverfault.com/questions/87774/how-can-i-map-iostat-device-names-to-lvm-dev-mapper-xxx-names
2014-10-15
- 统计linux网口流量脚本
- 使用 shell 脚本对 Linux 系统和进程资源进行监控
- 开启执行 echo “/opt/YOUR_SCRIPT.sh” >>/etc/rc.local
- 配置了crontab但是无法启动相关脚本,不知道为何..
- crontab -e 或 vim /etc/crontab
- service crond restart
- linux 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
根据以上数据,可以推测出该程序的运行过程:主函数起来后,fork一个进程,该进程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 ...>
会起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
- 调用很多的futex进行线程控制, futex可以使程序等待某个地址的值发生变化,当值
- top中看到某个进程占用CPU超过100%的情况,使用shift+i 关掉Irix模式即可显示正确的占用率.
另外Cpu(s)显示的是平均使用率,如果想看到每个核心的使用情况,按1切换即可.
2014-10-14
- 进程,线程
- pstree |grep -i XXXX
- ps -eLf | grep qemu,-L参数显示进程,并尽量显示其LWP(线程ID)和NLWP(线程的个数)
- Linux中查看进程的多线程
- 客户程序模拟业务环境运行,系统可能死掉(ping不通)
- 编写脚本监控系统信息
- iftop, 源码安装
- 安装libncurses
- 安装libcap
- tar -zxvf libpcap-1.6.2.tar.gz
- cd libpcap-1.6.2
- ./configure
- make;make install
- 安装iftop
- tar -zxvf iftop-1.0pre4.tar.gz
- cd iftop-1.0pre4
- ./configure
- make;make install
- 网络性能监测工具
- iftop, network interface bandwidth monitoring. http://www.ex-parrot.com/pdw/iftop/
- ntop
- iptraf
- nload
- sar
- Linux网络流量实时监控ifstat iftop命令详解
- Linux各种查看网卡流量的方法
- ★★★性能调优攻略
- 使用Intel千兆网卡替换Chelsio网卡测试
- 安装windows版本驱动,安装过程会造成原来可以正常远程访问的网络连接失败了(应
该是系统重启造成的) - [root@Ustor ~]# modinfo ixgb
filename: /lib/modules/2.6.32-279.el6.x86_64/kernel/drivers/net/ixgb/ixgb.ko version: 1.0.135-k2-NAPI [root@Ustor ~]# ethtool -i eth4 driver: ixgbe version: 3.6.7-k firmware-version: 0x61bd0001 bus-info: 0000:01:00.0
- 安装windows版本驱动,安装过程会造成原来可以正常远程访问的网络连接失败了(应
2014-10-13
- Linux 磁盘块大小
- Linux磁盘Block Size研究备忘
- 磁盘的块大小(Block Size)和扇区大小(Sector Size)
- 块是文件系统的抽象,不是磁盘本身的属性。扇区大小则是磁盘的物理属性,它是磁盘设备寻址的最小单元
- 查看某个分区的Block Size: blockdev –getbsz /dev/sda7
- 查看硬盘的扇区大小(Sector Size): 通过fdisk -l可以看到
- Linux内核还要求 Block_Size = Sector_Size * (2的n次方),并且Block_Size <= 内存的Page_Size(页大小)
- linux查看os系统块的大小
- 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处理模块。
- Tgt也是一个通用的SCST Target开源实现,与前两者不同的是,在支持iSCSI协 议上,
- 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协议的。
- 无论是SCST还是LIO,我都不认为它们是支持分布式文件系统的最佳选择。
- Tgt的缺点与改进
- Tgt的backstore在使用多线程时,多个线程竞争一个list,开销较大。可以让 每个线程维护
一个list,主线程通过CAS无锁队列的方式,将SCSI请求根据rr算 法加入到每个线程的list中。 - Tgt的backstore与LU之间连接数与线程数,是1:1关系,且线程数为4,写死了的。
可以修改代码,将连接数改为可配置的。 - Tgt使用一个主线程通过epoll接受所有Initiator的读写请求,当登陆的Initiator较多时,
这里可能成为瓶颈。通常来说,这不是问题,因为会iSCSI Target会部署多个的。
- Tgt的backstore在使用多线程时,多个线程竞争一个list,开销较大。可以让 每个线程维护
- SCST与LIO
- 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
- 显示数据的含义(也可以通过man iostat查到)
- 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也差不多.
- 单盘,一个文件, 速度 380MB/s左右, windows 任务管理器显示网络占用33%,
- 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 任务管理器显示网络占用12%, ustat 1显示网速145000KB/s,
- Test Write, File size(MB): 10240, Record size(KB): 1024
- 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架构,不在本地优化)
- I/O 预先读请求的量(内核系统默认先响应读请求,所先响应的量可调):
- 文件系统优化
- 查看
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(磁盘同步最小速度
- yum install sysstat(提供iostat,sar等系统信息查看命令) -y
- I/O 优化
- 安装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
- 硬raid, 创建RAID5,10块硬盘组成,1块做热备.
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
- 急需重新整理网络密码
- 如何实现一个malloc
- 归还zd15项目所借物品(硬盘+机器)
2014-10-03
- 使用dd产生的文件创建raid
- dd if=/dev/zero of=/root/loop1.disk bs=1M count=1024
- dd if=/dev/zero of=/root/loop2.disk bs=1M count=1024
- losetup -f 查看可用的loop设备
- losetup /dev/loop0 /root/loop1.disk
- losetup /dev/loop1 /root/loop2.disk
- losetup -a 查看创建的loop设备
- mdadm –create –auto=yes /dev/md0 –raid-devices=2 –level=1 /dev/loop0 /dev/loop1 –assume-clean
- cat /proc/mdstat
- mdadm –detail /dev/md0
- mdadm /dev/md0 –grow –bitmap=internal 增加内部bitmap
- mdadm /dev/md0 -f /dev/loop0 设置为faulty
- mdadm /dev/md0 -r /dev/loop0 移除faulty盘
- mdadm /dev/md0 -a /dev/loop0 加入新盘
- loop设备及losetup命令介绍
- Linux 中软件 RAID 的使用
- RAID – not just smoke and mirrors
- md驱动和mdadm维护者网站: http://blog.neil.brown.name/
- Linux 历年大会: http://mirror.linux.org.au/linux.conf.au/, 里面有很多视频
- 文件系统 IO stack , http://mirror.linux.org.au/linux.conf.au/2014/Wednesday/68-File_Systems_and_Persistent_Memory_Why_We_Wont_Change_as_Fast_as_We_Should_-_Ric_Wheeler.mp4
- 2014华为云计算大会
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
- 客户端,windows server 2008 R2 Enterprise(64 bits),
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中的磁盘数量足够多时,条带读性能将不再局限在单盘性能上了
- Spare盘是写操作性能瓶颈点。如果单盘写入,那么对于SAS盘,其最大的写入带宽可
- ★★★一个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,
同时发现活动网口是eth5(Currently Active Slave: eth5)[root@Ustor ~]# cat /proc/net/bonding/bond0 |grep -i 'Interface' Slave Interface: eth5 Slave Interface: eth2 Slave Interface: eth4 Slave Interface: eth3
再次确认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
原来是这样,eth5 down的时候确认改变了活动网口[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
活动网口是eth3,可是流量却在eth5,为什么?[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
- 在正常情况下,网卡只接收目的硬件地址(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
- bonding驱动截获本机发送的ARP应答,并把源硬件地址改写为bond中某个slave的
- 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>
- 指定把要附加的网口
如果bond0没有mac地址,就会使用eth0的, 后面所有的网口将使用相同的mac地址(ALB/TLB模式除外)# ifenslave [{-f|--force}] bond0 eth0 [eth1 [eth2]...]
- 确保需要的驱动已加载
- 每一次在修改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
- -n 查询显示ID, 下面显示的8086:0c00 表示厂商ID:设备ID
- 网口和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.- TrueCrypt继承版,原先的版本由于安全等因素终止开发了.
- github上的项目路径https://github.com/CipherShed/CipherShed
- wiki在这里https://wiki.ciphershed.org/
- 可以学习一下linux下的UI开发.
- 可以学习数据加密过程
- 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网口的网卡确实存在问题,明天再解!
- 挂载问题
- 各发行版软件以及文档下载地址: http://172.19.1.105/d/rev/dev2/release/package/
- SV1000G2系列产品用户使用手册-20131114.doc
- iscsi, NAS, cifs, NFS?
- 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
- command used by ucli
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
- net_analysis_conf 函数
- 配置文件信息
[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
- network.c
- 解决页面网卡信息显示错误问题
- 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=0 即:(balance-rr) Round-robin policy(平衡抡循环策略)
- 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路由内核架构及设计,熟悉应用协议分析,及软件架构设计;
- linuxc/c++研发工程师(内核网络服务开发方向)
- 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网络方向的工作,开启职业生涯。
- 1.系统方面,熟练使用linux操作系统下各种命令,服务配置,开源软件管理,特别是
2014-09-18
- 工作上有如下几个问题要解决:
- 组IP,负载均衡
- 功能作用是什么?
- iscsi 工作ok
- 绑定IP, 负载均衡
- 功能作用是什么?
- iscsi 工作fail
- samba性能问题
- 千兆网卡只跑到70~80MB/s,正常应该跑到100MB/s,iscsi和nfs就可以.
- 万兆网卡页面显示问题
- 组IP,负载均衡
- 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/
- 当前系统中的版本是2.1.4-NAPI
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
- TMPDIR=
- 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 做测试
理论上做附件系统是很费时的,这里不应该那么快, 这么快,应该是/dev/sda4,/dev/sda5[ 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
都还没有生成,或者说没有被系统识别到,有问题.
参考这个 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
发现只有mbr.disk和partition.bak是没有变的,其实这也合理。[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
- 想看看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的问题.
- 参考这篇文章http://www.rodsbooks.com/missing-parts/,使用如下方法,但没解决.
- 进入内置盘系统, 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
- 备份MBR:
- 硬盘的分区表是存放在硬盘的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
而恢复的/etc/fstab是这样: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
尝试修改,然后重新启动看看是否正常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]
- uuidgen会返回一个合法的uuid,结合tune2fs可以新生成一个uuid并写入ext2,3,4
- 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, –scriptnever prompts for user intervention
- parted -s /dev/sda print 查看分区信息
- parted -s /dev/sdb rm 5 删除分区
- 第一个主分区3G
- parted -s /dev/sdb mklabel msdos
- parted -s /dev/sdb mkpart primary 0 3G
- 剩余空间给扩展分区
- parted -s /dev/sdb mkpart entended 3 100%
- 在扩展分区上创建第一个逻辑分区
- parted -s /dev/sdb mkpart logic 3G 5G
- 创建第二个逻辑分区
- parted -s /dev/sdb mkpart logic 5G 100% #100%代表使用剩余的所有空间
- 参考 http://zhangmingqian.blog.51cto.com/1497276/1068779
- 参考 http://www.centos.org/docs/5/html/Deployment_Guide-en-US/ch-disk-storage.html
- 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’
这里可以看到使用DVD通过安装装系统后,得到的分区表的start会跟上一end是相等的/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
但是在使用fdisk /dev/sda进行格式化磁盘时:
这就造成无法使用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
怎么破?
可是为什么要还原呢?因为如果/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
- 什么是Here Document
- 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脚本
- 问题和莫名的解决方法
- shc -v -r -f filename,出现问题has expired! Please contact your provider,
解决方法是参数, shc -c -rf filename - shc -v -rf filename,出现问题[3]+ Stopped ./filename
解决方法是参数, shc -c -T -rf filename
- shc -v -r -f filename,出现问题has expired! Please contact your provider,
- 不足
- ps -ef |grep filename 可看到大部分的源代码
- 高手可以还原
- 参数
- -e: 指定过期时间为2012年10月20日
- -m: 过期后打印出的信息;
- -v: verbose
- -r: 可在相同操作系统的不同主机上执行
- -f: 指定源shell
- rpm : http://pkgs.repoforge.org/shc/
- source: http://www.datsi.fi.upm.es/~frosal/sources/
安装rpm包可能会出现依赖的库不存在,或者版本不一致问题,可以直接源码安装, make install即可. - 参考
- 问题和莫名的解决方法
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
- zd15linux 系统安装过程:
- raid1
- 分区 /boot ext4 500M, swap 2048M, / 10G ext4, /data ext4 剩余空间
- Basic Server, 开发工具, 服务器平台开发, 桌面, 中文支持
- MegaCli,OpenIPMI,ipmitool软件的rpm依赖包安装
- 执行zd15linux-raid1-install.run
- 重启系统确认LCD监控数据有正确显示
- ssd
- 安装系统时不能接raid1,使用4pin供电,即要识别ssd盘为/dev/sda
- 分区 /boot ext4 500M, swap 2048M, / ext4 剩余空间
- Basic server
- gcc软件的rpm依赖包安装
- 执行zd15linux-ssd-install.run
- 批量生产时,可以通过拷贝磁盘方式制作系统盘
- 是否可以做到出现问题时候,如果raid1的两块磁盘都有问题了,可以先在启动时候
按ctrl+H设置raid1,然后按reset选择恢复系统,快速的创建一个可用的系统. 这个
也许只要增加一个自动对磁盘进行分区的脚本,还有执行数据恢复即可。
- raid1
- rssp
- Makefile增加制作安装包功能
- rpm 包只适合与redhat系列系统使用,而自解压安装脚本可以在unix like系统中使用,
所以在做安装包的时候,建议使用后者比较好。 - linux 安装卸载脚本学习
- ★★http://linux-wiki.cn/wiki/zh-hans/制作自解压安装文件
- ★★http://bbs.chinaunix.net/thread-380286-1-1.html
- ★★http://infotech.wsu.edu/security/services/sslVPN/anyconnect_3.1.05160/linux_64/vpnsetup.sh
- Bash Self-Extracting Script
- http://longren.io/how-to-cisco-vpn-client-on-ubuntu-704-feisty-fawn/
- http://blog.csdn.net/budapest/article/details/8756130
- Linux服务自动启动
setup 、rc.local 和chkconfig三种方式都可以设置grep /usr/bin/seriald /etc/rc.d/rc.local || echo /usr/bin/seriald >>/etc/rc.d/rc.local
- http://space.doit.com.cn/?uid-54383-action-viewspace-itemid-6816
2014-08-23
- 思路: 在makefile中获取tar.gz包的行数, 然后修改install.sh中的行数即可
- ★★★制作Linux下程序安装包——使用脚本打包bin、run等安装包
这个链接里使用的tail +7 是由问题的 - 用Unix Shell实现自解压的tar文件
- shell脚本加密
- 使用tar或dd等完成Linux系统备份恢复
- Linux 備份策略
- linux哪些目录需要备份
- /proc 不需要备份
- /sys
- /lost+found
- http://www.linuxidc.com/Linux/2007-07/6232.htm
- http://xylinux.blog.163.com/blog/static/4949453520079995513733/
- zd15linux
修改恢复脚本,Makefile增加打包功能- 格式化代码,修改条件语句和函数的花括号
- 完善backup.sh和restore.sh
- Makefile增加安装卸载功能
- Makefile增加制作安装包功能
- 增加加密shell脚本工具shc
- 修改umonitor使用到的配置文件名和路径为/etc/umonitor.c
- 早上9:46加班, 加到20:10
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
- 开机运行
- 把要运行的命令加入到/etc/rc.d/rc.local
- http://blog.163.com/xiaomingtt@126/blog/static/6500578520098120338239/
- IP地址设定
- zd15linux
解决字符乱码和消息无法显示问题,实现串口信息读取功能- 实现IP修改功能
- 解决发送数据显示乱码问题
- 解决select读取数据不完整问题
- 解决消息发送后无法显示问题
- 删除seriald中系统恢复代码
- 增加ip设置的shell脚本
- 解决ip地址格式问题,每个段占3位,0用空格代替,和windows版本一致
- linux下串口编程VTIME和VMIN的设置
- VTIME定义等待的时间,单位是百毫秒(通常是一个8位的unsigned char变量,取值不能大于cc_t)。
- VMIN定义了要求等待的最小字节数,这个字节数可能是0。
- http://www.cnblogs.com/andtt/archive/2011/08/19/2145639.html
- http://www.cnblogs.com/cxjchen/archive/2013/05/10/3071250.html
- Linux下串口编程入门
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恢复系统会很快.
看来备份跟恢复的速度比是1:10, anyway, 先关机,然后启动系统进入raid1,看系统[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
有没有恢复成功.
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
- 备份
- 涉及命令
- fdisk -l
- sfdisk
- dd
- df -hT
- 关于用dd备份或恢复分区表
- linux备份分区表及dd命令
- DD备份和恢复分区
- 用dd实现linux硬盘备份
- 涉及命令
- 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的磁盘空间
- 标配(1T 3.5寸硬盘, 160G 2.5寸SSD硬盘, 4G 内存)
- 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
通过此命令输出,再配合grub.conf的可以确认从哪个磁盘分区启动/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"
- cat /boot/grub/grub.conf
说明grub启动已经从指定的UUID磁盘启动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
- 解磁盘阵列抢占本地磁盘/dev/sda问题, 本地磁盘变成/dev/sdb,导致系统启动出现问题.
这种现象是因为连接外部存储的适配器的优先级比本地的scsi/fc的适配器的优先级高造成的.- 更改Raid卡和HBA卡在Linux下的启动顺序
- RHEL 6系统启动时盘符漂移及解决
- 如先加载megaraid_sas驱动,则该RAID控制器下的硬盘会首先分配盘符,即/dev/sda
所对应的硬盘在该RAID控制器下。若先加载FC驱动,则FC下面的硬盘会首先得到盘符,
此时/dev/sda就在FC控制器下面的硬盘。
- 如先加载megaraid_sas驱动,则该RAID控制器下的硬盘会首先分配盘符,即/dev/sda
- 早上10:10左右过来加班,晚上19:10左右离开.
2014-08-15
- Linux内核文件系统代码行数, 内核版本2.6.32.63, fs目录代码量912776
计算代码find ./ \( -name "*.h" -or -name "*.c" \) | xargs wc -l | tail -n 1
- ext2 8799
- ext3 16321
- ext4 33459
- cifs 31706
- fat 6817
- btrfs 53889
- xfs 100454
- zd15linux 备份还原
- 自己打造硬盘上的一键还原系统
- DRBL 企鵝龍– Disk Remote Boot in Linux
- 無碟環境 DRBL 與再生龍 clonezilla 的大量復原機制
- Clonezilla Live - 免安裝的單機版還原系統
- ★★★USB 隨身碟/硬碟的 Clonezilla Live
- ★★★將Clonezilla Live放在硬碟中
- IDE 修改为 AHCI 模式
- 不插入raid1的磁盘,在SSD上装系统,然后同时插raid1和SSD,会从raid1启动系统(想要的是从SSD启动)
- 插入raid1磁盘和SSD盘,先在riad1上装系统,再在SSD上装系统.
- raid1盘被识别为/dev/sda, SSD盘被识别为/dev/sdb.
- boot loader安装在/dev/sda
- 同时插raid1和SSD,从SSD启动;
- 只插SSD盘,从SSD启动;
- 只插raid1盘,启动失败,出现panic.
- SSD中安装的是CentOS6.5, kernel是2.6.32-431.el6.x86_64
2014-08-14
- zd15linux
- ssd安装CentOS6.5, 启动还是会默认从raid1的系统启动
- ssd安装windows 2003 server,启动是可以从ssd启动的
- 用U盘启动G4L备份还原linux系统
- CentOs5.5使用G4L克隆磁盘更换坏盘
- Ghost备份Linux系统详解
- http://linux.chinaitlab.com/special/kernel2009/Index.html
- 内核邮件列表: http://vger.kernel.org/vger-lists.html
- ★★★内核源码版精华帖分类汇总
- study 《深入理解Linux内核》
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中启动…
- 设置自动连接eth0, 修改/etc/sysconfig/network-scripts/ifcfg-eth0中
- ssd安装CentOS6.4
- Whonix,匿名操作系统,可以隐藏真实IP和DNS, 就算root被入侵,也无法获取.
- https://www.whonix.org/wiki/Main_Page
- base on Tor, Debian GNU/LINUX, security by isolation
- 由两部分组成:工作站和网关,工作站使用virtualbox做隔离,网关使用tor进行
网络加密. - https://github.com/Whonix/Whonix
- 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失败
- 拔掉SSD的4pin电源线,不接2pin电源线, 测试后发现,linux和windows发送给串口
- ds2img
- 想分析linux-2.6.32.63/include/linux/fs.h, 结果失败, 脚本写的还是有问题
- TODO: 增加语法分析,更准确的得到结构体信息
- https://github.com/shiyanhui/Compiler
- https://github.com/eliben/pycparser
- https://wiki.python.org/moin/LanguageParsing
2014-08-11
- 2013linux Kernel 华人patch列表 http://www.ckernel.org/patch_list/
- No.1 Axel Lin 1821
- No.2 Yinghai Lu 1193
- No.3 Herbert Xu 1050
- No.4 Wei Yongjun 821
- No.5 Li Zefan 707
- No.6 Shawn Guo 666
- No.7 Theodore Ts’o 605
- No.8 Eric Miao 481
- No.9 Wang Cong 455
- No.10 Fengguang Wu 429
- wangcong http://wangcong.org/, 一位linux 内核开发者,远离城市,生活大理,
有理想有目标,给开源项目打patch,最终肉身翻墙,工作于twitter - 内核代码仓库 http://git.kernel.org/cgit/linux/kernel/ 通过owner可以查看到
谁负责哪个子系统的维护.- 想找文件系统的维护记录,不知道怎么找…
- linux kernel mail list http://www.tux.org/lkml/
- 内核模块编程 http://www.tldp.org/LDP/lkmpg/2.6/html/
- 发几个自己做的关于内核IO方面的ppt
- 关于内核对普通磁盘读的处理–块驱动方面的一些细节
- 关于SSD的一些原理的研究内容,内容不多,就是关于flash的一些原理和在应用方面的原理
- 做一个facebook的使用flash cache做为普通磁盘的cache优化的内核模块的原理研究,使用的是DM机制
- http://www.ckernel.org/
- ★★★资料下载 http://www.ckernel.org/media/ppt/, 这部分资料需要好好看看
- 整了个自动下载全部资料的shell脚本,使用wget,其实可以使用wget下载整个网站
内容就ok了,不用那么费事, 命令如下: - wget -U “Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; GTB5)” -r -p -k -np -Pmydir -nc -o down.log http://www.ckernel.org/media/ppt/
- 想找这篇文档《从文件系统到云存储》陈莉君
- A simple filesystem to understand things
- aufs - simple Linux kernel file system for os course
- iet的target端如何获取lun信息返回给initor端?
- Writing a File System in Linux Kernel
- Linux Filesystems in 21 days
- A step by step introduction to writing (or understanding) a Linux Filesystem
- http://ftp.samba.org/pub/samba/cifs-cvs/ols2006-fs-tutorial-smf.pdf
- http://svn.samba.org/samba/ftp/cifs-cvs/samplefs.tar.gz
- 显示gcc定义的宏
gcc -dM -E - < /dev/null
- zd15linux
- 2.5吋硬盘上安装系统,110.65上的Windows_Server_2003_VOL_SP2_CN.iso, 使用
内置的key无法注册, 网上搜索了一个
JCBPD-YMX9T-G34HP-PTDWM-CDBQY - windows 2003中发送message是可以正常显示的
- raid 1中做raid rebuild好像最后有问题
- 本来以为ssd盘坏掉了,bios检测不到,也进不了系统。后来发现是没有插入4pin的电源线.
- 2.5吋硬盘上安装系统,110.65上的Windows_Server_2003_VOL_SP2_CN.iso, 使用
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
- rssp
- 增加根据运行级别执行相关服务的功能
- 屏蔽在make中更新版本信息的打印
- 修改Makefile,设置CFLAGS,便于gdb调试
- 解决全部的编译告警
- 增加设置进程标题功能,便于进程监测
- 增加设置守护进程的pid文件,便于非root帐号运行
- zd15linux
- 刻录了Windows_Server_2003_VOL_SP2_CN.iso, md5值:954d74e3b8609d83745da69c6bbb4501
- 安装windows2003,发现机器识别不到SSD盘了…
- 一个可以显示shell命令进度信息的脚本
- 制作zd15 window2003安装盘
- 这辈子再也不碰raid了
- LSI MegaRAID - megacli
- linux修改进程名, 便于监测
- 查询父子进程命令
ps auxf |grep "PROCESS_TITLE" |grep -v grep
- 动态更改进程名
- linux下修改进程名称
- nginx模块开发(21)—设置进程名称
- 查询父子进程命令
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
- /opt/MegaRAID/MegaCli/MegaCli64 -pdrbld -showprog -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: “,
p = ngx_cpystrn(p, (u_char ) title, ngx_os_argv_last - (char ) p);ngx_os_argv_last - ngx_os_argv[0]);
- 上面两个函数的作用就是把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 安装
- http://tieba.baidu.com/p/2781958402#43839210458l 这个链接里有人回复说
6.4的也可以使用dd到u盘进行安装.
- http://tieba.baidu.com/p/2781958402#43839210458l 这个链接里有人回复说
2014-08-05
- zd15linux 确认客户指定使用centos 6.4操作系统
- download centos 6.4, 当前6.4在大多数的下载站点都被删除了,因为该版本
已经不提供更新支持. - u盘刻录? 光盘刻录?
- windows 分区
- C、D、E
- os.gho、data.gho、bs.gho
- Linux 分区
- /boot ext4 500M
- swap 4096M
- / ext4
- /data ext4
- /data ext4
- /home ext4
- centos6.4安装教程
- download centos 6.4, 当前6.4在大多数的下载站点都被删除了,因为该版本
- xy week_report study
- 20130527
- 硬RAID出现文件系统断电损坏的情况,debug了一下,发现是ag中
free inod的数量与agf中的free inode数量不一致,导致free inode数量不一致,
free inode的B+树异常; 进行文件系统写时文件系统立即损坏。- 这里是如何做debug的?
- 什么是ag,agf?
- 目前对XFS掉电保护研究的结果:软raid比硬RAID的保护性好,因为软RAID有屏障。
软RAID可以通过sync cache命令将数据写到硬盘;硬RAID控制权在硬RAID卡。
- 硬RAID出现文件系统断电损坏的情况,debug了一下,发现是ag中
- xfs_repair 用修复xfs文件系统故障
- 总结主要工作:
- 负责iscsi,bug解决,功能实现;客户端支持、掉线、丢包、负载均衡、性能调优、C++实现.
- 负责xfs文件系统,bug解决
- maid功能,核态和用户态实现
- 研究vfs、ext3日志文件系统原理
- 研究镜像mirror
- 研究raid、md
- 网络、磁盘IO
- 20130527
- 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
- tar特点
2014-08-01
- 修改lmc_sender, 增加自动化测试代码
- sscanf支持正则表达式,如果要提取“log_path=/tmp/test.log;”中的路径值,
- sscanf(“log_path=/tmp/test.log;”, “%s=%s;”, a1, a2); 这样是有问题的
- sscanf(“log_path=/tmp/test.log;”, “%[^=]=%[^;];”, a1, a2); 这样是才ok
- sscanf(“log_path=/tmp/test.log;”, “%*[^=]=%[^;];”, path); 提取路径到path
- http://bbs.csdn.net/topics/390384201
- http://blog.csdn.net/onlyonename/article/details/7247976
- linux shell 数学运算
- echo “scale=2;999653638144/1000/1000/1000”|bc
- echo “999653638144/1000/1000/1000”|bc -l
- expr
- 方括号/双圆括号
- let和自增运算(和c语言类似)
- bc浮点运算
- awk命令
- http://kerlion.blog.chinaunix.net/uid-28813259-id-3675412.html
- http://www.cnblogs.com/xianghang123/archive/2012/01/17/2324867.html
- zd15linux
- 内存数据和磁盘大小修改为long类型
- 清理seriald中没有用到的代码
- 修改cpu信息的获取
- 网络接口修改为用配置文件定义
- 增加读取配置文件信息代码
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获取第九列数字和,最后打印平均值
- ipmitool sdr type Temperature |grep -v CPU |awk ‘{a+=$9} END {print a/NR}’
- 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代理设置
- 安装 yum install squid
- 启动 squid -CNd1
- -C, not catch fatal signals
- -N, not deamon
- -d 1, debug level 1
- yum代理设置
- echo “proxy=http://172.16.50.39:3128">>/etc/yum.conf
- http代理设置
- export http_proxy=http://172.16.50.39:3128
- 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命令的执行进度
while killall -USR1 dd; do sleep 5; done
watch -n 10 killall -USR1 dd
- http://blog.csdn.net/kai27ks/article/details/7831260
- http://www.commandlinefu.com/commands/view/4011/check-the-status-of-dd-in-progress
- /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脚本中是可以使用的, 搞了好久还是搞不定,先不弄了.
- 碰到一个很头痛的问题, shell中的getopts怎么在第二层函数调用中起不了作用了?
- 解决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
- zd15-linux
- 使用git做版本管理
- mkdir zd15linux
- cd zd15linux
- git init
- cp -r ../../zd15linux/* ./
- git add .
- git commit -m “first commit, add all files”
- git log
- 获取cpu使用率
- 获取内存使用率
- 显示项名称最后多了一个乱码字符
- 使用git做版本管理
- update ds2img, and it work well (can finish what I want for my job)
- Linux平台Cpu使用率的计算
2014-07-27
- LUN和VOLUME的关系
- LUN 是对于存储设备而言的,VOLUME是对于主机而言的
- 容量大小关系: volume = 分区 <= 主机磁盘 = LUN <= RAID <= 存储设备中的硬盘总容量
- http://www.sansky.net/article/2007-05-12-lun-volume.html
- ds2img
write a python script to convert datasturcture file to image file.
the script had been post on github https://github.com/matrix207/scripts/ds2img
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被子进程使用的情况.
- 也不能区分用户空间和内核空间.
- clock 头文件
- 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
- 非安全漏洞监视网
- 神器mimikatz2.0轻易提取系统密码
- https://github.com/gentilkiwi/mimikatz
- 渗透测试技巧之SSH篇
- http://www.edge-security.com/soft/wfuzz-1.4b-win.tar.gz
- http://nmap.org/dist/nmap-5.00-win32.zip
- http://freeworld.thc.org/thc-hydra/hydra-5.4-win.zip
- http://windowsaudit.com/downloads/WinScanX_Basic.zip
- http://www.xfocus.net/tools/200410/sqlexec.zip
- http://www.xfocus.net/tools/200210/SQLServerSniffer.rar
- http://www.xfocus.net/tools/200610/arpspoof.2.1.zip
- http://download.sysinternals.com/Files/PsTools.zip
- http://www.xfocus.net/tools/200309/PortLessNew.zip
- http://www.xfocus.net/tools/200710/wnps-0.26-beta2.tgz
- http://qs.onlinedown.net/down/ca_setup_53494.zip(cain)
- 如何下载文件LED灯质量手册(中文版) http://wenku.baidu.com/view/1db42dcc910ef12d2af9e76c.html
- rssp
- 修改版本号生成脚本, 使用git rev-parse HEAD获取commit号
- git
- git help
- git help -a
- git help rm
- git help rev-parse
- date
- date -s “2014-07-24 14:45:30”
- date -s 2014-07-24
- date -s 14:45:30
- zd15-linux
- 发送消息仍然未通过
- 同步时间ok
- 告警灯点亮ok
- umonitor编码
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信息
- 硬件信息:型号、物理类型、序列号、温度、转速、工作速率、磁盘LU、磁盘端口
- 更多使用例子可以参考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秒。
- 假设2分钟内无资料读取,硬盘磁头就会自行停留到没有存取数据的地方,以节省
- 功能和特点:
- MAID存储系统中的磁盘或磁盘RAID组可以在没有读写访问时依据策略下电;
- 下电磁盘自动依策略进行故障检查;
- 磁盘在下电以后,一旦有读写请求,磁盘自动上电,RAID组可重新提供正常访问;
- 降低能耗,电能节约可到达30%;
- 减少环境和管理成本;
- 更长的磁盘使用寿命。
- MAID 2.0:MAID技术华丽转身
- Level 0:Level 0是常见的硬盘驱动器全速旋转模式,它的基准是全能耗和最短
的数据访问时间。 - Level 1:Level 1是让磁盘读取/写入磁头停靠。
- Level 2:除了磁头停靠之外,盘片转速减慢30%~50%。
- Level 3:是常见的MAID状态,在该等级下磁盘盘片停转,磁头停靠,驱动器设置
为“睡眠模式”(不过仍然为驱动器供能)
- Level 0:Level 0是常见的硬盘驱动器全速旋转模式,它的基准是全能耗和最短
- rssp
完成命令14,17,18,基准时间设置函数,解决一些bug- 完成基准时间设置
- 实现命令14,17,18
- 完成公共代码
- 解决命令8和9使用错误的指针问题
- 命令11不再使用malloc申请内存这种多此一举的方式
- opm增加保存配置信息到文件的操作
- 存储技术原理分析
- 文件系统
- read系统调用的处理流程
- write系统调用的处理流程
- 文件系统
- Linux I/O performance tests using dd
- 文件系统 IO处理流程
- IO处理流程
- VFS Layer
- NFS | EXT2 | EXT3 | NTFS
- Page cache
- Generic Block Layer
- IO Scheduler Layer
- Block Device Driver Layer
- Block Device Layer
- read 系统调用剖析
- linux IO子系统和文件系统读写流程
- Ext3文件系统读写过程分析
- 从文件 I/O 看 Linux 的虚拟文件系统
- Linux操作系统内核3.3版本I/O Stack的流图
- Linux IO stack diagram
- 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文件系统
- proc_mkdir
- create_proc_entry
- remove_proc_entry
- http://blog.csdn.net/orzlzro/article/details/6343404
- raidx.ko 对应的 raid source 在哪?
- Linux 用户态内核态通信(IPC)方式:
- 系统调用: 静态链接,单工方式
- ioctl: 单工方式
- proc文件系统, 缺点:
- 切记不能访问已经卸载的一个proc文件,否则会导致kernel panic;
- 注意不要删除正在调用的问proc文件。因为文件的入口项不存在关联的作者,文件
的调用也并没有作用到模块的引用计数上; - 勿注册两个同名的proc文件,这样将导致入口项无法区分。
- http://bbs.chinaunix.net/thread-2017914-1-1.html
- seq_file: 针对proc文件的不足而诞生了Seq_file
- netlink socket: 动态链接,异步通讯,全双工,多点传送
- 用户空间内核空间ipc总结(sockopt,ioctl,mmap,netlink,proc,seq,file,copy_user)
- netlink socket编程之why & how
- Linux用户态与内核态的交互——netlink篇
- linux内核与用户空间通信之netlink使用方法
- 用户空间与内核空间数据交换的方式(9)–netlink
- 用户空间与内核空间数据交换的方式(3)–seq_file
2014-07-20
- 守护进程的程序不会再fork进程? 答案是“可以”
- 服务程序启动和停止
- 使用kill来停止, ps aux | grep rssp , killall -9 rssp
- 编写服务脚本,放到/etc/init.d/下面, 然后通过service rssp start|stop|restart来操作
- LINUX Daemon程序设计
- http://bbs.csdn.net/topics/270083776
- http://lisymail.blog.163.com/blog/static/1186503432012228101727531/
- http://www.cnblogs.com/gzggyy/archive/2012/08/07/2626574.html
- linux服务deamon
- Linux 守护进程daemon
- 守护进程的监控可以用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;
- select所在进程不要进行信号处理 signal(SIGCHLD, SIG_IGN); 这样至少不会因为
- rssp
daemon功能ok- 修改配置文件位置为/etc/rssp.conf,解决守护进程下打开配置文件失败导致程序启
动失败问题. - 解决信号处理造成网络通信进程退出的问题(引起select返回-1)
- 主进程增加子进程的信号处理函数,以后可以在其中加入子进程重启功能
- 增加服务控制脚本(还没有验证)
- 修改配置文件位置为/etc/rssp.conf,解决守护进程下打开配置文件失败导致程序启
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文件系统会把大量的随机写优化为顺序写,大大减少磁头的寻道时
间,延长硬盘的使用寿命,降低硬盘维护及购置成本。
- 自主创新ZNV-VFS视频监控文件系统
- 存储io
- VFS
- FS
- lv (SSD flash cache)
- raid
- io (SCSI)
- 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
这里使用的版本是8.00.48, 不同的版本得到的信息格式或字样可能不同,要注意.MegaCLI SAS RAID Management Tool Ver 8.00.48 Mar 23, 2011 (c)Copyright 2011, LSI Corporation, All Rights Reserved.
- 查询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
- 其中RAID Level行中的Primary-1就表示这个磁盘组是Raid1
- 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.
- 查询版本 /opt/MegaRAID/MegaCli/MegaCli64 -v
2014-07-16
- rssp
了解进程恢复的技术- 如果是fork的子进程,使用signal(SIGCHLD, sig_chld);
- zd15-linux
- 实现消息队列收发, 解决消息队列接收的一个Bug
- 加入多线程序做消息的收发
- http://www.cnblogs.com/BiffoLee/archive/2011/11/18/2254540.html
- 再次看了下僵尸进程的原因和避免方法
- 原因: 如果子进程先于父进程退出,同时父进程又没有调用wait/waitpid,则该子进程将成为僵尸进程
- 避免方法:
void sig_chld(int signo) { pid_t pid; int stat; signal(SIGCHLD, &sig_chld); while((pid = waitpid(-1, &stat, WNOHANG)) > 0) { printf("child %d terminated\n", pid); } return; } int main(void) { int rc=0; signal(SIGCHLD, &sig_chld); return rc; }
- 忽略SIGCHLD信号能避免僵尸进程吗
- linux僵尸进程产生的原因以及如何避免产生僵尸进程
- 信号处理
在捕获ctrl-c信号退出程序时候,是否要先安全退出线程
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
- docker采用go语言开发,主要使用了Cgroup,LXC,aufs等技术来实现虚拟化,项目当前
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代码库.
- 解lmc-sender接收rssp发送的数据的大小为0的问题,查里ee2dd1843,76c1d98ef,
- git回退到某个历史版本方法,3个命令:
git clone url my_repos
cd my_repos
git reset –hard [COMMIT]
2014-07-11
- rssp
- 解决bug
- 增加时间从字符到数字之间的转换函数
- 更新ms配置成员,增加保存点名定期测试数据文件路径
- 保存新配置信息到磁盘
- 代码优化
- 加入一个修正电总协议文件的文件protocol_fix.md
- zd15-linux
- 了解产品使用手册和产品硬件安装维护手册
- Ctrl+H进入webbios进行RAID 1的创建
- 在SDD磁盘的Linux系统中进行串口通讯失败
- Display Detected System’s Serial Suppor
dmesg | grep tty
- Find out what physical serial ports your Linux box has.
setserial -g /dev/ttyS[0123]
- http://www.cyberciti.biz/faq/find-out-linux-serial-ports-with-setserial/
stty < /dev/ttyXX
- 检查硬件,发现CPU的风扇没有固定,整个主板也没有固定.
- 代理服务器设置
2014-07-10
- multi-directory compile with Makefile
- serial communication
- zd15-linux
- multi-directory compile
- add rule for changelog and coding
- implement message queue
- rssp
- 上传sor文件
- 移除lmc.c
2014-07-09
- ipmi
- yum install OpenIPMI ipmitool -y
- chkconfig ipmi on
- service ipmi start
- ipmitool sdr type Fan
- ipmitool sdr type Temperature
- hddtemp
- wget http://dl.fedoraproject.org/pub/epel/6/x86_64/hddtemp-0.3-0.20.beta15.el6.x86_64.rpm
- rpm -ivh hddtemp-0.3-0.20.beta15.el6.x86_64.rpm
- hddtemp /dev/sda
- os backup
- LSI MegaRAID SAS 9260-8i
- install Megacli command
- [root@localhost ~]# rpm -ivh Lib_Utils-1.00-09.noarch.rpm
Preparing… ########################################### [100%]
Installing….
1:Lib_Utils ########################################### [100%] - [root@localhost ~]# rpm -ivh MegaCli-8.00.48-1.i386.rpm
Preparing… ########################################### [100%]
1:MegaCli ########################################### [100%] - /opt/MegaRAID/MegaCli/MegaCli64 -PDList -aALL 查看硬盘信息
- [root@localhost ~]# rpm -ivh Lib_Utils-1.00-09.noarch.rpm
- rssp
- 解决config.c编译告警
- 增加保存和加载g_ms结构体数
- 增加实现401,402,406,407命令
2014-07-08
- centos-6.4 u-disk install, failed
- centos-6.5 u-disk install, success
- dd if=/home/dennis/Downloads/CentOS-6.5-x86_64-bin-DVD1.iso of=/dev/sdb
- Basic Storage Devices
- Fresh Installation
- Chinese language Support
- Software Development WorkStation
- psw u**z**5
- ifconfig eth0 172.16.50.200 netmask 255.255.255.0
- route add default gw 172.16.50.1
- echo “export https_proxy=http://172.16.50.66:808">>/etc/profile
echo “export https_proxy=http://172.16.50.66:808">>/etc/profile
echo “export https_proxy=http://172.16.50.66:808">>/etc/profile - wget http://mirrors.oschina.net/help/CentOS6-Base-oschina.repo
mv CentOS6-Base-oschina.repo /etc/yum.repos.d/
yum makecache - yum install lm_sensors
sensors, sensors-detect - failed to install hddtemp by yum
- dmidecode, dump bios info
- Can get cpu and system temperature, fan speed from BIOS BMC
- ipmi, yum install ipmitool
http://www.ibm.com/developerworks/cn/linux/l-ipmi/index.html
http://blog.sina.com.cn/s/blog_704836f40101dpw1.html
http://yyri.blog.163.com/blog/static/148943951201212364551621/
http://wiki.adamsweet.org/doku.php?id=ipmi_on_linux
http://ntcn.net/blog/?p=2201
http://blog.sina.com.cn/s/blog_506ed9e60100zt28.html
http://blog.csdn.net/yuwenliang/article/details/6078273 - cpu use rate: http://www.blogjava.net/fjzag/articles/317773.html
- rssp
- modify scan and upload scan result flow
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
USNMP
- snmptrapd -df -Lo, use for view snmptrap message
- complete document “USNMP_Demand_Schedule_Dennis20140604.xlsx”
- support snmpget logic disk numbers
- support snmpget cpu numbers
- support snmpget network numbers
- support snmpget memory (MB)
- support snmpget os version
- support snmpget uptime(day:hour:minute:second)
- need wireshark to check messages from usnmptrap,it is a hard job, have any improve methods?
- can not compile usnmptrap source with VS2008, it is a trouble thing.
System information reference
- windows system infor http://hakuyo.blog.51cto.com/6207832/1218147
- Network rate http://bbs.csdn.net/topics/390435646
- CPU rate http://blog.csdn.net/ubuntu_ai/article/details/8875366
http://blog.csdn.net/dpsying/article/details/19038999 - system info http://blog.csdn.net/dpsying/article/category/1883053
- os version http://blog.csdn.net/dpsying/article/details/18961569
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.
- Display chinese words garbled(code encode issue, fixed by create a new
- 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