我想从我的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。
Answers:
在较新的MacBook Pro上,SD卡插槽不再作为USB设备公开。因此,您需要将原始设备连接到VM,以获得对整个卡的原始访问权限。完整的文档位于VirtualBox文档的“ 高级存储配置”部分。
正如文档中明确指出的:
警告 -原始硬盘访问仅适用于专家用户。错误使用或使用过时的配置可能导致物理磁盘上的数据完全丢失。最重要的是,请勿尝试使用来宾中当前正在运行的主机操作系统来引导分区。这将导致严重的数据损坏。
作为快速指南,以下是将设备连接到linux VM的步骤:
识别主机系统上的原始磁盘块设备
打开一个终端并输入“ 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)`
在我的情况下,“ NO NAME”卷是SD卡,因此我要注意这一/dev/disk2s1
部分。在此特定情况下,该s1
部分表示原始设备上的分区(切片),因此我们稍后将使用的/dev/disk2
部分仅是该部分。
现在,我们在终端中使用以下命令设置VirtualBox以了解原始设备。
/path/to/file.vmdk
,尽管可以将其存储在来宾VM文件夹中(例如,~/VirtualBox VMs/guest-vm/sdcard.vmdk
请注意,-rawdisk
我们使用的不是分区(片),而是整个块设备。
$ VBoxManage internalcommands createrawvmdk -filename /path/to/file.vmdk -rawdisk /dev/disk2
接下来,我们将原始磁盘附加到VirtualBox UI中的来宾VM
/path/to/file.vmdk
您在步骤3中使用的,然后选择它file.vmdk
在列表中看到您的名称。似乎有些人可能无法在步骤3.2或4.6中访问原始设备。尝试使用sudo运行某些命令将无济于事,因为VirtualBox将以您登录的用户身份运行,并且仍然无法正确访问原始设备或生成的vmdk文件。
以下步骤应该会有所帮助,尽管我尚未对其进行测试。
检查原始磁盘权限
$ 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)。除非您完全知道自己在做什么,否则请勿更改设备上的权限。
结果OSX Mountain Lion创建了具有“ root:operator”特权和0640权限的设备。不幸的是,目前唯一获得此设备访问权限的方法是每次插入设备时都将其“ sudo chown $ USER”发送给当前用户,但是不建议您这样做,除非您真正了解自己在做什么。希望Apple或VirtualBox都能找到更合适的解决方案。
$ 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
sudo diskutil unmountDisk /dev/<disk path>
Windows用户的答案
获取您的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
创建指向SD卡的链接文件
以管理员身份打开命令窗口
"C:\Program Files\Oracle\VirtualBox\VBoxManage" internalcommands createrawvmdk -filename "%USERPROFILE%/Desktop/sdcard.vmdk" -rawdisk "\\.\PHYSICALDRIVE1"
这假定默认的安装路径-如果需要,请更改它。(确保引号在rawdisk参数周围。)
.vmdk文件是指向SD卡的链接,您可以将其放在主机系统上的任何位置,但是此命令只是为了方便起见将其放在桌面上。
按照JinnKo的答案中的步骤4-6,唯一的次要调整是您需要以管理员身份启动VirtualBox。
- 接下来,我们将原始磁盘附加到VirtualBox UI中的来宾VM
- 确保访客虚拟机已关闭电源。
- 确保VirtualBox没有运行
- 右键单击VirtualBox并选择“以管理员身份运行”,启动VirtualBox。
- 打开来宾VM的设置区域
- 点击工具栏中的“存储”
- 在控制器旁边,单击“添加硬盘”图标
- 选择“选择现有磁盘”
- 导航到
/path/to/file.vmdk
您在步骤3中使用的,然后选择它- 现在,您应该返回到“存储”选项卡,并
file.vmdk
在列表中看到您的名称。- 启动虚拟机
- 取决于您是否具有GUI,SD卡是否可以自动安装。如果需要手动挂载,则将其公开为另一个标准块设备,因此在我的来宾上,该公开为/ dev / sdb。
cygwin
监视转义字符来获取此信息。我没有得到正确的cygwin
解决方案,但注意到在其中运行的命令cmd
无效cygwin
。
如果您的SD读取器正在使用USB控制器,则很可能会丢失扩展名。
在“文件”>“首选项”下,遵循图片。添加并指向下载的扩展名。
重新启动虚拟机,您应该可以访问USB设备。
我正在使用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)
我在使用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
,然后是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的操作系统传输4 GB的数据。
正如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)