如何从虚拟机访问SD卡?


64

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

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

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


1
您是否安装了virtualbox guest虚拟机插件?
tumchaaditya 2012年

1
我遇到过同样的问题。下面的解决方案确实对我有用,但不够灵活。我最终投资了“ USB Micro SD读取器”,该读取器默认显示在虚拟机中。这使我无需执行其他操作即可插拔卡。解决方案的另一个视角
TheMeaningfulEngineer

Answers:


56

在较新的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. 在我的情况下,“ 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
      
  4. 接下来,我们将原始磁盘附加到VirtualBox UI中的来宾VM

    1. 确保访客虚拟机未运行。
    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
    

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

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

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


更新#2

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


2
在山狮,得到了diskarbitrationd从SD卡安装分区,停止这样的:$ sudo launchctl list | grep diskarbitrationd 188 - com.apple.diskarbitrationd $ sudo kill -SIGSTOP 188 # pauses diskarbitrationd, disabling automount $ sudo kill -SIGCONT 188 # resumes diskarbitrationd, reenabling automount
ıɾuǝʞ

1
感谢@kenji,这是对Mtn Lion用户的另一个很棒的提示(我自己在automount问题上有些挣扎)。我在VirtualBox论坛上的详细说明将受益于此技巧。我将在此处和下方添加指向您的评论的链接。再次感谢。
likethesky

1
我遵循了本指南,但遇到权限问题,然后在设备上预装了chmod 777,它运行良好。此处有更多详细信息:balage.blogs.balabit.com/2010/10/…–
萨曼莎·卡塔尼亚

2
尝试将映像作为硬盘添加到Virtual Box时出现RESOURCE_BUSY。我注意到OSX已经重新安装了SD卡分区。迫使他们通过键入终端以下(在主机上)卸载sudo diskutil unmountDisk /dev/<disk path>
罗布

1
我可以确认需要1)卸载2)chown 3)创建虚拟磁盘4)再次卸载5)添加到VM 6)再次卸载7)启动VM。— @JinnKo:您能在答案中加上吗?还是可以?
Erik Allik

42

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中的来宾VM
    1. 确保访客虚拟机已关闭电源。
    2. 确保VirtualBox没有运行
    3. 右键单击VirtualBox并选择“以管理员身份运行”,启动VirtualBox。
    4. 打开来宾VM的设置区域
    5. 点击工具栏中的“存储”
    6. 在控制器旁边,单击“添加硬盘”图标
    7. 选择“选择现有磁盘”
    8. 导航到/path/to/file.vmdk您在步骤3中使用的,然后选择它
    9. 现在,您应该返回到“存储”选项卡,并file.vmdk在列表中看到您的名称。
  2. 启动虚拟机
  3. 取决于您是否具有GUI,SD卡是否可以自动安装。如果需要手动挂载,则将其公开为另一个标准块设备,因此在我的来宾上,该公开为/ dev / sdb。

如果您试图通过cygwin监视转义字符来获取此信息。我没有得到正确的cygwin解决方案,但注意到在其中运行的命令cmd无效cygwin
TheMeaningfulEngineer 2015年

