磁盘快速写入大文件方法

1、测试需求来源:

项目背景:基于某云产品前端的测试,其中产品包括对日志管理的操作,由于产品型号默认的磁盘规格及日志写入速率不同,且用户日志数据量较大,比如 标准版产品,每天最大入库日志量2.6亿条,默认磁盘容量500G,需要确定500G容量能存储的日志量,以及根据日志保存时间需要扩容多少。

测试需求:

  • 测试存储日志量与磁盘占用的关系,是否呈线性关系;
  • 磁盘最大存储日志量;
  • 防止磁盘写满保护措施--存储量达到总量的80%报警,达到90%进行磁盘日志清理操作。

2、测试范围包括:

    本次测试范围覆盖需求C

3、性能指标:

压力测试,磁盘最大日志量写入速率;

磁盘最大日志量存储阈值。

4、测试场景设计

    基于当前测试场景,构造磁盘写入大文件,达到磁盘容量的80%阈值,验证是否触发报警系统,发送报警信息;继续写入大文件,达到磁盘容量的90%阈值,验证是否进行日志清理操作。

    基于测试场景,此次测试需要往日志存储的磁盘中写入大文件(400G),而测试环境中缺少这样的测试资源;则使用linux的dd命令快速的复制出所需要的大文件

5、测试脚本开发

dd命令实现创建指定大小的文件

[root@XXXXXXXXXXX /]# dd if=/dev/zero of=./bigfile40g bs=2M count=5000

5000+0 records in

5000+0 records out

10485760000 bytes (10 GB) copied, 8.55833 s, 1.2 GB/s

在当前目录下会生成一个1000M大文件,文件内容为全0(因从/dev/zero中读取,/dev/zero为0源),但是这样为实际写入硬盘,文件产生速度取决于硬盘读写速度,如果欲产生超大文件,速度很慢。

在某种场景下,我们只想让文件系统认为存在一个超大文件在此,但是并不实际写入硬盘

dd if=/dev/zero of=./bigFile_1g bs=1M count=0 seek=100000

此时创建的文件在文件系统中的显示大小为100000MB,但是并不实际占用block,因此创建速度与内存速度相当,seek的作用是跳过输出文件中指定大小的部分,这就达到了创建大文件,但是并不实际写入的目的。当然,因为不实际写入硬盘,所以你在容量只有10G的硬盘上创建100G的此类文件都是可以的。

随机生成1百万个1K的文件

seq 1000000 | xargs -i dd if=/dev/zero of={}.dat bs=1024 count=1

shell脚本自动化写入磁盘 bigFile.sh

#!/bin/bash
cd ./BigFile/

for i in {1..500};
do
    dd if=/dev/zero of=./bigfile_1g_$i bs=1M count=1024;
    sleep 2;
done

6、测试结果

1、登陆主机,进入日志所在目录,查看当前磁盘容量,确定需要写入的磁盘文件大小

[root@XXXXXXXXXXX /]# df -h

2、编辑脚本并运行

[root@XXXXXXXXXXX /]#  bash ./bigFile.sh

3、查看磁盘容量,是否满足要求。

[root@XXXXXXXXXXX /]# df -h

 

猜你喜欢

转载自blog.csdn.net/ccccsy99/article/details/105865369