SD卡在Windows可正常识别格式化,但Linux系统提示“mmc0: card never left busy state”无法使用,求解决方案
SD卡在Windows可正常识别格式化,但Linux系统提示“mmc0: card never left busy state”无法使用,求解决方案
嘿,我之前帮朋友处理过几乎一模一样的问题,给你几个针对性的办法,应该能搞定这个棘手的状况:
第一步:先在Windows彻底清除SD卡的分区表信息
Windows能识别是因为它的SD卡驱动对异常状态容错性更强,但残留的分区表或控制器状态可能在Linux里卡壳。我们先把卡的底层信息清干净:
- 以管理员身份打开命令提示符,输入
diskpart进入磁盘工具 - 输入
list disk,找到你的SD卡(一定要核对容量,别选错本地硬盘!) - 输入
select disk X(X是你SD卡的编号) - 输入
clean,这个命令会彻底擦除卡上所有分区表和引导信息,相当于把卡还原成“刚出厂”的空白状态 - 之后可以简单创建一个FAT32分区(也可以不创建,留空就行),退出diskpart
第二步:在Linux里重置MMC控制器模块
有时候Linux的MMC驱动会因为之前的异常操作卡住状态,重新加载驱动能强制重置:
- 比如在Steam Deck的桌面模式打开终端,先输入
sudo lsblk确认SD卡的设备名(比如/dev/mmcblk0) - 输入
sudo rmmod mmc_block,再输入sudo rmmod mmc_core(如果提示“模块正在使用”,就先重启机器,重启后再执行这两步) - 重新加载驱动:
sudo modprobe mmc_core,然后sudo modprobe mmc_block - 现在拔插SD卡,输入
dmesg | tail -20看看还会不会出现mmc0: card never left busy state的错误
第三步:用Linux工具彻底擦除卡的开头区域并重建分区
如果上面的方法没效果,我们直接擦除卡的开头部分(这里面可能残留了导致驱动异常的信息):
- 确认SD卡设备名(还是用
lsblk,别搞错!),比如/dev/mmcblk0 - 执行命令:
sudo dd if=/dev/zero of=/dev/mmcblk0 bs=1M count=10,这个会擦除开头10MB的内容,把所有残留的引导信息、分区表都清掉 - 然后重建分区表:
sudo fdisk /dev/mmcblk0- 输入
g创建GPT分区表(Steam Deck推荐用GPT) - 输入
n创建新分区,一路按回车用默认设置就行 - 输入
w保存分区表
- 输入
- 格式化分区为Steam Deck兼容的ext4:
sudo mkfs.ext4 /dev/mmcblk0p1 - 挂载测试:
sudo mkdir /mnt/sdtest && sudo mount /dev/mmcblk0p1 /mnt/sdtest,如果能成功挂载,就说明问题解决了
第四步:更新Linux系统内核(针对Steam Deck)
SteamOS的内核有时候会有特定的MMC驱动bug,更新系统可能直接修复这个问题:
- 在Steam Deck桌面模式打开Konsole,输入
sudo pacman -Syu,跟着提示完成系统更新(包括内核) - 重启后再插入SD卡测试
为什么会出现这种情况?
简单说,Windows和Linux的SD卡驱动逻辑不一样:Windows的驱动对卡的异常状态容忍度更高,能自动重置卡的控制器;但Linux的MMC子系统对卡的状态检测更严格,之前你中断格式化、用dd擦写的操作可能让卡的控制器在Linux驱动里留下了错误的状态标记,导致驱动认为卡一直处于忙碌状态。
备注:内容来源于stack exchange,提问作者Piotrus Watson