当我以管理员身份启动VirtualBox时,看不到我的机器,因此无法更改其设置。原因可能是我不是管理员用户,因为我正在使用共享文件夹中的链接,因此需要这样做。将我的帐户类型更改为管理员并添加sdcard驱动器并以admin身份运行VirtualBox之后,我无法越过登录屏幕。我在syslog中找不到问题。只有当再次移除sdcard驱动器时,我才能以admin身份运行VirtualBox时也可以登录,但是当然我看不到sd卡。所以这对我不起作用。:(
弗兰克·布雷特灵

7

如果您的SD读取器正在使用USB控制器,则很可能会丢失扩展名。

在此处输入图片说明

在“文件”>“首选项”下,遵循图片。添加并指向下载的扩展名。

在此处输入图片说明

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


嗨,我尝试了此解决方案并安装了virtualbox扩展包,但仍然没有成功。我在macbook中这样做,如果有任何区别。另外,在我的macbook系统分析器中,sd读卡器未在USB设备下列出,而是作为一个单独的类别称为“读卡器”。另外,我能够在virtualbox中的USB下看到列出的设备。
Punit Soni 2012年

4

在较新的MacBook Pro上,SD卡插槽不再作为USB设备公开

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


这是有史以来最聪明的主意,谢谢!我什至还有一个USB读卡器,但是没有意识到我可以使用它。
marco.m

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设置”,选择“存储”,单击“ Controller:Sata”,单击“添加硬盘”图标,然后选择.vdk(在这种情况下为sd-card.vmdk)


3

我在使用JinnKo解决方案时遇到很多麻烦,主要是因为我在Mountain Lion(OS X 10.8)上工作。但是在他的友好帮助下,我解决了问题。

完整的解决方案在这里详细介绍

但是,对于Mountain Lion用户而言,我的解决方案的实质如下(使用JinnKo的上述步骤,但是运行“ VBoxManage internalcommands createrawvmdk [...]”命令之前,在此插入我的步骤(即,在步骤2和3):

**特别是对于Mtn Lion ** **确保您是此设备的所有者。在10.8 Mtn Lion上,您可能会发现自己不是。通过执行以下操作进行检查:

ls -l /dev/disk*

使用“ *”,您将看到所有磁盘设备,也可以执行以下操作:ls -l / dev / diskX仅显示“ X”,例如,我这样做了:

ls -l /dev/disk5

在Mtn Lion(10.8.x)上,您将看到类似以下内容:

brw-r----- 1 root operator 1, <today's date/time> /dev/diskX

其中'X'是您的设备编号,例如/ dev / disk5中的'5'...

在Lion(10.7.x),Snow Leopard(10.6.x)或OS X的早期版本上,如果用户名“ brad”,您可能会看到类似以下内容的信息:

brw-r----- 1 brad operator 1, <today's date/time> /dev/diskX

其中“ X”是您的设备号,例如/ dev / disk5中的“ 5” ...如果您是所有者,那么一切都很好,在这里无所事事,请转到下一步,即createrawvmdk步骤(在@JinnKo的上述出色说明中)。

如果您不是所有者(但“ root”或其他用户是所有者),则(a)以该管理员用户身份登录或(b)执行以下操作(同样,请确保您使用的设备号/字母正确)这里!):

*注意*以下是只对那些谁想要冒险永久他们的硬盘驱动器或闪存存储驱动器上破坏数据。DO NOT做,如果你不知道你知道你在做什么:

sudo chown <your username> /dev/disk5
sudo chown <your username> /dev/disk5s1

*注意* DO NOT做,如果你不知道你知道自己在做什么。上面的内容仅适用于那些想要永久损坏其硬盘驱动器或闪存驱动器上的数据的风​​险。

您将需要对所有切片(s1,s2,s3等)进行此操作。例如,我的用户名是“ brad”,所以我做了:sudo chown brad /dev/disk5,然后sudo chown brad /dev/disk5s1,然后是s2s3(因为我已经有3个现有分区或片)。

如果您尚未对SD卡进行分区,则可能只需要执行sudo chown <your username> /dev/diskX一次(无需执行任何切片/分区)

希望这可以帮助其他一些贫穷的Mtn Lion用户!


优秀的解决方案。没有这篇文章,我会迷路的。非常感谢你!
ggutenberg

1

到目前为止,即使使用USB读卡器,我也没有找到直接执行此操作的方法(它将卡放到/dev/dm-1了预期的位置,而不是在上面/dev/mmcblk1)。

我的工作是在VirtualBox中创建一个4 GB的虚拟驱动器。然后,/dev/sdb可以按照记录进行BeagleBoard Ubuntu的安装。

然后关闭虚拟机,将其转换为RAW DD文件,并使用DD将其放在卡上:(在主机Mac上):

VBoxManage clonehd UbuntuBeagleImage.vdi UbuntuBeagleImage.dd --format RAW
sudo dd if=UbuntuBeagleImage.dd of=/dev/rdisk(NUMBER) bs=1m

/dev/disk2以我为例,但请三重检查,以免出错可能会使您的硬盘驱动器崩溃)。

dd命令花费了大约1小时20分钟!

我希望这有帮助。我仍在努力寻求一种更简便,更快捷的方法-我们不需要为600 MB的操作系统传输4 GB的数据。


0

对我来说,解决办法是开启USB设备与SD卡,使用
Devices -> USB devices ->My card reader
和几秒钟后,新磁盘出现在我的VM。

在此之前,我已经安装了VirtualBox Extensions Pack。


0

我安装了“ Virtual Box Guest Additons CD”文件,但我的SD卡读卡器未显示在Windows XP虚拟机中。通过在Virtual Box中启用 USB设备,然后重新启动虚拟机,可以使我的工作正常。


0

正如kobaltz提到的。要支持USB 2.0和3.0版本,您需要安装Virtual Extension Pack,我安装了5.2.22 Oracle VM VirtualBox Extension Pack,您可以从Virtual Box下载页面下载它。下载文件后,您可以直接继续安装它,该文件将被添加到Virtual Box扩展中。

在此处输入图片说明

您还应该将SD卡添加到“虚拟盒子”中的设备过滤器中,请转至“设置”->“ USB”->“添加附加的SD卡”选项。

在此处输入图片说明

现在,您将可以在过滤器中找到SD卡。

在此处输入图片说明

转到“文件”,然后查看SD卡文件夹(我使用Ubuntu Linux Distribution)

在此处输入图片说明


0

对于使用macOS并遵循先前答案的任何人,如果由于权限问题您仍然无法访问sd卡,

使用sudo运行virtualbox将解决该问题。

sudo VirtualBox

请注意,vm文件的路径不同,在我的情况下,它是:

/private/var/root/VirtualBox\ VMs/$VM_NAME/

如果仍然无法使用,请将SD卡磁盘的所有者和访问权限分别更改为您的用户帐户和666。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.