Ubuntu 挂载 USB 后无法访问的排查与修复
一、快速定位问题
- 确认设备与分区:插入 U 盘后执行
- 查看设备与分区:lsblk、sudo fdisk -l
- 查看内核日志:dmesg | tail
- 观察是否出现 /dev/sdX1 等设备节点与文件系统类型(如 vfat/ntfs/exfat)
- 判断是否为权限问题:
- 若能看到挂载点但打开提示 Permission denied,多为当前用户无读写权限
- 若是外置硬盘或 U 盘在 /media/$USER/ 下无权限,同样属于权限或挂载选项问题
二、常见原因与对应修复
-
文件系统不被支持(如 exFAT)
- 现象:能识别设备但挂载失败或提示未知文件系统
- 处理:安装支持包后重插
- Ubuntu 20.04+:sudo apt-get install exfat-fuse exfat-utils
- 较早版本或需要额外源:sudo apt-get install exfat-utils(必要时添加 ppa:relan/exfat 后再安装)
-
挂载命令或选项不当(FAT/NTFS 常见)
- 现象:目录为空、打不开或报错
- 处理:手动指定类型与权限
- FAT32:sudo mount -t vfat -o uid=$USER,gid=$USER,utf8,flush /dev/sdX1 /mnt/usb
- NTFS:sudo mount -t ntfs-3g -o uid=$USER,gid=$USER,utf8 /dev/sdX1 /mnt/usb
- 若提示 ntfsfix 相关错误,先修复分区:sudo ntfsfix /dev/sdX1 再挂载
-
虚拟机场景未正确连接或被策略拦截
- 现象:宿主机识别,虚拟机内不出现
- 处理:
- 确认已将 USB 设备“连接”到此虚拟机(VMware/VirtualBox)
- 在 VMware 设置 USB 兼容性:USB 3.0
- 确保服务运行(Windows:启动 VMware USB Arbitration Service)
-
权限不足(挂载点/设备节点)
- 现象:挂载点存在但普通用户无法读写
- 处理:
- 挂载时指定用户组与权限(见上条 mount 的 uid/gid)
- 或将用户加入 plugdev(常见做法):sudo usermod -a -G plugdev $USER 并重新登录
- 若是访问 /dev/bus/usb/… 报 Permission denied(少见,多见于特殊 USB 设备):用 lsusb 查 VID/PID,写 udev 规则赋予权限(见文末示例)
三、标准操作步骤清单
- 插入 U 盘,确认设备名:
- lsblk、sudo fdisk -l、dmesg | tail
- 若识别到但无法访问,优先尝试手动挂载(以实际分区如 /dev/sdb1 为准):
- 创建挂载点:sudo mkdir -p /mnt/usb
- FAT32:sudo mount -t vfat -o uid=$USER,gid=$USER,utf8,flush /dev/sdb1 /mnt/usb
- NTFS:sudo mount -t ntfs-3g -o uid=$USER,gid=$USER,utf8 /dev/sdb1 /mnt/usb
- exFAT:先安装支持包(见上),再:sudo mount -t exfat /dev/sdb1 /mnt/usb
- 访问测试:ls -l /mnt/usb;若正常,后续可配置自动挂载(fstab/udisks)。
- 卸载:sudo umount /mnt/usb(或 /dev/sdb1)。
四、虚拟机与特殊设备的补充要点
-
虚拟机要点
- 确认焦点在虚拟机、设备已连接、USB 3.0 兼容、相关服务已启动;必要时更换 USB 控制器或虚拟机版本再试。
-
外置硬盘 NTFS 报错
- 先修复再挂载:sudo ntfsfix /dev/sdX1,随后按 NTFS 挂载命令挂载。
-
需要长期固定权限或设备别名(udev)
- 示例(将某 USB 串口设备固定别名并赋权,按需修改 idVendor/idProduct):
- 新建规则:sudo nano /etc/udev/rules.d/99-usb-serial.rules
- 内容示例:
- KERNEL=="ttyUSB", SUBSYSTEMS==“usb”, ATTRS{idVendor}==“10c4”, ATTRS{idProduct}==“ea60”, MODE:=“0666”, SYMLINK+=“mydevice”*
- 使生效:sudo udevadm control --reload-rules && sudo udevadm trigger
- 将用户加入 dialout(若为串口设备):sudo usermod -a -G dialout $USER 并重新登录