挂载VirtualBox驱动器映像(vdi)?


88

是否可以安装VirtualBox驱动器映像(.vdi),以便可以在Nautilus等中查看内容?

我有一个Windows 2000 .vdi,它从VirtualBox 2.x升级到3.1.6后无法启动(“无法访问的启动设备”)。我相信IDE驱动器的详细信息已经更改,我需要做的就是访问内部驱动器映像并编辑Windows boot.ini以指向新位置。


1
如果您的.vdi和.img文件包含的分区超过1个,这将非常有用:
Browse

Answers:


55

您可以将其转换为标准映像,然后将其装入。

VBoxManage clonehd --format RAW ubuntu.vdi ubuntu.img

然后

mount -t ext3 -o loop,rw ./ubuntu.img /mnt

ext3在这种情况下,您需要知道文件系统的类型。挂载后,进入并使用您选择的编辑器进行编辑。不要将/mnt位置内部的文件与正在运行的主机混淆,否则会很糟糕。

要检查有关VDI文件的详细信息,请运行:VBoxManage showhdinfo ubuntu.vdi

来源:[已解决]用存档管理器打开.vdi吗?-ubuntuforums.org


4
在这种情况下特别有用。OP将能够处理副本并将原件作为备份。
哈维尔·里维拉

7
小心使用动态大小的.vdi文件。转换为.img将迫使映像文件与磁盘的逻辑大小一样大,这就是这种方法起作用的原因,但是它可能比.vdi文件大得多。VBoxManage showhdinfo [your vdi file]如果不确定,请看一下输出。
杰克·奥康纳

1
-1,stwisselMaxime R.的答案提供了解决方案-这是一个合理的解决方法,但不是对该问题的最佳答案
STW 2015年

3
如果映像具有分区表(与大多数驱动器一样),则您需要将此答案与答案结合起来以安装各个分区。
贝恩2015年

1
不起作用 不断收到错误的fs类型安装错误。我尝试了ext3和ext2和ext4。虚拟盒子说hd fs类型是ext4。
约书亚·罗宾逊

86

使用时qemu-nbd,该过程将在serverfault此博客中进行说明

基本上,qemu如果需要,您将必须安装:

sudo apt-get install qemu

然后,您需要加载网络模块设备模块:

sudo rmmod nbd
sudo modprobe nbd max_part=16

将.vdi映像附加到刚创建的nbd之一:

sudo qemu-nbd -c /dev/nbd0 drive.vdi

现在,您将获得一个/ dev / nbd0块设备,以及几个/ dev / nbd0p *分区设备节点。

sudo mount /dev/nbd0p1 /mnt

完成后,卸载所有东西并断开设备连接:

sudo qemu-nbd -d /dev/nbd0

我想指出,这max_part=16似乎是至关重要的部分。没有它/dev/nbd0pX,尽管主设备可以正常工作,您也看不到任何文件。查看Gentoo论坛上的以下讨论,看看人们遇到了这个麻烦。
firegurafiku

所有答案在某种程度上都有效,但这是我的最爱,应该被接受。clonehd可以完成工作,但存储需求增加了一倍。virtualbox-fuse是理想的选择,但是尽管您仍然可以得到它,但它并没有成为现代OS版本中的仓库。
Hatoru Hansou 2015年

2
这很棒。请注意,安装qemu-kvm而不是安装qemu可能同样有效。它在我的Ububtu 16.04上为我完成了安装,仅安装23MB和13个依赖项,而不是230MB以及完整的qemu安装的更多依赖项。
mivk

2
我想补充一点,显然sudo partprobe需要使用较新的内核来执行,以便/dev/nbd0p*在Debian / Ubuntu中创建(bugs.debian.org/cgi-bin/bugreport.cgi?bug=824553)。

1
这应该是公认的答案!!我的vdi太大,无法转换为硬盘上的.iso。经过一段时间的努力,我向下滚动以查看是否有其他方法直接使用了vdi。这很简单。(注意:qemu对于那些关心硬盘填充的人来说大约需要300MB。)
psitae,

35

看起来vdfuse是您要寻找的工具。它在Ubuntu存储库中。如果您想自己编译(2010年资料),也可以这样做

但是对于我们大多数人来说,它可以归结为一个简单的例子:

sudo apt-get install virtualbox-fuse

似乎它现在也支持动态vdi。

并使用以下命令将.vdi文件挂载到/mntdir中:

sudo vdfuse -a -f /path-to-vdi-file /mnt

整个磁盘将安装有partitions Partition1Partition2命名格式。然后可以循环安装这些文件。例如,

sudo mount -o loop /mnt/Parition1 /mountpoint

1
@mattwilkie:现在的区别:不再需要手动编译
stwissel 2012年

1
别客气。坐在适当的屏幕/键盘上而不是啄在玻璃上就可以了:-)
stwissel 2012年

5
在14.04中不可用。
int_ua 2014年

2
人们可以从这里下载:sourceforge.net/projects/vdfuse/?source=typ_redirect和它的作品(在15.04)

