如何从虚拟机访问 SD 卡?

如何从虚拟机访问 SD 卡?

我想从 Linux 虚拟机格式化 SD 卡。我有一个内置SD卡阅读器。我尝试使用虚拟盒VMware 播放器并安装了 Ubuntu 10.04 客户机。它们都没有将 SD 卡读卡器显示为设备。我可以从 Windows 主机访问 SD 卡。

我对使用共享文件夹的解决方案不感兴趣,因为我想以硬件形式访问 SD 卡(它应该显示在/dev)。

我基本上想设置 SD 卡比格犬板,但我不想在我的 PC 上安装物理 Ubuntu。

答案1

在较新的 MacBook Pro 上,SD 卡插槽不再显示为 USB 设备。因此,您需要将原始设备连接到 VM,才能获得对整个卡的原始访问权限。完整文档位于高级存储配置VirtualBox 文档的部分。

正如文档中明确指出的那样:

警告- 原始硬盘访问仅供专家用户使用。不正确使用或使用过时的配置可能导致物理磁盘上的数据完全丢失。最重要的是,不要尝试在客户机中用当前正在运行的主机操作系统启动分区。这将导致严重的数据损坏。

作为快速指南,这些是将设备连接到 Linux VM 的步骤:

  1. 识别主机系统上的原始磁盘块设备

    1. 将 SD 卡插入插槽
    2. 打开终端并输入“mount”。您将看到输出,标识 SD 卡上已安装的卷。在我的系统上,我得到以下信息

      $ mount
      /dev/disk1 on / (hfs, local, journaled)
      devfs on /dev (devfs, local, nobrowse)
      map -hosts on /net (autofs, nosuid, automounted, nobrowse)
      map auto_home on /home (autofs, automounted, nobrowse)
      /dev/disk2s1 on /Volumes/NO NAME (msdos, local, nodev, nosuid, noowners)`
      
    3. 在我的例子中,“无名称”卷是 SD 卡,因此我记下了该/dev/disk2s1部分。在这个特定例子中,该s1部分代表原始设备上的一个分区(切片),因此我们稍后要使用的部分就是该/dev/disk2部分。

  2. 打开磁盘实用程序并“卸载”该卷。不要“弹出”它。请注意,在接下来的步骤中,您可能需要偶尔卸载该卷,因为我发现 OSX 会随机自动重新安装它。
  3. 现在我们在终端中使用以下命令设置 VirtualBox 来识别原始设备。

    1. 请注意,可以将其/path/to/file.vmdk放在任何地方,但最好将其存储在客户虚拟机文件夹中,例如~/VirtualBox VMs/guest-vm/sdcard.vmdk
    2. 请注意,-rawdisk我们使用的不是引用分区(切片),而是仅仅引用整个块设备。

      $ VBoxManage internalcommands createrawvmdk -filename /path/to/file.vmdk -rawdisk /dev/disk2
      
  4. 接下来,我们将原始磁盘附加到 VirtualBox UI 中的客户虚拟机

    1. 确保客户虚拟机未运行。
    2. 打开来宾虚拟机的设置区域
    3. 点击工具栏中的“存储”
    4. 单击控制器旁边的图标“添加硬盘”
    5. 选择“选择现有磁盘”
    6. 导航到/path/to/file.vmdk您在步骤 3 中使用的并选择它
    7. 现在您应该返回到“存储”选项卡并file.vmdk在列表中看到您的内容。
  5. 启动虚拟机
  6. 根据您是否有 GUI,SD 卡可能会自动安装,也可能不会。如果您需要手动安装,它只会显示为另一个标准块设备,因此在我的客户机上,它显示为 /dev/sdb。

更新

似乎有些人在步骤 3.2 或 4.6 中无法访问原始设备。尝试使用 sudo 运行某些命令不会有帮助,因为 VirtualBox 将以您的登录用户身份运行,并且仍然无法正确访问原始设备或生成的 vmdk 文件。

尽管我还没有测试过,但以下步骤应该会有所帮助。

  1. 在“系统偏好设置/用户”部分中检查您在 OSX 上使用的帐户是否具有管理员权限。它很可能也是系统上用于原始设备访问的主要帐户。
  2. 检查原始磁盘权限

        $ ls -l /dev/disk2
        brw-r----- 1 jinn staff    14,  5 Aug 26 15:33 /dev/disk2
    

    这些权限必须与您当前登录的用户帐户相匹配:

        $ id
        uid=501(jinn) gid=20(staff) ...snip...
    

    设备上的权限还应允许您的常用用户帐户读取 (r) 和写入 (w) 该设备。除非您完全知道自己在做什么,否则请勿更改设备上的权限。


更新 #2

事实证明,OSX Mountain Lion 创建该设备时具有“root:operator”权限和 0640 权限。不幸的是,目前访问此设备的唯一方法是每次插入设备时将其“sudo chown $USER”设置为当前用户,但是除非您真正了解自己在做什么,否则不建议这样做。希望 Apple 或 VirtualBox 能找到更合适的解决方案。

答案2

针对 Windows 用户的解答

  1. 获取您的 SD 卡读卡器的 DeviceID。

    您需要驱动器中的一张卡,由 Windows 安装。

    输入此命令

    wmic diskdrive list brief
    

    它看起来应该是这样的:

    C:\Users\Sandy Scott>wmic diskdrive list brief
    Caption                      DeviceID            Model                        Partitions  Size
    WDC WD7500BPKT-75PK4T0       \\.\PHYSICALDRIVE0  WDC WD7500BPKT-75PK4T0       3           750153761280
    O2Micro SD SCSI Disk Device  \\.\PHYSICALDRIVE1  O2Micro SD SCSI Disk Device  1           3964584960
    

    最后一个设备是 SD 卡读卡器,因此 DeviceID 是\\.\PHYSICALDRIVE1

  2. 创建 SD 卡的链接文件

    打开命令窗口作为管理员

    "C:\Program Files\Oracle\VirtualBox\VBoxManage" internalcommands createrawvmdk -filename "%USERPROFILE%/Desktop/sdcard.vmdk" -rawdisk "\\.\PHYSICALDRIVE1"
    

    这假定了默认安装路径 - 如果需要,请更改它。(确保 rawdisk 参数周围有引号。)

    .vmdk 文件是 SD 卡的链接,您可以将其放在主机系统上的任何位置,但为了方便起见,此命令只是将其放在桌面上。

  3. 按照 JinnKo 的回答中的步骤 4-6 进行操作,唯一的小调整是您需要以管理员身份启动 VirtualBox

  1. 接下来,我们将原始磁盘附加到 VirtualBox UI 中的客户虚拟机
    1. 确保客户虚拟机已关闭。
    2. 确保 VirtualBox 没有运行
    3. 右键单击并选择“以管理员身份运行”来启动 VirtualBox
    4. 打开来宾虚拟机的设置区域
    5. 点击工具栏中的“存储”
    6. 单击控制器旁边的图标“添加硬盘”
    7. 选择“选择现有磁盘”
    8. 导航到/path/to/file.vmdk您在步骤 3 中使用的并选择它
    9. 现在您应该返回到“存储”选项卡并file.vmdk在列表中看到您的内容。
  2. 启动虚拟机
  3. 根据您是否有 GUI,SD 卡可能会自动安装,也可能不会。如果您需要手动安装,它只会显示为另一个标准块设备,因此在我的客户机上,它显示为 /dev/sdb。

答案3

在较新的 MacBook Pro 上,SD 卡插槽不再显示为 USB 设备

为了解决这个问题,你可以简单地使用外部USB 存储卡读卡器(即 SD 卡转 USB 适配器)而不是内置读卡器。它将把您的 SD 卡显示为 USB 设备,这样您就可以像安装任何 USB 设备一样轻松安装它。它们是便宜的设备,考虑到其他方式的所有麻烦,这将是一个可接受的解决方案。

答案4

我正在使用 Kubuntu 15.04,VirtualBox 4.3.26

假设 SD 卡设备是/dev/mmcbl0,并且输出 .vdk 将是sd-card.vmk

sudo VBoxManage internalcommands createrawvmdk -filename ./sd-card.vmdk -rawdisk /dev/mmcblk0

不确定这是修复权限的最佳方法,但它确实有效:

sudo chmod 777 /dev/mmcblk0
sudo chmod 777 ./sd-card.vmdk

现在转到 VM 设置,选择存储,单击控制器:Sata,单击添加硬盘图标,选择您的 .vdk(在本例中为 sd-card.vmdk)

相关内容