linux测试磁盘io脚本,脚本分享:Linux下磁盘io测试

这两天在测试Dell的PS6000存储,在linux下也懒得去找测试工具了,就直接使用dd命令进行I/O测试,但因为需要测试的数据很多,从512b到4M的块,每一档都要进行读写的测试,这要是人肉来做,那就太累了,于是就产生了下面这个脚本。

本脚本使用perl编写,根据测试用例,完成每次读或写测试。

本脚本共有3个参数,两个是必选参数,一个是可选参数

-r 测试读性能

-w 测试写性能

-c 可选参数,用于关闭文件系统的缓存

#!/bin/evn perl

use JSON;

use Data::Dumper;

use Cwd;

use File::Basename;

our $cache_flag = '';

# 获取脚本所在目录

my $cwd;

if ( $0 =~ m{^/} ) {

$cwd = dirname($0);

}

else {

my $dir = getcwd();

$cwd = dirname("$dir/$0");

}

# 获得参数

if ( @ARGV < 1 ) {

&usage;

exit;

}

elsif ( @ARGV == 1 ) {

if ( ( $ARGV[0] ne "-r" ) && ( $ARGV[0] ne "-w" ) ) {

print "Unrecognized Option\n";

&usage;

exit;

}

}

elsif ( @ARGV == 2 ) {

if ( $ARGV[0] eq "-r" ) {

$cache_flag = "iflag=direct,nonblock";

}

elsif ( $ARGV[0] eq "-w" ) {

$cache_flag = "oflag=direct,nonblock";

}

elsif ( ( $ARGV[0] ne "-r" ) || ( $ARGV[0] ne "-w" ) ) {

print "Unrecognized Option\n";

&usage;

exit;

}

}

my $opt = $ARGV[0];

# 使用帮助

sub usage {

print "Usage: iotest.pl [OPTION] [OPTION]\n";

print "\n";

print "-r\texecute read test\n";

print "-w\texecute write test\n";

print "-c\tiotest with local filesystem cache\n\n";

}

# 检查测试文件是否存在

sub check_file {

if ( !-e "./iotest" ) {

print "The test file dose not exist,please run write test first\n";

exit;

}

}

# 打开测试用例

open FH, "

# Main #

while () {

chomp;

$json = new JSON;

# 将测试用例的json格式转成hash

my %strings = %{ $json->decode($_) };

if ( $opt eq "-r" ) {

&check_file;

while ( ( $key, $value ) = each %strings ) {

open rfh, '>>iotestr.log';

my $cmd =

"/bin/dd if=./iotest of=/dev/null bs=$key count=$value $cache_flag >> iotestr.log 2>&1";

print rfh "IOTest Block: $key\n";

`$cmd`;

print rfh "\n";

}

}

elsif ( $opt eq "-w" ) {

while ( ( $key, $value ) = each %strings ) {

open wfh, '>>iotestw.log';

my $cmd =

"/bin/dd if=/dev/zero of=./iotest bs=$key count=$value $cache_flag >> iotestw.log 2>&1";

print wfh "IOTest Block: $key\n";

`$cmd`;

print wfh "\n";

}

}

}

下面来看下测试用例的编写格式。这里蚊子采用了json串的方式,这样便于perl读取,文件内容如下

{"512":"4096000","1K":"2048000","2K":"1024000","4K":"512000","8K":"256000","16K":"128000","32K":"64000","64k":"32000","128k":"16000","256k":"8000","512k":"4000","1M":"2000","2M":"1000","4M":"500"}

该文件主要就分两个字段,冒号前的是块大小,冒号后的count数,通过块大小和count数就能创建文件,蚊子这里统一生成的是2G大小的文件。该文件保存文件名为iotest.json,将测试用例和测试脚本放到同一个目录下即可。使用方面很简单,进入到要测试的磁盘或目录下,执行

#perl /dir/to/iotest.pl –w

即可完成开启文件系统换的磁盘写测试。程序执行完毕后会在当前目录下创建.log文件用于记录测试结果,下图是蚊子测试的结果,我做成了表格。

7887f4d1161d031be57b105a6a8c2cb3.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 您可以使用 shell 脚本来监控磁盘 I/O。 以下是一个简单的 bash 脚本的示例: ``` #!/bin/bash # 设置需要监控的磁盘 disk=sda # 获取磁盘 I/O 信息 while true do io=$(cat /proc/diskstats | grep $disk | awk '{print $4}') echo "磁盘 I/O 次数:$io" sleep 1 done ``` 这个脚本通过读取 `/proc/diskstats` 文件获取指定磁盘的 I/O 信息,并每隔一秒输出一次 I/O 次数。您可以根据需要调整此脚本。 ### 回答2: 编写一个下脚本监控磁盘IO可以通过以下步骤实现: 首先,需要使用Shell脚本来获取磁盘IO相关信息。可以使用命令"iostat"来获取当前的磁盘IO状态。具体的脚本如下: ```shell #!/bin/bash # 获取磁盘IO信息 io_info=$(iostat -dx | awk '{ if ( $1 ~ /^[vsh]/ ) { print $0 } }') # 打印磁盘IO信息 echo "$io_info" ``` 以上脚本会获取磁盘IO相关信息,并将其打印出来。 其次,可以使用Cron调度工具来定期执行该脚本。Cron可以让脚本在固定的时间间隔内自动执行。可以使用以下命令来编辑Cron定时任务: ```shell crontab -e ``` 在打开的编辑器中,可以添加以下行来设置每5分钟执行一次该脚本: ```shell */5 * * * * /path/to/script.sh ``` 最后,保存并退出编辑器。这样,每5分钟脚本就会自动执行一次,并输出磁盘IO相关信息。 以上是一个简单的示例脚本,可以根据特定需求对其进行修改和扩展。可以添加更多的命令和逻辑来获取更详细的磁盘IO信息,或者将结果写入日志文件等操作。 ### 回答3: 编写一个脚本来监控磁盘IO是一种有效的方法来跟踪系统磁盘的读写活动。下面是一个使用Python编写的简单脚本示例: ``` import psutil import time def monitor_disk_io(): while True: # 获取当前系统的磁盘IO信息 disk_io = psutil.disk_io_counters() # 输出磁盘的读写速率 print(f"读速率: {disk_io.read_bytes / 1024 / 1024:.2f} MB/s") print(f"写速率: {disk_io.write_bytes / 1024 / 1024:.2f} MB/s") # 每隔1秒钟更新一次磁盘IO信息 time.sleep(1) monitor_disk_io() ``` 上述脚本使用了`psutil`库来获取系统的磁盘IO信息。它通过不断循环来监控磁盘IO,并每隔1秒钟更新一次信息。脚本会输出当前的磁盘读速率和写速率,以MegaBytes per second(MB/s)为单位进行显示。 你可以保存以上的脚本到一个文件(例如`disk_io_monitor.py`),然后在终端或命令提示符下通过运行`python disk_io_monitor.py`来启动脚本。这样你就可以实时监控磁盘的读写活动了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值