วิธีการติดตั้งฮาร์ดดิสก์เสมือน


23

เป็นไปได้หรือไม่ที่จะติดตั้งฮาร์ดดิสก์เสมือน (VHD, HDD, VDI, VMDK) บน Ubuntu? สิ่งนี้สามารถทำได้?


1
คุณค้นหา Google แล้วหรือยัง มันเต็มไปด้วยคำแนะนำเกี่ยวกับการติดตั้งVMDK, VDI, VHD และไฟล์ภาพดิสก์ดิบบน Ubuntu
SirCharlo

2
ฉันค้นหา google แต่ฉันไม่พบเช่นผลลัพธ์ของคุณ ขอบคุณ :)
Snow Leopard

ลิงก์ Ubuntugeek สำหรับ VHD ด้านบนล้มเหลว
K7AAY

คำตอบ:


16

ตามบทความนี้ :

Linux และโฮสต์ที่มีลักษณะคล้าย Unix อื่น ๆ สามารถเมานต์รูปภาพที่สร้างขึ้นด้วยประเภทรูปแบบ raw โดยใช้อุปกรณ์ลูปแบ็ค จากการล็อกอินรูท (หรือใช้ sudo) ให้ติดลูปแบ็คด้วยออฟเซ็ต 32,256

mount -o loop,offset=32256 /path/to/image.img /mnt/mountpoint

สำหรับอิมเมจ qemu ประเภทอื่นคุณสามารถใช้ qemu-nbd

modprobe nbd max_part=16
qemu-nbd -c /dev/nbd0 image.qcow2
partprobe /dev/nbd0
mount /dev/nbd0p1 /mnt/image

นอกจากนี้โดยทั่วไปคุณสามารถแปลงรูปภาพจากรูปแบบหนึ่งเป็นอีกรูปแบบหนึ่งได้

raw - (default) the raw format is a plain binary image of the disc 
       image, and is very portable. 
       On filesystems that support sparse files, 
       images in this format only use the 
       space actually used by the data recorded in them.
cloop -     Compressed Loop format, mainly used for reading Knoppix 
       and similar live CD image formats
cow - copy-on-write format, supported for historical reasons only and
       not available to QEMU on Windows
qcow - the old QEMU copy-on-write format, supported for 
       historical reasons and superseded by qcow2
qcow2 - QEMU copy-on-write format with a range of special features, 
       including the ability to take multiple snapshots, smaller 
       images on filesystems that don't support sparse files, 
       optional AES encryption, and optional zlib compression
vmdk - VMware 3 & 4, or 6 image format, for exchanging images 
       with that product
vdi - VirtualBox 1.1 compatible image format, for exchanging 
       images with VirtualBox.

ลองไปที่ google ฉันพบโซลูชันสำหรับ (VirtualBox) .VDI ในหนึ่งวินาที :

modprobe nbd max_part=16
qemu-nbd -c /dev/nbd0 /path/to/some.vdi
mount -o loop /dev/nbd0p1 /mnt
# do stuff
umount /mnt
qemu-nbd -d /dev/nbd0
rmmod nbd

เหมือนกับคำสั่ง "ทางของ Qemu" ไม่มีพรมแดน!


6

นี้คือบนUbuntu 16.04

ในฐานะที่เป็นราก:

ติดตั้งและเมานต์โดยใช้ affuse

apt-get install afflib-tools

affuse /path/file.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

เมานต์โดยใช้ offset

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

ตอนนี้ควรติดตั้งดิสก์และสามารถอ่านได้บน / mnt / vmdisk


1
ดี !!! ทำเพื่อฉันใน Ubuntu 17.10
cljk

นี้จะไม่ทำงานสำหรับฉันใน 16.04.5 สำหรับ .vmdk ของฉัน ... ทำงานผ่านขั้นตอน fdisk และพาร์ทิชันหลักของ VM ของฉันคนหนึ่งที่ฉันต้องการที่จะติดยังเริ่มต้นที่ 2048 แต่ล้มเหลวด้วยmount -o ro,loop,offset=1048576 ./foo.raw /mnt/foo only root can use "--options" optionด้วยมันล้มเหลวด้วยsudo failed to setup loop device: Permission denied
Theodore Murdock

3

คุณยังสามารถใช้ 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บางครั้งให้ 'เมาน: อุปกรณ์พิเศษ / dev / nbd0p1 ไม่มีอยู่'

สำหรับ. Nova

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

ด้านบนจะแยก.vmdkดิสก์แล้วติดตั้ง


2

สำหรับvmdkและvhdไฟล์ฉันโชคดีที่มีkpartxคำสั่งด้านล่าง:

sudo kpartx -a -v <image-flat.vmdk>

ตรวจสอบการส่งออกสำหรับlosetupมันควรจะมีอุปกรณ์ห่วง/dev/loop0; ตรวจสอบsudo blkidพาร์ติชัน/dev/mapper/loop0p1แล้วใช้ในคำสั่ง mount:

sudo mount -o rw /dev/mapper/loop0p1 /mnt/vmdk

โดยที่ / mnt / vmdk เป็นจุดเชื่อมต่อของคุณที่จะสร้างด้วยsudo mkdir /mnt/vmdkหากไม่มีอยู่จริง

source ที่ commandlinefu.com (คำสั่ง kpartx และ mount)

ถอนติดตั้งด้วย:

sudo umount /mnt/vmdk
sudo kpartx -d -v <image-flat.vmdk>

เพิ่งทดสอบวิธีนี้กับvhdมันใช้งานได้!
N0rbert
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.