想要了解Linux服务器的硬盘使用情况,可以根据以下步骤查看。
1)查看硬盘及分区信息,如下所示:
fdisk –l
命令显示结果如下:
Disk /dev/sda: 160.0 GB, 160040803840 bytes
255 heads, 63 sectors/track, 19457 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Device Boot Start End Blocks Id System
/dev/sda1 * 1 13 104391 83 Linux
/dev/sda2 14 3200 25599577+ 83 Linux
/dev/sda3 3201 3582 3068415 82 Linux swap / Solaris
/dev/sda4 3583 19457 127515937+ 5 Extended
/dev/sda5 3583 19457 127515906 83 Linux
以上结果表明这是一块160GB的服务器硬盘。
2)检查文件系统的磁盘空间占用情况,命令如下所示:
df –h
命令显示结果如下:
Filesystem Size Used Avail Use% Mounted on
/dev/sda2 24G 5.9G 17G 26% /
/dev/sda5 118G 8.8G 103G 8% /data
/dev/sda1 99M 20M 75M 21% /boot
tmpfs 859M 0 859M 0% /dev/shm
none 859M 104K 858M 1% /var/lib/xenstored
3)查看硬盘的I/O性能,命令如下所示:
iostat –d -x –k 1 10
其中,iostat是含在套装sysstat中的,在CentOS 5.8下可以用如下命令进行安装:
yum –y install sysstat
以笔者的生产环境下的MySQL数据库服务器为例说明,在Pietty下输入以下命令:
iostat –d –x –k 1 5
得到的结果如下所示:
Linux 2.6.9-34.ELsmp (ud50053) 01/18/2012 _i686_ (4 CPU)
Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util
hda 0.19 63.84 0.48 26.94 12.84 363.08 27.43 0.07 2.64 8.36 2.54 0.62 1.70
Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util
hda 0.00 44.00 3.00 29.00 16.00 292.00 19.25 0.06 1.88 12.67 0.76 1.50 4.80
Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util
hda 0.00 2.00 0.00 16.00 0.00 76.00 9.50 0.01 0.69 0.00
0.69 0.38 0.60
Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util
hda 0.00 380.00 0.00 79.00 0.00 1832.00 46.38 0.32 4.01 0.00 4.01 0.65 5.10
Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util
hda 0.00 7.00 0.00 8.00 0.00 60.00 15.00 0.01 0.88 0.00
0.88 0.38 0.30
参数说明:
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:每秒读千字节数,是rsect/s的一半,因为每扇区大小为512字节。
wkB/s:每秒写千字节数,是wsect/s的一半。
avgrq-sz:平均每次设备I/O操作的数据大小(即扇区),即delta(rsect+wsect)/delta(rio+wio)。
avgqu-sz:平均I/O队列的长度。即delta(aveq)/s/1000(除以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系统已经满负荷,该磁盘可能存在瓶颈。
await的大小一般取决于服务时间(svctm),以及I/O队列的长度和I/O请求的发出模式。这个响应时间应该低于5ms,如果大于5ms就表示磁盘I/O压力很大,这时就可以考虑更换响应速度更快的磁盘,调整内核elevator的算法、优化应用或者升级CPU。
4)查看Linux系统中某目录的大小,这在工作中经常会遇到。可以使用如下命令查看:
du -sh 目录名
例如:
du -sh /data
命令显示结果如下所示:
8.6G /data/
检查是否有分区使用率(Use%)过高(比如超过90%),如发现某个分区空间接近用完,可以进入该分区的挂载点,用以下命令找出占用空间最多的文件或目录,然后按照从大到小的顺序,正好可以找出系统中占用最多空间的前十个文件或目录:
du -cks * | sort -rn | head -n 10
5)在Linux系统中经常会用到dd命令,很多时候维护系统工作时需要使用。dd命令可以把指定的输入文件复制到指定的输出文件中,并且在复制过程中可以进行格式转换。我碰到的需要用到dd命令的几个地方如下所示。
制作交换文件的时候,例如:
dd if=/dev/zero of=/swapfile bs=1024 count=65536
制作驱动盘的时候,例如,将硬盘上的驱动文件复制到一个软驱中:
dd if=rhel40.img of=/dev/fd0 bs=10k
或者
dd if=mptlinux-3.02.68-1-rhel4.i686.dd of=/dev/fd0 bs=10k
制作ISO镜像的时候,例如:
dd if=/dev/cdrom of=/root/cd1.iso
当然也可以用mkisofs命令来制作ISO镜像。
另外,重装系统的时候,我喜欢用dd命令来破坏系统的分区表,由于此命令破坏性极大,会带来严重的后果。为了防止读者误操作,这里就不介绍了,有兴趣的读者可自行研究。
下面将分别介绍dd命令的参数,如下所示:
if=file
上述参数表示输入文件名,默认为标准输入。
of=file
上述参数表示输出文件名,默认为标准输出。
ibs=bytes
上述参数表示一次读入bytes个字节(即一个块大小为bytes个字节)。
obs=bytes
上述参数表示一次写bytes个字节(即一个块大小为bytes个字节)。
bs=bytes
上述参数表示同时设置读写块的大小为bytes,可代替ibs和obs。
cbs=bytes
上述参数表示一次转换bytes个字节,即转换缓冲区大小。
skip=blocks
上述参数表示从输入文件开头跳过blocks个块后再开始复制。
seek=blocks
上述参数表示从输出文件开头跳过blocks个块后再开始复制(通常当输出文件是磁盘或磁带时才有效)。
count=blocks
上述参数表示仅复制blocks个块,块大小等于ibs指定的字节数。