dd和iostat配合可测mac硬盘真实读写速度:dd测裸速需清空空间并保留测试文件,iostat -d -w 5监控实时吞吐,diskutil与smartctl交叉验证nvme通道状态。

要在Mac终端里测硬盘真实读写速度,必须绕过缓存干扰、避开系统后台占用,并用底层命令直接驱动块设备——dd命令最接近物理层吞吐,iostat提供周期性采样,两者配合才能看清硬盘在真实负载下的表现。
用dd命令测原始写入与读取速度
这一步操作起来很简单,直接在终端里敲几行命令就能生成并读取大文件,结果反映的是块设备裸速,但【务必先清空目标路径剩余空间,否则测试会因磁盘满而失败】。
打开终端(访达 → 应用程序 → 实用工具 → 终端)。
执行以下命令创建1GB测试文件:dd if=/dev/zero of=/tmp/testfile bs=1024k count=1000,回车后等待完成;注意观察输出末尾的“bytes transferred”和“time”,它会自动算出MB/s写速。
再执行读取测试:dd if=/tmp/testfile of=/dev/null bs=1024k,这次看的是从磁盘读到内存的速度,【不要删掉/tmp/testfile,否则第二次测试无效】。
两次结果中,写入速度受TRIM和垃圾回收影响较大,读取更稳定;若写入低于500 MB/s而读取超2000 MB/s,大概率是SSD写缓存策略导致,非硬件故障。
用iostat监控周期性磁盘吞吐
iostat不跑压力测试,只抓内核I/O子系统每秒上报的真实流量,适合边拷文件边看速率,也适合后台长期记录。
第一步:打开终端,输入 iostat -d -w 5 并回车。
第二步:等5秒后首次输出表格,找到标有“r_MB/s”和“w_MB/s”的行,数值就是过去5秒平均读写速率。
第三步:保持命令运行,此时做任何磁盘操作(如拖拽大文件进U盘),对应设备行的数值会立刻跳升——外置盘通常显示为disk2或disk3,内置盘多为disk0。
按Control + C退出;若需导出数据,可加 > /tmp/iostat.log 重定向保存。
用diskutil和smartctl交叉验证设备健康与通道状态
如果dd和iostat测出的速度远低于标称值,问题可能不在速度本身,而在硬件链路或固件限制。
先确认目标盘物理节点:执行 diskutil list | grep "NVMe\|internal",记下顶层盘名(如disk0,不是disk0s1)。
再查PCIe通道是否降速:执行 sudo smartctl -a /dev/disk0(把disk0换成你上步得到的名称),重点找“Transport: NVMe”和“Speed: 8.0 GT/s”这类字段;若显示“2.0 GT/s”或“Unknown”,说明M.2插槽或雷电控制器已降频。
这一步不需要安装smartmontools——macOS 13.5+原生支持NVMe Log Page解析,旧系统才需brew install smartmontools并启用Rosetta。











