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

mat*_*kie 106 virtualbox mount

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

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

Max*_* R. 121

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

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

sudo apt-get install qemu
Run Code Online (Sandbox Code Playgroud)

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

sudo rmmod nbd
sudo modprobe nbd max_part=16
Run Code Online (Sandbox Code Playgroud)

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

sudo qemu-nbd -c /dev/nbd0 drive.vdi
Run Code Online (Sandbox Code Playgroud)

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

sudo mount /dev/nbd0p1 /mnt
Run Code Online (Sandbox Code Playgroud)

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

sudo qemu-nbd -d /dev/nbd0
Run Code Online (Sandbox Code Playgroud)

  • 在 Debian buster amd64 上,我只安装了 ~qemu-utils~ 及其依赖项,总共只占用了几 MB 的磁盘空间,并且它起作用了:我成功挂载了 .vdi 并复制了一个文件。 (3认同)
  • 我想补充一点,显然 `sudo partprobe` 需要使用较新的内核执行,以便在 Debian/Ubuntu 中创建 `/dev/nbd0p*`(https://bugs.debian.org/cgi-bin/bugreport .cgi?bug=824553)。 (3认同)
  • 这应该是公认的答案!!我的 vdi 太大,无法在我的硬盘驱动器上转换为 .iso。折腾了一会,我往下滚动,看看有没有其他方法直接使用vdi。这个很简单。(注意:qemu 大约需要 300MB 对于我们这些关心我们的硬盘驱动器填满的人。) (3认同)
  • 我想指出的是,“max_part=16”似乎是一个关键部分。如果没有它,尽管主设备可以正常工作,但您将看不到任何“/dev/nbd0pX”文件。查看 [Gentoo 论坛](https://forums.gentoo.org/viewtopic-t-822672-start-0.html) 上的以下讨论,看看有人遇到过这个问题。 (2认同)
  • 这很好用。请注意,安装 `qemu-kvm` 而不是 `qemu` 也可以正常工作。它在我的 Ububtu 16.04 上为我做了,并且只安装了 23MB 和 13 个依赖项,而不是 230MB 和更多的完整 qemu 安装依赖项。 (2认同)

Voj*_*fny 63

您可以转换为标准映像,然后安装它。

VBoxManage clonehd --format RAW ubuntu.vdi ubuntu.img
Run Code Online (Sandbox Code Playgroud)

然后

mount -t ext3 -o loop,rw ./ubuntu.img /mnt
Run Code Online (Sandbox Code Playgroud)

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

要检查你的VDI文件,运行的细节:VBoxManage showhdinfo ubuntu.vdi

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

  • 使用动态大小的 .vdi 文件小心执行此操作。转换为 .img 将强制图像文件与磁盘的逻辑大小一样大,这就是这种方法有效的原因,但它可能比 .vdi 文件大得多。如果您不确定,请查看“VBoxManage showhdinfo [您的 vdi 文件]”的输出。 (11认同)
  • 在这种情况下特别有用。OP 将能够处理保留原件作为备份的副本。 (4认同)
  • 如果图像有一个分区表(像大多数驱动器一样),那么你需要将此答案与 [this one](http://stackoverflow.com/questions/1419489/loopback-mounting-individual-partitions-from-within -a-file-that-c​​ontains-a-parti#9153530) 来挂载各个分区。 (4认同)
  • -1、[stwissel](http://askubuntu.com/a/132999/7264) 和 [Maxime R.](http://askubuntu.com/a/50290/7264) 的回答提供了解决方案——这个是一个公平的解决方法,但不是问题的最佳答案 (3认同)
  • 不起作用。不断收到错误的 fs 类型的安装错误。我试过 ext3 和 ext2 和 ext4 。虚拟框说 hd fs 类型是 ext4 。 (2认同)
  • 您可以将图像放在循环中:`losetup -P /dev/loopX ubuntu.img`(其中 X 是第一个未使用的循环设备的索引)然后是 `mount /dev/loopXpY /mnt`(其中 Y 是要挂载的分区)。 (2认同)

stw*_*sel 38

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

然而,对于我们大多数人来说,它归结为一个简单的:

sudo apt-get install virtualbox-fuse
Run Code Online (Sandbox Code Playgroud)

看来它现在也支持动态 vdi。

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

sudo vdfuse -a -f /path-to-vdi-file /mnt
Run Code Online (Sandbox Code Playgroud)

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

sudo mount -o loop /mnt/Parition1 /mountpoint
Run Code Online (Sandbox Code Playgroud)

  • 不再对 16.10 有效,包不再存在。 (6认同)
  • 它在 14.04 中不可用。 (5认同)
  • 不客气。坐在合适的屏幕/键盘前而不是啄玻璃,一切都变得不同了:-) (2认同)
  • 可以从这里下载它:http://sourceforge.net/projects/vdfuse/?source=typ_redirect 并且它可以工作(15.04) (2认同)

jos*_*sef 16

将磁盘设置为另一个虚拟操作系统的辅助主控,然后启动到这个(虚拟)操作系统,您可以挂载它。

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

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

第三步:登录虚拟操作系统。

第 4 步:虚拟磁盘可能在操作系统内可用。如果没有,请按照步骤 5

步骤 5:在虚拟操作系统中,使用 Gparted 并检查磁盘。并确保磁盘属于虚拟操作系统可访问的类型。如果不是,您可能需要编辑磁盘,但是您将丢失现有内容。


Ben*_*nny 9

VirtualBox使用vboximg-mount实用程序使磁盘映像可供主机使用:

开放式VDI

sudo mkdir -p /mnt/vdi/expanded
sudo vboximg-mount -i <path-to-vdi> -o allow_other /mnt/vdi/expanded
Run Code Online (Sandbox Code Playgroud)
输出示例
ls /mnt/vdi/expanded
<filename.vdi>  vhdd  vol0  vol1
Run Code Online (Sandbox Code Playgroud)

挂载磁盘

mkdir /mnt/vdi/vol1
sudo mount /mnt/vdi/expanded/vol1 /mnt/vdi/vol1
Run Code Online (Sandbox Code Playgroud)

卸载

cd /mnt                       # Optional (avoid mount: ... target is busy)
sudo umount /mnt/vdi/vol1     # Order importent
sudo umount /mnt/vdi/expanded
rm -rf /mnt/vdi               # Optional (clean-up resources)
Run Code Online (Sandbox Code Playgroud)


Joã*_*nto 8

我还没有测试过自己,但有一个保险丝模块来安装它们 ( 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
Run Code Online (Sandbox Code Playgroud)

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

$ ./vdfuse-v<version> -f image.vdi /mnt/vdi
$ mount -o loop /mnt/vdi/Partition1 /mnt/WindowsXP
Run Code Online (Sandbox Code Playgroud)

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

$ ./vdautomount-<version> -p /path/to/vdfuse WinXP /mnt/vdi
$ mount -o loop /mnt/vdi/Partition1 /mnt/WindowsXP
Run Code Online (Sandbox Code Playgroud)


小智 8

您可以使用vboximg-mountVirtualBox 命令行工具的一部分的程序。


PHZ*_*zon 7

正如 Vojtech Trefny 上面提到的,

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

VBoxManage clonehd --format RAW ubuntu.vdi ubuntu.img
Run Code Online (Sandbox Code Playgroud)

2)然后安装IMG

mount -t ext3 -o loop,rw ./ubuntu.img /mnt
Run Code Online (Sandbox Code Playgroud)

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

dmesg 说:

[3105578.013671] EXT4-fs (loop0): VFS: Can't find ext3 filesystem
Run Code Online (Sandbox Code Playgroud)

您需要检查.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
Run Code Online (Sandbox Code Playgroud)

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

mount -t ext3 -o loop,rw,offset=8588886016 ./ubuntu.img /mnt
Run Code Online (Sandbox Code Playgroud)

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

dd if=ubuntu.img of=ubuntu.disk bs=512 skip=16775168 count=12092416
e2fsck ubuntu.disk
mount ubuntu.disk /mnt
Run Code Online (Sandbox Code Playgroud)

  • 这扩展到之前涵盖错误情况的答案。损坏的图像是一种用例。对于许多新技巧+1。 (2认同)