4
不再对16.10有效,软件包不再存在。
Piskvor '16

14

将磁盘设置为另一个虚拟OS的辅助主磁盘,然后启动到该(虚拟)OS,然后就可以挂载它。

步骤1:假设您已经在Virtual(虚拟)框中安装了虚拟操作系统(例如Ubuntu 16.04),请从该虚拟OS的设置中添加新的存储。 在此处输入图片说明

第2步:浏览要访问的Vdi文件并选择它。

步骤3:登录虚拟操作系统。

步骤4:虚拟磁盘可能会在OS内部可用。如果不是,请按照步骤5进行操作

步骤5:在虚拟操作系统中,使用Gparted并检查磁盘。并确保磁盘是虚拟OS可以访问的类型。如果不是,则可能必须编辑磁盘,但是这样会丢失现有内容。


1
根据记录,2016年将无法使用
Paulo Pedroso

1
它在Ubuntu 16.04中工作。
沙伦(Sharun)2013年

当您需要进行更改然后重新使用它,而rw无法与vdfuse一起工作时,这确实是唯一的解决方案
DuBistKomisch

7

我还没有进行自我测试,但是有一个保险丝模块可以安装它们(vdfuse),请检查以下页面:

请注意,使用它进行写访问是有风险的。


用法:

$ ./vdfuse-v<version> -h
USAGE: ./vdfuse [options] -f image-file mountpoint
   -h   help
   -r   readonly
   -t   specify type (VDI, VMDK, VHD, or raw; default: auto)
   -f   VDimage file
   -a   allow all users to read disk
   -w   allow all users to read and write to disk
   -g   run in foreground
   -v   verbose
   -d   debug

要使用文件名直接挂载映像:

$ ./vdfuse-v<version> -f image.vdi /mnt/vdi
$ mount -o loop /mnt/vdi/Partition1 /mnt/WindowsXP

挂载机器磁盘(包括快照):

$ ./vdautomount-<version> -p /path/to/vdfuse WinXP /mnt/vdi
$ mount -o loop /mnt/vdi/Partition1 /mnt/WindowsXP

不再相关,因为不支持此实用程序。
埃文·卡罗尔

3

不是您要求的,但是如果只是从vdi获取文件的问题,而您想要一个非常快速的解决方案

  1. 在主机上运行SSH服务器(apt-get install openssh-server && service ssh restart
  2. 使用VirtualBox从现有的vdi文件构建虚拟机,然后启动该虚拟机。(在构建虚拟机时,我只是保留了默认的网络适配器(NAT)。)
  3. 在虚拟机中,sftp到您的主机。(sftp hostuser@hostip
  4. 在sftp会话中,put根据需要将许多文件发送到主机。

1
丑陋的骇客,但如果您处在一个紧要关头,它就可以完成工作。
Piskvor '16

一个问题可能是计算机当前无法正确启动,因此您需要首先解决该问题,这意味着您无法从内部进行修复。还可以在您的virtualbox操作系统上使用SSH来复制文件。比尝试共享磁盘要快得多。
Alexis Wilke

2

正如Vojtech Trefny所述,

1)首先转换您的VDI-> IMG

VBoxManage clonehd --format RAW ubuntu.vdi ubuntu.img

2)然后安装IMG

mount -t ext3 -o loop,rw ./ubuntu.img /mnt

3)但是,当我收到此错误消息时:

mount: wrong fs type, bad option, bad superblock on /dev/loop0,
       missing codepage or helper program, or other error
       In some cases useful info is found in syslog - try
       dmesg | tail  or so

dmesg说:

[3105578.013671] EXT4-fs (loop0): VFS: Can't find ext3 filesystem

您需要检查.img的分区结构:

fdisk -l ubuntu.img

Disk ubuntu.img: 21.0 GB, 20971520000 bytes
255 heads, 63 sectors/track, 2549 cylinders, total 40960000 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0xf45bc910

   Device Boot      Start         End      Blocks   Id  System
ubuntu.img1   *        2048    12582911     6290432   83  Linux
ubuntu.img2        12584958    16775167     2095105    5  Extended
ubuntu.img3        16775168    40959999    12092416   83  Linux
ubuntu.img5        12584960    16775167     2095104   82  Linux swap / Solaris

4)如您所见,主分区从字节16775168开始。但是,请注意扇区大小为512字节,因此您需要将结果乘以16775168 x 512 = 8588886016,因此需要像这样偏移安装:

mount -t ext3 -o loop,rw,offset=8588886016 ./ubuntu.img /mnt

5)实际上,如果文件系统在调整大小后变脏,这对我不起作用。在这种情况下,我进一步这样做:

dd if=ubuntu.img of=ubuntu.disk bs=512 skip=16775168 count=12092416
e2fsck ubuntu.disk
mount ubuntu.disk /mnt

1
这不是问题的答案。您还有另一个问题-图像损坏。您应该已经回答了一个新问题。
埃文·卡罗尔

这扩展到涵盖错误情况的先前答案。损坏的图像是一种用例。+1获得许多新花样。
FractalSpace
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.