用dd命令测macOS磁盘读写性能需绕过缓存:写入测试执行dd if=/dev/zero of=/tmp/testfile bs=1024k count=1000,读取测试执行dd if=/tmp/testfile of=/dev/null bs=1024k;再用iostat -d -w 5实时监控吞吐,结合diskutil list和sudo smartctl -a /dev/diskX验证NVMe通道状态。
在macos终端里测磁盘读写性能,核心是用原生命令绕过缓存、直击块设备。不需要装软件,几条命令就能拿到接近物理层的真实速度。
用dd测原始吞吐(写入+读取)
dd是最底层的测试方式,它不走文件系统缓存,结果反映硬盘裸速,但操作前必须清空目标路径剩余空间,否则可能因磁盘满而失败。
- 写入测试:执行dd if=/dev/zero of=/tmp/testfile bs=1024k count=1000,生成1GB文件;末尾输出的“bytes transferred”除以耗时即得MB/s写速
- 读取测试:执行dd if=/tmp/testfile of=/dev/null bs=1024k,注意别删掉testfile,否则读测试无效
- 写速常低于标称值——这是SSD的TRIM与垃圾回收机制所致;若写速<500 MB/s而读速>2000 MB/s,属正常缓存策略,非硬件故障
用iostat看实时周期性吞吐
iostat不跑压力,只抓内核每秒上报的真实I/O流量,适合边拷文件边观察,也支持后台长期记录。
- 运行iostat -d -w 5,5秒后首次输出表格,找“r_MB/s”(读)和“w_MB/s”(写)对应数值,即过去5秒平均速率
- 外置硬盘通常显示为disk2或disk3,内置盘多为disk0;保持命令运行时拖拽大文件,数值会立刻跳升
- 按Control + C退出;加> /tmp/iostat.log可保存日志供后续分析
用diskutil + smartctl交叉验证通道状态
如果dd和iostat结果明显偏低,问题可能不在硬盘本身,而在PCIe链路或控制器降频。
- 先查物理盘名:diskutil list | grep "NVMe\|internal",记下顶层盘符(如disk0)
- 再查NVMe通道速度:sudo smartctl -a /dev/disk0(替换为实际盘符),重点看“Transport: NVMe”和“Speed”字段
- 若显示“2.0 GT/s”或“Unknown”,说明M.2插槽或雷电控制器已降频;macOS 13.5+原生支持NVMe日志解析,旧系统需brew install smartmontools并启用Rosetta



















