[ linux-001 ] Linux测试磁盘读写速度

710 阅读3分钟

一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第8天,点击查看活动详情

dd,是 device driver 的缩写,它可以称得上是“Linux 世界中的搬运工”,它用来读取设备、文件中的内容,并原封不动地复制到指定位置

dd测试磁盘写能力

time dd if=/dev/zero of=/test.dbf bs=8k count=300000 因为/dev/zero是一个伪设备,它只产生空字符流,对它不会产生IO,所以,IO都会集中在of文件中,of文件只用于写,所以这个命令相当于测试磁盘的写能力。

dd测试磁盘读能力

time dd if=/dev/sdb1 of=/dev/null bs=8k 因为/dev/sdb1是一个物理分区,对它的读取会产生IO,/dev/null是伪设备,相当于黑洞,of到该设备不会产生IO,所以,这个命令的IO只发生在/dev/sdb1上,也相当于测试磁盘的读能力。

dd测试同时读写能力

time dd if=/dev/sdb1 of=/test1.dbf bs=8k 这个命令下,一个是物理分区,一个是实际的文件,对它们的读写都会产生IO(对/dev/sdb1是读,对/test1.dbf是写),假设他们都在一个磁盘中,这个命令就相当于测试磁盘的同时读写能力

fio读写测试

fio --filename=/data/test/test.big -iodepth=1 -ioengine=libaio -direct=1 -rw=randrw -bs=1024k -size=1G -numjobs=64 -runtime=40 -group_reporting -name=test-randrw

fio随机纯读

fio -filename=/dev/test -direct=1 -iodepth 1 -thread -rw=randread -ioengine=psync -bs=1024k -size=1G -numjobs=50 -runtime=60 -group_reporting -name=rand_read_4k

fio随机纯写

fio -filename=/data/test -direct=1 -iodepth 1 -thread -rw=randwrite -ioengine=psync -bs=1024k -size=1G -numjobs=50 -runtime=60 -group_reporting -name=rand_write_4k

通过dd迁移数据

【操作方法】
1.新盘做lvm并格式化
    root# pvcreate  /dev/新盘
    root# vgcreate 新卷组 /dev/新盘
    root# lvcreate -l 100%VG 新卷 新卷组
    root# mkfs.ext4 /dev/新卷组/新卷

2.停止所有业务进程
   具体操作略

3.dd 命令拷贝所有 旧data卷 数据到 新data卷 中
    root# dd if=/dev/旧卷组/旧卷  of=/dev/新卷组/新卷

4.卸载data目录
    root# unmount /dev/旧卷组/旧卷
    * 若卸载失败,使用fuser看是哪个进程占用了空间,并杀死对应进程
    root# fuser -m /data

5.data目录挂载到 新data卷 上
    root# mount /dev/新卷组/新卷 /data

6.重启业务应用
   具体操作略

7.确保挂载正常、业务运行正常
   具体操作略

8.修改自动挂载配置
    root# vi /etc/fstab
    把原有挂载卷的配置修改为新挂载卷
    root# mount -a
    root# df -Th

8.删除旧data卷
    root# vremove /dev/旧卷组/旧卷
    root# vgremove 旧卷组
    root# pvremove /dev/旧硬盘号

总结

dd命令和fio命令都是非常好用的磁盘测速命令,不同的是fio支持的测速方式更为灵活,4k随机读写都是可以通过参数配置的,但需要进行安装。而dd命令是linux系统自带的,开箱即用。因此为了统一性,建议在生产环境试用dd来进行统一测速。一般来说,磁盘的读写速度达到500M/s以上都是性能不错的磁盘了