如何从虚拟机访问SD卡?
我想从我的Linux虚拟机中格式化一张SD卡。我的笔记本上有一个内置的SD卡阅读器。我试着使用VirtualBox和VMware Player并安装了Ubuntu 10.04 guest。它们都没有将SD卡阅读器显示为一个设备。我可以从Windows主机访问SD卡。
我对使用共享文件夹的解决方案不感兴趣,因为我想把SD卡作为硬件访问(它应该显示在/dev
中)。
我基本上是想为BeagleBoard设置SD卡,但我不想在我的PC上安装一个物理Ubuntu。
我想从我的Linux虚拟机中格式化一张SD卡。我的笔记本上有一个内置的SD卡阅读器。我试着使用VirtualBox和VMware Player并安装了Ubuntu 10.04 guest。它们都没有将SD卡阅读器显示为一个设备。我可以从Windows主机访问SD卡。
我对使用共享文件夹的解决方案不感兴趣,因为我想把SD卡作为硬件访问(它应该显示在/dev
中)。
我基本上是想为BeagleBoard设置SD卡,但我不想在我的PC上安装一个物理Ubuntu。
在较新的MacBook Pro上,SD卡插槽不再作为USB设备暴露。正因为如此,您需要将原始设备连接到虚拟机,以便获得对整个卡的原始访问。完整的文档在VirtualBox文档的 Advanced Storage Configuration 部分。
正如文档中明确说明的那样。
警告 - 原始硬盘访问仅适用于专家用户。不正确的使用或使用过时的配置会导致物理磁盘上的数据完全丢失。最重要的是,不要试图在客人中用当前运行的主机操作系统启动分区。这将导致严重的数据损坏。
作为一个快速指南,以下是将设备连接到linux虚拟机的步骤:
1.识别主机系统上的原始磁盘块设备
现在我们在终端中使用以下命令设置VirtualBox意识到原始设备。
接下来我们在VirtualBox用户界面内将原始磁盘附加到一个客人虚拟机上
启动虚拟机
根据你是否有GUI,SD卡可能会也可能不会自动挂载。
似乎有些人在访问步骤 3.2 或 4.6 中的原始设备时可能会遇到麻烦。尝试用sudo运行一些命令不会有任何帮助,因为VirtualBox将以你的登录用户身份运行,仍然无法正确访问原始设备或生成的vmdk文件。
下面的步骤应该会有帮助,虽然我还没有测试过。
1.检查你在OSX上使用的账户是否在系统首选项/用户部分有管理权限。很有可能它也应该是系统上的主要账户,以便原始设备访问工作。 2. 检查原始磁盘权限
原来OSX Mountain Lion以 "root:operator "权限和0640权限创建了设备。不幸的是,现在唯一能获得这个设备访问权限的方法是每次插入设备时,将其 "sudo chown $USER "给你的当前用户,然而这并不推荐,除非你真的了解你在做什么。希望苹果或VirtualBox能找到更合适的解决方案。
Windows用户的回答
1.获取你的SD卡阅读器的设备ID。
创建SD卡的链接文件
按照JinnKo答案中的4-6步进行操作,唯一的小调整是你需要以管理员身份启动VirtualBox
- 接下来我们在VirtualBox用户界面内将原始磁盘连接到客人虚拟机上 1。确保客体虚拟机已关闭电源。
- 确保 VirtualBox 没有运行
- 通过右键单击 VirtualBox 并选择 “以管理员身份运行 "来启动 VirtualBox
- 打开客户虚拟机的设置区域
- 单击工具栏中的 "存储 ”
- 在控制器旁边点击 “添加硬盘 "图标 7.选择 "选择现有磁盘”
- 導覽到您在步驟 3 中使用的
/path/to/file.vmdk
,並選擇它- 现在您应该回到 “存储 "选项卡,并在列表中看到您的
file.vmdk
。- 启动虚拟机
- 根据您是否有 GUI,SD 卡可能会也可能不会自动挂载。如果你需要手动挂载,它只是作为另一个标准块设备暴露出来,所以在我的客人上,它被暴露为/dev/sdb。
我使用的是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
现在进入虚拟机设置,选择 “存储",点击 "控制器:Sata",点击 "添加硬盘 "图标,选择你的.vdk(本例中为sd-card.vmdk)。
我有很多麻烦,让JinnKo的解决方案工作,主要是由于我在山狮(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上面的伟大说明中)。 如果你不确定自己在做什么,请不要这样做。 以上只针对那些想冒着风险永久破坏硬盘或闪存驱动器上的数据的人。
你需要为你所有的片子(s1,s2,s3,……无论有多少片子)做这件事。例如,我的用户名是'brad',所以我做了。sudo chown brad /dev/disk5
,然后是sudo chown brad /dev/disk5s1
,然后是s2
,然后是s3
(因为我已经有了3个现有的分区或切片):
如果你还没有对SD卡进行分区,那么你可能只需要做一次sudo chown <your username> /dev/diskX
(不需要做任何切片/分区)
希望这能帮助其他一些可怜的Mtn Lion用户!
到目前为止,我还没有找到直接做这件事的方法,即使是用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的OS而需要传输4 GB的数据。
正如kobaltz提到的。要支持USB2.0和3.0版本,你需要安装虚拟扩展包,我安装的是5.2.22 Oracle虚拟机VirtualBox扩展包,你可以从Virtual Box下载页面下载。下载好文件后,可以直接进行安装,同样会添加到你的Virtual Box扩展包中。
您还应该将您的SD卡添加到我们虚拟盒的设备过滤器中,请进入设置-/> USB-/> 点击添加SD卡附件选项。
现在您将可以在过滤器中找到您的SD卡。
转到文件,看到SD卡文件夹(我使用Ubuntu Linux发行版)
用macos的朋友,按照前面的回答,如果还是因为权限问题无法访问sd卡,
用sudo运行virtualbox就可以解决。
sudo VirtualBox
注意到vm文件的路径不一样,我的情况是这样的。
/private/var/root/VirtualBox\ VMs/$VM_NAME/
如果还是不行的话 把SD卡的所有者和访问权限分别改成你的用户账号和666账号