SD 卡满了会丢数据、刷不进系统。以下方法按”先找设备,再看用量,最后定位大文件”的顺序使用,均经 WSL2 实测(识别设备除外)。
一、TL;DR:快速排查链路
1. lsblk 找设备名和挂载点。 2. df -h <挂载点> 看剩余空间。 3. du -sh <目录> 定位大文件夹。 4. findmnt 确认挂载关系和设备来源。
二、lsblk:先确认 SD 卡设备名
lsblk -f
输出关键看 NAME(设备名,如 sdb、mmcblk0)、FSTYPE(文件系统类型)、MOUNTPOINTS(挂载点)和 SIZE [1]。SD 卡通常显示为 mmcblk*(树莓派等板卡)或 sd*(USB 读卡器)。如果 RM 列为 1,说明是可移动设备。
WSL 环境下通常看不到物理 SD 卡,但命令语法一致,换到真机可直接复用。
三、df -h:直接看剩余空间
df -h /media/username/SDCARD
df -h --output=source,size,used,avail,pcent,target
-h 可读化单位,--output 只显示需要的列 [2]。Use% 超过 90% 就该清理。注意 df 是按文件系统维度统计,不会告诉你哪个文件夹占得多。
四、du -sh:定位大目录
du -sh /media/username/SDCARD/*
du -sh /media/username/SDCARD/* | sort -rh | head -n10
-s 只显示总计,-h 可读化 [3]。sort -rh 按人类可读的数字从大到小排,head 取前 10 个最大目录。如果只想知道哪个目录最大,可以先用 ncdu 交互查看,但 ncdu 不是所有发行版默认安装。
五、findmnt:确认挂载来源
findmnt /media/username/SDCARD
这条命令告诉你某个目录具体挂载在哪个块设备上,以及是哪个设备文件 [4]。如果 findmnt 显示设备是 /dev/sdb1,但 lsblk 里 sdb 不存在,可能是读卡器没插好或内核没识别。
六、回滚、排错与局限性
排错速查
| 现象 | 原因 | 处理 |
|---|---|---|
| lsblk 看不到 SD 卡 | 读卡器未插、内核无驱动、WSL 无直通 | 换 USB 口或真机测试 |
| df 报 “No such file or directory” | 挂载点路径写错或卡已拔出 | 先用 lsblk 确认挂载点 |
| du 卡住不动 | 目录下有挂载点或权限受限 | 加 2>/dev/null 或 sudo |
| findmnt 找不到设备 | 卡未挂载或挂载信息损坏 | 手动 mount 或检查 /etc/fstab |
局限性
- WSL2 没有物理 SD 卡总线,
lsblk只能看到虚拟磁盘;识别设备步骤需在真机验证。 df不能看未挂载的 SD 卡空间;需要先挂载。du遇到权限拒绝会报错,加sudo可解决但会扫描更多系统目录。
实测记录
- 环境:WSL2 Ubuntu 24.04,内核 5.15。
lsblk -f:显示 sda/sdb/sdc/sdd 均为虚拟盘,无 mmcblk 设备。df -h:/dev/sdd 1T 总容量,已用 8.3G,可用 948G。du -sh /home:5.3G。findmnt:能正确显示 / 与 /dev/sdd 的对应关系。- 清理:未安装额外包,WSL 环境无需卸载。
参考资料
- [1] lsblk(8) – Linux manual page (man7.org)(lsblk(8))
- [2] df(1) – Linux manual page (man7.org)(df(1))
- [3] du(1) – Linux manual page (man7.org)(du(1))
- [4] findmnt(8) – Linux manual page (man7.org)(findmnt(8))
文中主要命令已在 WSL Ubuntu(24.04)实测并核对其在 Debian 系与通用发行版的文档口径。