#查看硬盘 温度 yum install -y smartmontools smartctl -a /dev/sda|grep emp #查看wwid World Wide Identifier (WWID) A World Wide Name (WWN) ls -l /dev/disk/by-id/ #查看uuid blkid ls -l /dev/disk/by-uuid ##查看Serial Number for i in {a..z}; do smartctl -a /dev/sd$i >> smartctl.out done ##使用时间与序列号 sudo smartctl -i -A /dev/sdd \ | grep -iE 'Device Model|Serial|Power|Product' #查看硬盘信息 lsblk -o NAME,MAJ:MIN,MODEL,SERIAL,SIZE,WWN,HCTL,TRAN,VENDOR,TYPE #打印SCSI硬盘信息 lsscsi -s #查看设备io iostat[参数][时间][次数] yum install sysstat iostat -x 1 #格式化 mkfs.ext4 /dev/sd #dnf安装 centos添加dnf包管理 yum install epel-release -y yum install dnf -y ###nvme硬盘 #安装nvme-cli dnf install -y nvme-cli apt install -y nvme-cli #列出nvme硬盘 sudo nvme list #硬盘信息 sudo nvme id-ctrl /dev/nvme0n1 #硬盘日志 sudo nvme smart-log /dev/nvme0n1 #硬盘温度 sudo nvme smart-log /dev/nvme0 | grep "^temperature" #硬盘格式化 sudo nvme format /dev/nvme0n1 nvme format /dev/nvme0n1 -n 1 -l 1 #4k对齐 nvme format /dev/nvme0n1 -n 1 -l 0 #恢复初始状态512 nvme format -s 1 /dev/nvme0n1 #格式化硬盘(secure erase drives) #低级格式化 nvme format /dev/nvme0 -n -1 -s 1 -l 1 -r #安全擦除硬盘 sudo nvme sanitize /dev/nvme0n1 #列出nvme设备 nvme list | awk '{print($1)}'| grep dev lsblk | grep nvme | awk '{print($1)}' #控制器缓存 sudo nvme show-regs /dev/nvme0 -H | egrep "Controller Memory Buffer Supported" -A 10 -B 10 #查看接口速率 numa节点 热拔插 ls -l /sys/block/ lrwxrwxrwx 1 root root 0 Mar 26 15:05 /sys/block/nvme0n1 -> ../devices/pci0004:00/0004:00:01.0/0004:02:00.0/nvme/nvme0/nvme0n1 lrwxrwxrwx 1 root root 0 Mar 26 2024 /sys/block/nvme1n1 -> ../devices/pci0004:00/0004:00:02.0/0004:03:00.0/nvme/nvme1/nvme1n1 lspci -vvs 0004:02:00.0 #查看nvme是否可热拔插hotplug lspci -svv 0000:c9:02.0 |grep -i hotplug #操作系统是否支持热拔插 cat /proc/interrupts | grep pciehp #查看mps mps为128,顺序读写都只能达到6.6G左右正常需要>= 512 lspci -vv -s 21:00.0 | grep -E "MaxPayload|MaxReadReq" lspci -d :8310 -vvv | grep MaxReadReq #调整mrr为4096 setpci -s 21:00.0 88.w=5936 #512 setpci -s 21:00.0 88.w=2936 #查看numa节点 lspci -vvvs 01:00.0 | grep NUMA #绑核 fio --cpus_allowed=64-79 ##dd /dev/null:回收站、无底洞 /dev/zero:产生字符。 =direct:不使用cache.buffer conv=fdatasync把文件的“数据”写入磁盘 dd if=/dev/sda of=/dev/sda bs=4k count=10000 iflag=direct oflag=direct conv=fdatasync #清除缓存 echo 3 > /proc/sys/vm/drop_caches #本硬盘 /tmp/dd.dbf dd if=/dev/zero of=/tmp/dd.dbf bs=1M count=1000 oflag=direct dd if=/tmp/dd.dbf of=/dev/null bs=1M count=1000 iflag=direct #样例 修改位置 /dev/sdb echo 3 > /proc/sys/vm/drop_caches dd if=/dev/sde of=/dev/null bs=1M count=1000 iflag=direct echo 3 > /proc/sys/vm/drop_caches dd if=/dev/zero of=/dev/sde bs=1M count=1000 oflag=direct echo 3 > /proc/sys/vm/drop_caches dd if=/dev/nvme1n1 of=/dev/null bs=1M count=1000 iflag=direct echo 3 > /proc/sys/vm/drop_caches dd if=/dev/zero of=/dev/nvme1n1 bs=1M count=1000 oflag=direct ##fio yum install -y libaio-devel fio #系统盘测试 fio -name=test -directory=/tmp -direct=1 -ioengine=libaio -bs=1M -numjobs=1 -iodepth=64 -size=10G -rw=write -group_reporting fio -name=test -directory=/tmp -direct=1 -ioengine=libaio -bs=1M -numjobs=4 -iodepth=64 -size=10G -rw=read -group_reporting fio -name=test -directory=/tmp -direct=1 -ioengine=libaio -bs=4k -numjobs=1 -iodepth=64 -size=10G -rw=randwrite -group_reporting fio -name=test -directory=/tmp -direct=1 -ioengine=libaio -bs=4k -numjobs=8 -iodepth=64 -size=10G -rw=randread -group_reporting ###常规 disk=sdb for i in {1..3} do # i=1 fio -name 1Mw -filename=/dev/$disk -bs=1M -numjobs 2 -iodepth=4 -direct=1 -ioengine=libaio -runtime=600s -group_reporting -rw=write > $i,$disk,1M,libaio,write,out fio -name 1Mr -filename=/dev/$disk -bs=1M -numjobs 4 -iodepth=8 -direct=1 -ioengine=libaio -runtime=60s -group_reporting -rw=read > $i,$disk,1M,libaio,read,out fio -name 4Kw -filename=/dev/$disk -bs=4k -numjobs 2 -iodepth=4 -direct=1 -ioengine=libaio -runtime=600s -group_reporting -rw=randwrite > $i,$disk,4k,libaio,randwrite,out fio -name 4Kr -filename=/dev/$disk -bs=4k -numjobs 4 -iodepth=32 -direct=1 -ioengine=libaio -runtime=60s -group_reporting -rw=randread > $i,$disk,4k,libaio,randread,out done #确定系统所在硬盘 boot_dev=`df| awk '{print $1}' | grep -o "/dev/sd[a-z]"| sed -n '1p'` #遍历 /dev/sd for i in {1..3} do for disk in /dev/sd[d-g];do if [ "$disk" != `df| awk '{print $1}' | grep -o "/dev/sd[a-z]"| sed -n '1p'` ];then #echo ${disk##/*/} fio -name 1Mw -filename=$disk -bs=1M -numjobs 2 -iodepth=4 -direct=1 -ioengine=libaio -runtime=600s -group_reporting -rw=write > $i,${disk##/*/},1M,libaio,write,out smartctl -a $disk |grep emp >> $i,${disk##/*/},1M,libaio,write,out fio -name 1Mr -filename=$disk -bs=1M -numjobs 4 -iodepth=8 -direct=1 -ioengine=libaio -runtime=60s -group_reporting -rw=read > $i,${disk##/*/},1M,libaio,read,out smartctl -a $disk |grep emp >> $i,${disk##/*/},1M,libaio,read,out fio -name 4Kw -filename=$disk -bs=4k -numjobs 2 -iodepth=4 -direct=1 -ioengine=libaio -runtime=600s -group_reporting -rw=randwrite > $i,${disk##/*/},4k,libaio,randwrite,out smartctl -a $disk |grep emp >> $i,${disk##/*/},4k,libaio,randwrite,out fio -name 4Kr -filename=$disk -bs=4k -numjobs 4 -iodepth=32 -direct=1 -ioengine=libaio -runtime=60s -group_reporting -rw=randread > $i,${disk##/*/},4k,libaio,randread,out smartctl -a $disk |grep emp >> $i,${disk##/*/},4k,libaio,randread,out fi done done #杀死后台 ps -ef|grep "fio"|cut -c 9-16 | xargs kill -9 #预处理 热盘 fio --name=preconditioning --direct=1 --buffered=0 --filename=${Device} --cpus_allowed=${cpus} --ioengine=libaio --blocksize=128k --numjobs=1 --iodepth=256 --size=100% --loops=2 --rw=write --group_reporting #!/bin/sh #dev=nvme1n1 #i=1 #以开始时间创建文件夹 export LC_MEASUREMENT=metric dir=fio$(date +%Y%m%d_%H%M%S) mkdir $dir cd $dir #nvme全盘测试 需要安装 fio 命令 nvme-cli 命令 #排除某块盘| grep -v nvme0n1 for i in {1..3} do #i=1 boot_dev=`df| awk '{print $1}' | grep -o "/dev/nvme[0-9]"| sed -n '1p'` if [ -z "$boot_dev" ]; then boot_dev=null else echo $boot_dev fi for dev in `lsblk | grep nvme | awk '{print($1)}' | grep -v ${boot_dev##/*/}` do #echo $dev { sudo nvme format /dev/${dev:0:5} -n -1 -s 1 -l 1 -r sudo fio -name=1Mw -filename=/dev/$dev -bs=1M -numjobs=1 -iodepth=64 -direct=1 -ioengine=libaio -runtime=600s -group_reporting -rw=write > $i,$dev,1Mwrite,out sudo nvme smart-log /dev/$dev | grep "^temperature">> $i,$dev,1Mwrite,out sudo fio -name=1Mr -filename=/dev/$dev -bs=1M -numjobs=4 -iodepth=64 -direct=1 -ioengine=libaio -runtime=60s -group_reporting -rw=read > $i,$dev,1Mread,out sudo nvme smart-log /dev/$dev | grep "^temperature">> $i,$dev,1Mread,out sudo fio -name=preconditioning -filename=/dev/$dev -bs=4k --numjobs=1 --iodepth=256 -direct=1 -ioengine=libaio --size=100% --loops=2 --rw=readwrite sudo fio -name=4Kw -filename=/dev/$dev -bs=4k -numjobs=4 -iodepth=64 -direct=1 -ioengine=libaio -runtime=600s -group_reporting -rw=randwrite > $i,$dev,4krandwrite,out sudo nvme smart-log /dev/$dev | grep "^temperature">> $i,$dev,4krandwrite,out sudo fio -name=4Kr -filename=/dev/$dev -bs=4k -numjobs=8 -iodepth=128 -direct=1 -ioengine=libaio -runtime=360s -group_reporting -rw=randread sudo fio -name=4Kr -filename=/dev/$dev -bs=4k -numjobs=8 -iodepth=128 -direct=1 -ioengine=libaio -runtime=60s -group_reporting -rw=randread > $i,$dev,4krandread,out sudo nvme smart-log /dev/$dev | grep "^temperature" >> $i,$dev,4krandread,out } done done #制作表格 for l in `ls`; do IOPS=$(cat $l | grep "IOPS" | awk '{printf $2}' | cut -d "=" -f 2 | cut -d "," -f 1 ) BW=$(cat $l |grep "IOPS" | awk '{printf $4}'| cut -d "(" -f 2 | cut -d ")" -f 1 ) temperature=$(cat $l |grep "temperature" | awk '{printf $3}' ) lat=$(cat $l |grep "[^a-z]lat.*avg" | awk '{printf $6}' |cut -d "=" -f 2) echo "$l","$BW","$IOPS","$temperature","$lat" >> fio.csv done; nvme list>> fio.csv sudo curl http://192.168.1.34/fio.nvme.sh | sh ##iozone cd iozone3_491/src/current make linux #make linux-arm ./iozone -i 0 -i 1 -i 2 -aIRb out.xls ./iozone -f /dev/sdb -i 1 -i 0 -i 2 -aIRb sdb.xls . ./iozone -f /dev/sdb -i 0 -i 1 -i 2 -s 64G -s 128G -s 256G -r 10m -I ./iozone -f /dev/sdb -i 0 -i 1 -i 2 -aIRb /root/out.xls ./iozone -f /dev/nvme0n1 -i 0 -i 1 -i 2 -aIRb /root/out.xls