簡體   English   中英

掛載 VMDK 磁盤映像

[英]Mounting VMDK disk image

我有一個帶有 vmdk 擴展名的 vmware 磁盤映像文件

我正在嘗試安裝它並探索所有分區(包括隱藏的分區)。

我嘗試遵循幾個指南,例如: http : //forums.opensuse.org/showthread.php/469942-mounting-virtual-box-machine-images-host

我可以使用 vdfuse 掛載圖像

vdfuse -w -f windows.vmdk /mnt/

在此之后,我可以看到一個分區和整個磁盤暴露

# ll /mnt/
total 41942016
-r-------- 1 te users 21474836480 Feb 28 14:16 EntireDisk
-r-------- 1 te users  1569718272 Feb 28 14:16 Partition1

繼續本指南,我嘗試使用以下命令安裝 EntireDisk 或 Partition1

mount -o loop,ro /mnt/Partition1 mnt2/

但這給了我錯誤“掛載:您必須指定文件系統類型”

在嘗試找到正確的類型時,我嘗試過

dd if=/mnt/EntireDisk | file -
which outputs a ton of information but of note is:
/dev/stdin: x86 boot sector; partition 1: ....... FATs ....

所以我厭倦了作為 vfat 掛載,但這給了我

mount: wrong fs type, bad option, bad superblock ...etc

我究竟做錯了什么?

對於較新的 Linux 系統,您可以使用guestmount掛載 VMDK 映像中的第三個分區:

guestmount -a xyz.vmdk -m /dev/sda3 --ro /mnt/vmdk

或者,要自動檢測和安裝映像(不太可靠),您可以嘗試:

guestmount -a xyz.vmdk -i --ro /mnt/vmdk

請注意,標志--ro只是將圖像掛載為只讀; 要將圖像掛載為讀寫,只需將其替換為標志--rw

安裝

guestmount包含在每個發行版的以下軟件包中:

  • Ubuntu: libguestfs-tools
  • OpenSuse: guestfs-tools
  • CentOS / Fedora: libguestfs-tools-c

故障排除

error: could not create appliance through libvirt

$ guestmount -a file.vmdk -i --ro /mnt/guest
libguestfs: error: could not create appliance through libvirt.

Try running qemu directly without libvirt using this environment variable:
export LIBGUESTFS_BACKEND=direct

Original error from libvirt: Cannot access backing file '/path/to/file.vmdk' of storage file '/tmp/libguestfssF6WKX/overlay1.qcow2' (as uid:107, gid:107): Permission denied [code=38 int1=13]

解決方案:按照建議使用LIBGUESTFS_BACKEND=direct

LIBGUESTFS_BACKEND=direct guestmount -a file.vmdk -i --ro /mnt/guest

fusermount: user has no write access to mountpoint

LIBGUESTFS_BACKEND=direct guestmount -a file.vmdk -i --ro /mnt/guest/
fusermount: user has no write access to mountpoint /mnt/guest
libguestfs: error: fuse_mount failed: /mnt/guest/, see error messages above

解決方案:使用sudo ,或更改掛載點上的文件權限

你也可以使用 qemu:

對於.vdi磁盤

sudo modprobe nbd
sudo qemu-nbd -c /dev/nbd1 ./linux_box/VM/image.vdi

如果未安裝,您可以安裝它們(在 Ubuntu 中發出此命令)

sudo apt install qemu-utils

然后安裝它:

mount /dev/nbd1p1 /mnt

對於.vmdk磁盤

sudo modprobe nbd
sudo qemu-nbd -r -c /dev/nbd1 ./linux_box/VM/image.vmdk

請注意,我使用了選項-r ,這是因為必須只讀 VMDK 版本 3 才能被qemu 掛載

然后我安裝它

mount /dev/nbd1p1 /mnt

我使用nbd1 ,因為nbd0有時會給出:'mount:特殊設備 /dev/nbd0p1 不存在'

對於.ova磁盤

tar -tf image.ova
tar -xvf image.ova

以上將提取.vmdk磁盤,然后掛載它。

安裝affuse,然后使用它安裝。

affuse /path/file.vmdk /mnt/vmdk

現在可以在/mnt/vmdk下找到原始磁盤映像。 檢查其扇區大小:

fdisk -l /mnt/vmdk/file.vmdk.raw

# example

Disk file.vmdk.raw: 20 GiB, 21474836480 bytes, 41943040 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
Disklabel type: dos
Disk identifier: 0x000da525

Device       Boot Start      End  Sectors Size Id Type
/mnt/vmdk/file.vmdk.raw1 *     2048 41943039 41940992  20G 83 Linux

將扇區大小和起始扇區相乘。 在示例中,它將是 2048*512:

echo '2048*512' | bc
1048576

使用該偏移量掛載原始文件:

mount -o ro,loop,offset=1048576 /mnt/vmdk/file.raw /mnt/vmdisk

現在應該在/mnt/vmdisk上掛載和讀取/mnt/vmdisk

這是commandlinefu.com對我有用的答案:

kpartx -av <image-flat.vmdk>; mount -o /dev/mapper/loop0p1 /mnt/vmdk

您還可以通過運行來激活映像中的 LVM 卷

vgchange -a y

然后您可以將 LV 掛載到映像中。

要卸載映像,請卸載分區/LV,停用映像的 VG

vgchange -a n <volume_group>

然后運行

kpartx -dv <image-flad.vmdk>

刪除分區映射。

您可以在本文中查看 VMware 虛擬磁盤開發工具包 (VDDK) 的下載鏈接。 下載並安裝后:

vmware-mount -p path_to_vmdk將顯示 VMDK 文件中的分區。 例如:

Nr      Start       Size Type Id Sytem                   
-- ---------- ---------- ---- -- ------------------------
 1       2048  461371392 BIOS 83 Linux

然后就這樣做:

sudo vmware-mount path_to_vmdk 1 /mnt/mount_point

我試過guestmount ,但它非常非常慢。 在它下面創建一個虛擬機,使用 KVM 等等。 瘋狂的東西,慢得像地獄。

你有ntfs的軟件包嗎?

嘗試

apt-get install ntfs-3g

在基於 debian 的系統上。

不允許對@Thomas 帖子發表評論(38 個贊成票的答案)我會通知下一個可能在使用 qemu-img 時遇到由 guestmount 生成的以下錯誤代碼的人如何解決問題。

ERROR:  qemu-img: '' uses a vmdk feature which is not supported by this qemu version: VMDK version 

嘗試使用 vmdkmount 生成 .vmdk 的原始版本

# vmdkmount {file}.vmdk  /ur/mount/path

在掛載的目錄中有一個 vmdk1 文件(你的原始文件)

現在嘗試使用 guestmount 加載 vmdk

# guestmount -a vmdk1 -i --ro /ur/mount/path

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM