首先了解Linux中的设备命名规则:在安装和使用Linux的过程中,您必然会接触到不少像hda1、ttyS0、eth0这样的设备名称。在Linux中,每个设备必须在它的驱动程序控制下运行,驱动程序则与/dev目录下的特殊文件联系在一起,尽管这些文件并不是真正的文件,但在选择设备或者操作设备时都以这个文件的名称来代表这一设备。这些设备名称的命名都是有规则的: 在/dev目录下,每一个驱动器以一个单独的设备文件来表现。
通常最常见的是硬盘,对于IDE硬盘一般可以有二到四个。这就是/dev/hda、/dev/hdb、/dev/hdc和/dev/hdd,hd是硬盘的意思,a则是代表第一个设备,hda1中的“1”代表hda的第一个硬盘分区,依此类推。而SCSI硬盘也就是/dev/sda、/dev/sdb等等,sd是SCSI设备的意思,第一个SCSI硬盘是/dev/sda, fd是软盘,设备名称是/dev/fd0。Linux 计算机中磁带机的设备名是: /dev/st*和/dev/nst*, 其中nst*是操作完成后不自动回卷磁带, st*则是自动 回卷, 一般常用nst*. 主机SCSI总线上找到的第一个磁带机是nst0和st0, 第二个则是nst1和st1, 依此类推. 磁带机的SCSI号越小, 其设备名也就越靠前。
1. lsmod
lsmod命令用来列出当前系统加载的模块,可以当作硬件模块浏览器。
使用权限:
格式:lsmod [-hV]
主要选项:
-h :显示帮助信息。
-V:显示软件版本信息。
应用说明:使用lsmod命令必须安装Linux安装盘中的modutils 软件包。我们看一个lsmod命令实例,如图1。
2. uname
uname 命令用来显示输出系统信息。
使用权限:超级用户。
格式:uname [选项]
主要选项:
-a, --all :显示所有的信息。
-m, --machine :显示硬件类型 。
-n, --nodename :显示机器的网络节点主机名。
-r, --release :显示操作系统发行版本。
-s, --sysname :显示操作系统名。
-p, --processor :显示主机处理器(CPU)类型。
-v :显示操作系统版本。
--help :显示本帮助并退出。
--version: 显示版本信息并退出。
应用实例:
#uname –a
Linux cao 2.4.20-8#1Thu Mar 13 17:54:28 EST 2003 i686 i686 i386 GNU/Linux
3 .lspci
lspci命令用来查看主板所有硬件槽信息。
使用权限:所有用户。
格式:lspci [<switches>]
-v:显示详细信息。
-n:显示设备ID号。
-b:显示PCI、ISA扩展槽地址和中断。
-t:显示总线树结构。
-F <file> :从指定文件读信息。
-m:输出所有硬件信息。
应用实例:
当系统硬件出现故障时,可以使用lspci命令输出所有硬件信息。以帮助确定故障点。
4. sync
sync命令用来将内存缓冲区内的数据写入磁盘。
使用权限:所有用户。
格式:
sync
应用说明:在Linux系统中,当数据需要存入磁盘时,通常会先放到缓冲区内,等到适当的时刻再写入磁盘,如此可提高系统的执行效率。
5. e2label
e2label命令用来设定或显示ext2或ext3分区的卷标。
使用权限:超级用户。
格式:
e2label device [ new-label ]
主要选项:
device:分区设备名称。
new-label:新设定的卷标名称。不能超过16字符。
应用实例:为一个新创建的分区建立卷标名称:1111,使用命令:
#e2label /deva9 1111
6. findfs
findfs命令用来查找指定卷标的文件系统。
使用权限:超级用户。
格式:
findfs LABEL=<label>
findfs UUID=<uuid>
主要选项:
LABEL=<label> :卷标名称。
UUID=<uuid>:分区的UUID号。
应用说明:随着Linux系统中硬盘容量和数目的增加,Linux系统中分区数量也越来越多,使用findfs命令可以通过卷标名称或UUID号快速定位分区位置。
应用实例:
查找卷标名称是:ar/ftp的分区位置,使用命令:
#findfs LABEL=ar/ftp
/deva9
7. badblock
badblock 命令用来检查磁盘中损坏的区块。
使用权限:超级用户。
格式:
badblocks [-b block_size] [-i input_file] [-o output_file] [-svw]
[-c blocks_at_once] [-p num_passes] device [last_block [start_count]
主要选项:
-b block_size:指定磁盘的区块大小,单位为字节。
-i input_file:读出上次的检查的结果中的坏块列表。
-o output_file:将检查的结果写入指定的输出文件。
-s: 在检查时显示进度。
-v: 执行时显示详细的信息。
-w: 在检查时,执行写入测试。
-c blocks_at_once:每个区块检查次数。确省值16次。
-p num_passes:通过的数量。确省值0。
start_count:指定要从哪个区块开始检查。
last_block:指定结束检查的区块。
device:指定要检查的磁盘装置。
应用实例:
#badblocks -b 4096 /deva1 -o badblocks-list
以4096的一个block,每一个block检查16次,将结果输入badblocks-list,badblocks-list是一个文本文件。如果硬盘正常的话,应该badblocks-list是没有任何内容的。
8.iostat
以前一直不太会用这个参数.现在认真研究了一下iostat,因为刚好有台重要的服务器压力高,所以放上来分析一下.下面这台就是IO有压力过大的服务器
$iostat -x 1
Linux 2.6.33-fukai (fukai-laptop) _i686_ (2 CPU)
avg-cpu: %user %nice %system %iowait %steal %idle
5.47 0.50 8.96 48.26 0.00 36.82
Device: rrqm/s wrqm/s r/s w/s rsec/s wsec/s avgrq-sz avgqu-sz await svctm %util
sda 6.00 273.00 99.00 7.00 2240.00 2240.00 42.26 1.12 10.57 7.96 84.40
sdb 0.00 4.00 0.00 350.00 0.00 2068.00 5.91 0.55 1.58 0.54 18.80
rrqm/s: 每秒进行 merge 的读操作数目.即 delta(rmerge)/s
wrqm/s: 每秒进行 merge 的写操作数目.即 delta(wmerge)/s
r/s: 每秒完成的读 I/O 设备次数.即 delta(rio)/s
w/s: 每秒完成的写 I/O 设备次数.即 delta(wio)/s
rsec/s: 每秒读扇区数.即 delta(rsect)/s
wsec/s: 每秒写扇区数.即 delta(wsect)/s
rkB/s: 每秒读K字节数.是 rsect/s 的一半,因为每扇区大小为512字节.(需要计算)
wkB/s: 每秒写K字节数.是 wsect/s 的一半.(需要计算)
avgrq-sz: 平均每次设备I/O操作的数据大小 (扇区).delta(rsect+wsect)/delta(rio+wio)
avgqu-sz: 平均I/O队列长度.即 delta(aveq)/s/1000 (因为aveq的单位为毫秒).
await: 平均每次设备I/O操作的等待时间 (毫秒).即 delta(ruse+wuse)/delta(rio+wio)
svctm: 平均每次设备I/O操作的服务时间 (毫秒).即 delta(use)/delta(rio+wio)
%util: 一秒中有百分之多少的时间用于 I/O 操作,或者说一秒中有多少时间 I/O 队列是非空的.即 delta(use)/s/1000 (因为use的单位为毫秒)
如果 %util 接近 100%,说明产生的I/O请求太多,I/O系统已经满负荷,该磁盘
可能存在瓶颈.
idle小于70% IO压力就较大了,一般读取速度有较多的wait.
同时可以结合vmstat 查看查看b参数(等待资源的进程数)和wa参数(IO等待所占用的CPU时间的百分比,高过30%时IO压力高)
另外 await 的参数也要多和 svctm 来参考.差的过高就一定有 IO 的问题.
avgqu-sz 也是个做 IO 调优时需要注意的地方,这个就是直接每次操作的数据的大小,如果次数多,但数据拿的小的话,其实 IO 也会很小.如果数据拿的大,才IO 的数据会高.也可以通过 avgqu-sz × ( r/s or w/s ) = rsec/s or wsec/s.也就是讲,读定速度是这个来决定的.
本文转自UVN2015 51CTO博客,原文链接:http://blog.51cto.com/10851095/1713423,如需转载请自行联系原作者