在Linux虚拟机中挂载SD卡是嵌入式开发、数据迁移或存储测试等场景下的常见需求,无论是调试树莓派项目,还是访问物理机SD卡中的数据,掌握正确的挂载方法都能提升工作效率,本文将详细介绍从准备工作到实际挂载的全流程,并涵盖常见问题解决与注意事项,帮助读者顺利完成SD卡挂载操作。

应用场景与背景
Linux虚拟机(如VMware、VirtualBox或KVM)通过模拟硬件环境,允许用户在宿主机系统上运行完整的Linux环境,当需要访问SD卡中的数据(如嵌入式系统镜像、配置文件或备份文件)时,需将物理SD卡设备挂载到虚拟机文件系统中,这一过程涉及设备识别、权限配置和文件系统挂载等关键步骤,正确操作可避免数据损坏或访问失败。
准备工作
在开始挂载前,需确保硬件、软件及权限条件满足要求:
硬件与连接
- 物理读卡器:确保宿主机有可用的SD卡读卡器(内置或USB外置),且SD卡已正确插入。
- 虚拟机配置:在虚拟机管理软件(如VMware Workstation/Player、VirtualBox)中启用USB设备直通功能。
- VMware:进入虚拟机设置 → 硬件 → USB控制器,勾选“显示所有USB设备”并连接SD卡读卡器。
- VirtualBox:进入虚拟机设置 → 硬件 → USB,点击“+”号添加SD卡读卡器设备,确保“启用USB控制器”已勾选。
系统工具准备
虚拟机需安装基础磁盘管理工具,通常默认包含:
lsblk/fdisk:查看磁盘分区信息。mount/umount:执行挂载与卸载操作。parted/mkfs:若需格式化SD卡(非必需,避免误操作已存数据)。
权限确认
当前用户需具备root权限或sudo访问权限,以执行设备挂载操作,若使用普通用户,可通过sudo usermod -aG disk $USER将用户加入disk组(需重启生效)。
挂载步骤详解
识别SD卡设备
虚拟机连接SD卡后,需确认系统是否识别到设备,执行以下命令:
lsblk
或
fdisk -l
输出结果中,SD卡通常显示为/dev/sdX(如/dev/sdb)或/dev/mmcblkX(如/dev/mmcblk0),其中X为字母标识,若存在多个分区,会显示为/dev/sdb1、/dev/sdb2等。
注意:若未识别到设备,检查虚拟机USB控制器设置或尝试重新插拔SD卡。
创建挂载点
挂载点是虚拟机文件系统中用于访问SD卡数据的目录,需提前创建,在/mnt下创建sdcard目录:
sudo mkdir -p /mnt/sdcard
也可自定义路径(如/media/user/sdcard),确保目录存在且权限正确(默认755)。

执行挂载操作
根据SD卡文件系统类型选择挂载命令,常见文件系统包括ext4(Linux)、FAT32(vfat)、NTFS等。
挂载ext4分区(Linux原生文件系统):
sudo mount /dev/sdb1 /mnt/sdcard
挂载FAT32分区(兼容Windows与Linux):
sudo mount -t vfat /dev/sdb1 /mnt/sdcard -o iocharset=utf8
若出现乱码,可尝试
codepage=936(简体中文)或utf8。挂载NTFS分区(Windows常用文件系统):
需安装ntfs-3g工具(Ubuntu/Debian:sudo apt install ntfs-3g;CentOS/RHEL:sudo yum install ntfs-3g),然后执行:sudo mount -t ntfs-3g /dev/sdb1 /mnt/sdcard
验证挂载结果
挂载成功后,可通过以下命令确认SD卡数据可访问:
df -h # 查看磁盘空间使用情况,确认/mnt/sdcard已列出 ls -l /mnt/sdcard # 列出SD卡根目录文件
若显示分区信息和文件列表,表示挂载成功。
常见问题与解决方法
挂载失败:device or resource busy
原因:设备被其他进程占用(如文件管理器已打开SD卡)。
解决:关闭相关程序,或强制卸载(sudo umount -l /dev/sdb1)。
挂载后提示permission denied
原因:当前用户对挂载点或设备无读写权限。
解决:
- 方法1:使用
sudo执行挂载命令。 - 方法2:修改挂载点权限:
sudo chmod 777 /mnt/sdcard(临时方案,不推荐生产环境)。 - 方法3:通过
/etc/fstab配置uid和gid(见下文注意事项)。
SD卡只读无法写入
原因:SD卡物理写保护开关开启、文件系统错误或虚拟机配置限制。
解决:

- 检查SD卡侧面是否锁定写保护开关。
- 尝试重新挂载为读写模式:
sudo mount -o remount,rw /mnt/sdcard。 - 若文件系统损坏,可用
fsck修复(需先卸载,sudo fsck /dev/sdb1)。
注意事项
安全弹出:使用完毕后,需先卸载再拔出SD卡,避免数据损坏:
sudo umount /mnt/sdcard
或通过虚拟机系统工具“安全弹出硬件”。
自动挂载配置:为避免每次手动挂载,可编辑
/etc/fstab文件实现开机自动挂载,通过blkid获取SD卡分区UUID(如UUID="1234-5678"),然后添加:UUID=1234-5678 /mnt/sdcard vfat defaults,iocharset=utf8 0 0
参数说明:
defaults(默认权限),0 0(不备份、不检查文件系统),若需自动挂载但避免启动失败,可添加nofail选项。文件系统兼容性:非Linux原生文件系统(如NTFS、exFAT)需安装对应驱动工具(如
ntfs-3g、exfat-utils),确保虚拟机内核支持。
相关问答FAQs
Q1:挂载SD卡后提示“permission denied”,即使使用sudo也无法写入,如何解决?
A:可能原因是挂载点的所有者或权限设置不当,可通过以下步骤解决:
- 卸载SD卡:
sudo umount /mnt/sdcard。 - 修改挂载点所有者:
sudo chown -R $USER:$USER /mnt/sdcard($USER为当前用户名)。 - 重新挂载并添加
uid/gid参数(以ext4为例):sudo mount /dev/sdb1 /mnt/sdcard -o uid=$(id -u),gid=$(id -g)
或编辑
/etc/fstab,在挂载选项中添加uid=1000,gid=1000(1000为当前用户UID/GID,可通过id命令查看)。
Q2:如何在虚拟机启动时自动挂载SD卡,且避免因SD卡未插入导致系统启动失败?
A:通过/etc/fstab配置nofail选项可实现“挂载失败跳过”,操作步骤:
- 获取SD卡分区UUID:
sudo blkid /dev/sdb1,记录输出中的UUID值。 - 编辑
/etc/fstab:sudo nano /etc/fstab,添加以下内容(以ext4为例):UUID=your-uuid-here /mnt/sdcard ext4 defaults,nofail 0 2
-
nofail:即使设备不存在,启动也不会报错。 -
0 2:0表示不备份,2表示在fsck时不检查(非根分区建议使用)。
-
- 保存文件并重启虚拟机验证。
通过以上步骤,即可实现SD卡的安全挂载与便捷管理,满足开发与测试需求。
【版权声明】:本站所有内容均来自网络,若无意侵犯到您的权利,请及时与我们联系将尽快删除相关内容!
发表回复