
虚拟机里插了SD卡没反应这事我前前后后折腾了一下午。环境是VMware Workstation Pro 17 Ubuntu 22.04 LTS宿主机是Windows读卡器是USB 3.0的插上之后Windows能正常识别但虚拟机里lsblk怎么都看不到设备dmesg也没有任何提示。如果你也卡在这下面这套排查思路和解决步骤可以直接抄。1. 先分清是Ubuntu没看到设备还是VMware没把设备给虚拟机这个问题最大的坑在于很多人一上来就折腾Ubuntu的驱动、内核模块搞了半天发现方向完全错了。SD卡在虚拟机里“消失”通常不是Linux端的问题而是VMware压根没把USB设备“让”给虚拟机。虚拟机里的Ubuntu看到的硬件基本都由宿主机上的VMware虚拟化层提供。物理机上的SD卡读卡器是USB设备VMware默认情况下并不会把一个USB设备自动连接到虚拟机除非你在虚拟机设置里明确分配或者用右下角状态栏的USB图标手动连接。如果你在Ubuntu里执行lsusb看不到读卡器那基本可以断定设备根本没进虚拟机。先别急着查什么usb-storage驱动、mmc_block模块先确认设备是否已经连接进来了。提示Windows宿主机上SD卡能被识别不代表VMware会把设备传给虚拟机。这是两个独立层面。2. 排查链路从设备到底层模块逐层确认问题在哪我按自己踩坑时的顺序整理成一条完整的排查链路。你只需要照着一步步做几分钟就能定位到问题。在VMware菜单栏依次打开“虚拟机” - “可移动设备”看里面有没有出现读卡器的名称。如果出现了但名字是灰色不可点击说明设备被宿主机的驱动占用了需要先在Windows的“设备管理器”里禁用该设备。如果根本没出现在列表里大概率是VMware的USB控制器设置有问题或者虚拟机里的USB协议版本不匹配。进入Ubuntu执行lsusb看有没有对应的设备信息。执行dmesg | tail -20看有没有USB设备插入的内核日志。执行lsblk和fdisk -l确认是否多出了sd设备节点或mmc设备节点。如果设备节点出现了但无法挂载再看文件系统相关错误。执行完这些命令你基本就知道问题出在哪一层了。我在自己机器上测试时第2步就卡住了——VMware的“可移动设备”菜单里读卡器是灰色的点击“连接”没有任何反应。3. 真正的元凶USB控制器版本和读卡器驱动冲突灰色不可点这个现象很典型。具体原因有两类第一类是宿主机驱动独占。Windows自带的读卡器驱动尤其是Realtek读卡器驱动会默认锁定设备VMware此时拿不到设备的操作权限。解决方法是按Win X打开“设备管理器”找到“磁盘驱动器”或“存储控制器”下的SD读卡器右键选择“禁用设备”注意禁用宿主机上的设备不是拔掉物理设备。禁用后Windows会释放设备句柄VMware就能抢到控制权了。第二类是VMware的USB控制器版本不匹配。检查的方法关闭虚拟机右键虚拟机 - “设置” - “USB控制器”把USB兼容性从“USB 2.0”改成“USB 3.1”或者反过来试试勾选“显示所有USB输入设备”我的实际案例里读卡器是USB 3.0接口的但虚拟机里默认USB 2.0兼容模式导致设备连接后无法正常工作。改成USB 3.1之后配合宿主机禁用了设备问题才解决。现象可能原因解决办法菜单里没有读卡器USB控制器未启用虚拟机设置里勾选USB控制器菜单里有但灰色宿主机驱动占用设备管理器里禁用读卡器连接后Ubuntu无反应USB协议版本不匹配切换USB 2.0/3.1兼容性lsusb有设备但lsblk没有驱动或sd模块缺失内核加载usb-storage和mmc模块4. Ubuntu 22.04侧的补充处理模块、权限与挂载设备进到虚拟机之后也未必马上就能用。如果你lsusb能看到读卡器但lsblk里还是没有sd设备那就得看Ubuntu 22.04这边的模块了。一条命令查看lsmod | grep usb_storage正常情况下22.04的内核已经内置了usb-storage模块。如果没加载手动拉起来sudo modprobe usb-storage sudo modprobe mmc_block注意一个细节SD读卡器通过USB接入的话它走的其实是usb-storage驱动最终呈现为/dev/sda、/dev/sdb这样的SCSI设备节点而不是/dev/mmcblk0。只有在读卡器走PCIe接口比如笔记本内置读卡器直通VMware时才会出现mmcblk设备。所以看到/dev/sda别奇怪你并不是看到了“硬盘”那就是你的SD卡。权限这块也容易出问题。如果你用桌面环境插卡后系统可能会尝试自动挂载但弹窗没反应。可以手动挂载sudo mkdir -p /mnt/sd sudo mount /dev/sda1 /mnt/sd如果提示wrong fs type说明SD卡可能是exFAT格式需要安装exFAT支持sudo apt update sudo apt install exfat-fuse exfat-utils5. 如果SD卡能识别但无法读写再查这两个地方还有一类情况设备识别了挂载也成功了但往里拷文件失败或者报写保护错误。这类问题我在另一台机器上也踩到过和VMware无关纯粹是Ubuntu 22.04自身策略写保护状态SD卡侧面拨片被拨到了Lock位置。Windows下也许还能读Linux下会直接返回只读错误。拨回去即可。挂载参数问题手动挂载时有时候会用默认参数将分区挂成只读尤其当文件系统上次是非正常拔出时。强制以读写方式重新挂载sudo mount -o remount,rw /mnt/sdUdisk2服务干扰桌面环境下udisks2有时会把块设备锁住手动挂载会报Device is busy。这种情况建议把设备弹出的选项关掉或者用sudo umount之后重新挂载。注意SD卡尽量不要在虚拟机开着的时候直接拔。停掉虚拟机或先在VMware里断开设备连接再物理拔出能极大降低文件系统损坏的概率。6. 一次完整的操作序列直接照做为了让你避免走弯路我把自己最终跑通的完整操作顺序整理在下面。假设你的环境是Windows宿主机 VMware Workstation Pro 17 Ubuntu 22.04 LTS。6.1 宿主机操作插入SD卡确认Windows能识别。打开“设备管理器”展开“磁盘驱动器”。找到SD读卡器对应的设备显示类似“Generic STORAGE DEVICE USB Device”或“Realtek USB3.0 Card Reader”。右键 - “禁用设备”。注意只是禁用该设备不是卸载。禁用后Windows资源管理器里会看不到SD卡这是正常的。切到VMware Workstation确认虚拟机处于“已打开电源”或“已暂停”状态。6.2 VMware操作菜单栏 - “虚拟机” - “可移动设备”。找到你的读卡器设备点击“连接”。如果点击后没反应关闭虚拟机编辑虚拟机设置。在“USB控制器”里把USB兼容性切换为“USB 3.1”。勾选“显示所有USB输入设备”点“确定”启动虚拟机。6.3 Ubuntu 22.04操作打开终端执行lsusb看是否出现读卡器厂商信息比如Realtek、JMicron等。执行lsblk如果出现/dev/sda、/dev/sdb说明设备已经被内核识别。挂载分区sudo mkdir -p /mnt/sd sudo mount /dev/sda1 /mnt/sd如果你的SD卡只有一个分区通常是/dev/sda1如果整个卡没有分区表则是/dev/sda可以直接挂载。查看文件ls -l /mnt/sd这套流程执行完绝大多数情况都能正常使用SD卡了。7. 我在实际处理中发现的几个细节经验最后补充几条操作中总结出来的实用经验常规帖子里不太会写VMware右下角USB图标比菜单更好用。直接点击右下角的USB图标能直观看到哪些设备已经连接、哪些还挂在宿主机上。比每次进“可移动设备”菜单快多了。读卡器识别慢的时候别反复拔插。有些USB读卡器从插入到被内核完整枚举需要10到20秒尤其是SD卡里文件较多、容量较大的时候。拔插一次反而会打断内核的状态机导致设备识别失败。如果是笔记本内置读卡器PCIe接口直通情况会麻烦一些因为VMware默认无法对PCIe读卡器做热插拔。这种情况下基本只有两个选择要么换USB读卡器要么把虚拟机添加PCI设备直通但这需要宿主机BIOS开启VT-d而且配置比较复杂不适合日常场景。SD卡文件系统格式的问题如果你打算在虚拟机和其他设备相机、Windows、树莓派之间共用一张卡建议格式化为exFAT而不是ext4或FAT32。exFAT在Linux下读写需要exfat-fuse包装一次以后就畅通无阻了。FAT32虽然兼容性最好但单文件4GB上限对今天的视频、镜像来说很难受。VMware的USB 2.0 vs USB 3.1速度差别非常明显。如果你往SD卡拷贝大文件一定要用USB 3.1控制器实测速度能差出3到5倍。前提是你宿主机上VMware已经启用USB 3.1并且设备本身是USB 3.0标准。一个容易忽略的坑某些USB读卡器会被识别为“U盘”而不是“读卡器”。其实底层都是USB Mass Storage设备处理方式完全相同不影响上述流程。我这次排查下来最耗时的其实是第2步因为一直没意识到是宿主机驱动占用。后来把读卡器从设备管理器禁用再连到虚拟机一次就通了。如果你的情况还不太一样比如Ubuntu那边lsusb有设备但lsblk始终不更新建议先sudo apt update sudo apt upgrade升级一下内核和相关驱动22.04的内核版本较新时对这些USB读卡器的兼容性要好很多。