如何从虚拟机访问 SD 卡?

Pun*_*oni 75 sd-card virtual-machine

我想从我的 Linux 虚拟机格式化 SD 卡。我的笔记本电脑中有一个内置的SD 卡读卡器。我尝试使用VirtualBoxVMware Player并安装了 Ubuntu 10.04 来宾。他们都没有将 SD 卡读卡器显示为设备。我可以从 Windows 主机访问 SD 卡。

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

我基本上想为BeagleBoard设置 SD 卡,但我不想在我的 PC 上安装物理 Ubuntu。

Jin*_*nKo 62

在较新的 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)`
      
      Run Code Online (Sandbox Code Playgroud)
    3. 在我的情况下,“NO NAME”卷是 SD 卡,所以我记下了这/dev/disk2s1部分。在这种特殊情况下,s1部件代表原始设备上的一个分区(切片),因此我们稍后将使用的/dev/disk2部件只是部件。

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

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

      $ VBoxManage internalcommands createrawvmdk -filename /path/to/file.vmdk -rawdisk /dev/disk2
      
      Run Code Online (Sandbox Code Playgroud)
  4. 接下来,我们将原始磁盘附加到 VirtualBox UI 中的来宾 VM

    1. 确保来宾 VM 未运行。
    2. 打开来宾 VM 的设置区域
    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
    
    Run Code Online (Sandbox Code Playgroud)

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

        $ id
        uid=501(jinn) gid=20(staff) ...snip...
    
    Run Code Online (Sandbox Code Playgroud)

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


更新 #2

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

  • 在 Mountain Lion 中,从 sdcard 获得了 diskarbitrationd 挂载分区,以阻止此操作:`$ sudo launchctl list | grep diskarbitrationd 188 - com.apple.diskarbitrationd $ sudo kill -SIGSTOP 188 # 暂停diskarbitrationd,禁用自动挂载 $ sudo kill -SIGCONT 188 # 恢复diskarbitrationd,重新启用自动挂载` (2认同)
  • 尝试将图像作为硬盘添加到 Virtual Box 时出现 RESOURCE_BUSY。我注意到 OSX 已经重新安装了 SD 卡分区。通过在终端(在主机上)`sudo diskutil unmountDisk /dev/<disk path>` 中键入以下内容来强制卸载它们 (2认同)
  • 我可以确认需要 1) 卸载 2) chown 3) 创建虚拟磁盘 4) 再次卸载 5) 添加到 VM 6) 再次卸载 7) 启动 VM。- @JinnKo:你能把它添加到答案中吗?或者我可以吗? (2认同)

san*_*ott 49

Windows 用户的回答

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

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

    输入这个命令

    wmic diskdrive list brief
    
    Run Code Online (Sandbox Code Playgroud)

    它应该是这样的:

    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
    
    Run Code Online (Sandbox Code Playgroud)

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

  2. 创建到 SD 卡的链接文件

    以管理员身份打开命令窗口

    "C:\Program Files\Oracle\VirtualBox\VBoxManage" internalcommands createrawvmdk -filename "%USERPROFILE%/Desktop/sdcard.vmdk" -rawdisk "\\.\PHYSICALDRIVE1"
    
    Run Code Online (Sandbox Code Playgroud)

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

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

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

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


kob*_*ltz 7

如果您的 SD 读卡器使用 USB 控制器,您很可能会错过这些扩展。

在此处输入图片说明

在文件 > 首选项下,按照图片操作。添加并指向下载的扩展。

在此处输入图片说明

重新启动您的虚拟机,您应该可以访问 USB 设备。


小智 7

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

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