栗子派昇腾310B开发板套件Atlas 200I DK A2 之 NVMe 硬盘测试实战
前言
本帖记录在栗子派华为昇腾310B开发板套件开发板上完成 NVMe 固态硬盘读写测试的全过程。开发板搭载 NPU Ascend 310B4,系统为 Ubuntu 22.04 LTS (aarch64),运行内核 5.10.0+,Ascend 软件版本 23.0.rc3
NVMe 分区为 /dev/nvme0n1p1,文件系统 ext4,先创建 /mnt/nvme 后挂载
验收标准:写入和读取成功,测试文件可校验并彻底删除,原有数据不受影响。
一、硬件连接
开发板断电后安装 NVMe 固态硬盘,确认固定螺钉锁紧,不允许硬盘翘起或金手指未完全插入开发板断电后安装 NVMe 固态硬盘,确认固定螺钉锁紧。
警告:插拔 NVMe 前必须断电。NVMe 测试严禁直接执行 mkfs、fdisk、parted、wipefs 等命令,否则可能破坏已有分区和数据。
二、识别与挂载检查
NVMe 测试不重新分区、不格式化。首先用 lsblk 确认设备、已有分区和文件系统。若看到 /dev/nvme0n1p1 且 FSTYPE 为 ext4,但 MOUNTPOINTS 为空,说明硬盘已经识别、只是尚未挂载。
echo "========== NVMe设备与分区 =========="
lsblk -o NAME,SIZE,TYPE,FSTYPE,MOUNTPOINTS,RO,MODEL
lsblk -f
# 仅当已确认存在 /dev/nvme0n1p1 且文件系统为 ext4 时继续
# 1. 创建挂载目录(这一步不能省略)
mkdir -p /mnt/nvme
# 2. 挂载已有分区
mount /dev/nvme0n1p1 /mnt/nvme
# 3. 验证挂载和容量
findmnt /mnt/nvme
df -hT /mnt/nvme
# 4. 如需重启后自动挂载,可写入 /etc/fstab
UUID=$(blkid -s UUID -o value /dev/nvme0n1p1)
cp /etc/fstab /etc/fstab.bak
grep -q "UUID=$UUID " /etc/fstab || echo "UUID=$UUID /mnt/nvme ext4 defaults,nofail 0 2" >> /etc/fstab
mount -a
findmnt /mnt/nvme
挂载成功后,findmnt /mnt/nvme 应显示来源为 /dev/nvme0n1p1,df -hT /mnt/nvme 应显示 ext4 文件系统及实际容量。Linux 显示容量与硬盘标称容量可能不同,例如标称 1 TB 的硬盘显示约 953.9G 属于正常的单位换算差异
若 lsblk 只有 nvme0n1 而没有分区,或 FSTYPE 为空,应停止本节测试并确认硬盘初始化状态,不要直接格式化。
三、安全读写测试
测试仅在已经挂载成功的 /mnt/nvme 下创建 nvmewritetest.bin,不修改其他文件。开始写入前先用 mountpoint / findmnt 再次确认 /mnt/nvme 确实是 NVMe 挂载点,避免在未挂载时误把测试文件写入系统盘根分区。
TEST_FILE=/mnt/nvme/nvme_write_test.bin
# 阶段0:确认 /mnt/nvme 已真正挂载,未挂载则立即停止
mountpoint -q /mnt/nvme || { echo "[失败] /mnt/nvme 尚未挂载,请先执行上一节"; exit 1; }
findmnt /mnt/nvme
# 阶段1:删除旧测试文件
rm -f "$TEST_FILE"
# 阶段2:记录测试前容量
df -hT /mnt/nvme
# 阶段3:写入100 MiB测试文件
dd if=/dev/zero of="$TEST_FILE" bs=1M count=100 conv=fsync status=progress
sync
# 阶段4:确认文件存在
ls -lh "$TEST_FILE"
# 阶段5:计算SHA256
sha256sum "$TEST_FILE"
# 阶段6:读取完整性与读取速度测试
dd if="$TEST_FILE" of=/dev/null bs=4M status=progress
本次实测写入 104857600 字节(100 MiB),耗时约 1.00573 s,终端显示写入速度约 104 MB/s;文件大小显示为 100M,SHA256 能正常生成,读取测试返回"测试文件读取正常",说明文件可写、可读且路径正确。
四、删除测试文件与容量复核
TEST_FILE=/mnt/nvme/nvme_write_test.bin
# 阶段7:删除测试文件
rm -f "$TEST_FILE"
# 阶段8:确认文件已经删除
if [ -e "$TEST_FILE" ]; then
echo "[失败] 测试文件仍然存在"
else
echo "测试文件已成功删除"
fi
# 阶段9:再次查看容量
df -hT /mnt/nvme
测试文件创建、SHA256 校验、读取和删除均成功;删除后 df 再次显示约 1.1G 已用空间,与测试前一致,说明 100 MiB 测试文件已经清理,没有长期占用硬盘容量。
五、常见问题与处理
|
故障现象 |
原因分析 |
处理方法 |
|
lsblk 看不到 nvme0n1 |
硬盘未插紧、供电不足或硬件不兼容 |
断电重新安装并固定硬盘,查看 |
|
mount 提示 mount point does not exist |
/mnt/nvme 目录尚未创建,或 mkdir 命令输入错误 |
先执行 |
|
df 提示 /mnt/nvme 不存在或 dd 无法创建测试文件 |
挂载目录不存在,或 NVMe 尚未挂载 |
依次执行 mkdir、mount、findmnt、df,确认后再测试 |
|
lsblk 看到 nvme0n1p1 但 MOUNTPOINTS 为空 |
硬盘和 ext4 分区正常,但当前未挂载 |
直接挂载已有分区到 /mnt/nvme;不要重新分区或格式化 |
|
重启后 /mnt/nvme 未自动挂载 |
只做了临时 mount,没有配置 fstab |
使用 blkid 获取 UUID,将 |
|
dd 提示 No space left on device 或速度异常 |
空间/inode 不足,或系统负载、缓存、温度影响 |
执行 |
六、验收结果
|
测试项 |
实际结果 |
判定 |
|
NVMe 挂载 |
/dev/nvme0n1p1,ext4,已创建 /mnt/nvme 并挂载;容量以实际硬盘为准 |
通过 |
|
NVMe 写入 |
100 MiB 文件写入约 104 MB/s |
通过 |
|
NVMe 读取与清理 |
SHA256 生成、读取成功、测试文件删除、容量恢复 |
通过 |
总结
NVMe 在确认已有 ext4 分区后创建 /mnt/nvme 并挂载,可完成 100 MiB 文件写入(约 104 MB/s)、SHA256 校验、读取与删除。交付要点已固化为:识别已有分区 → 创建 /mnt/nvme → 挂载并验证 → 再读写测试,可避免现场重复踩坑。
希望对各位开发者有所帮助。如有问题欢迎回帖交流。
更多推荐




所有评论(0)