เมานต์อิมเมจไดรฟ์ VirtualBox (vdi) หรือไม่


88

เป็นไปได้ไหมที่จะเมานต์อิมเมจไดรฟ์ VirtualBox (.vdi) เพื่อให้สามารถดูเนื้อหาใน Nautilus ฯลฯ ได้?

ฉันมี windows 2000 .vdi ซึ่งจะไม่บู๊ต ("อุปกรณ์บูตไม่สามารถเข้าถึง") หลังจากอัปเกรดจาก VirtualBox 2.x เป็น 3.1.6 ฉันเชื่อว่ารายละเอียดไดรฟ์ IDE มีการเปลี่ยนแปลงและสิ่งที่ฉันต้องทำคือการเข้าถึงภาพไดรฟ์ภายในและแก้ไข Windows boot.iniเพื่อชี้ไปที่ตำแหน่งใหม่


1
หากไฟล์. vdi และ. img ของคุณมีพาร์ติชั่นมากกว่า 1 พาร์ติชันสิ่งนี้จะเป็นประโยชน์อย่างมาก: เบรา
ว์เซอร์

คำตอบ:


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 จะสามารถทำงานกับสำเนาที่เก็บต้นฉบับไว้เป็นข้อมูลสำรองได้
Javier Rivera

7
ทำสิ่งนี้อย่างระมัดระวังด้วยไฟล์. vdi ที่มีขนาดแบบไดนามิก การแปลงเป็น. img จะบังคับให้ไฟล์อิมเมจมีขนาดใหญ่เท่ากับขนาดโลจิคัลของดิสก์ซึ่งเป็นสาเหตุที่วิธีการนี้ใช้งานได้ แต่อาจมีขนาดใหญ่กว่าไฟล์. vdi มาก ดูผลลัพธ์ของVBoxManage showhdinfo [your vdi file]หากคุณไม่แน่ใจ
Jack O'Connor

1
คำตอบที่1, stwisselและMaxime R.ให้การแก้ปัญหา - นี่เป็นวิธีแก้ปัญหาที่ยุติธรรม แต่ไม่ใช่คำตอบที่ดีที่สุดสำหรับคำถาม
STW

3
หากภาพมีตารางพาร์ติชัน (เช่นไดรฟ์ส่วนใหญ่) คุณจะต้องรวมคำตอบนี้กับภาพนี้เพื่อติดตั้งแต่ละพาร์ติชัน
bain

1
ใช้งานไม่ได้ รับข้อผิดพลาดในการติดตั้งประเภท fs ผิด ฉันลอง ext3 และ ext2 และ ext4 กล่องเสมือนบอกว่าประเภท hd fs เป็น ext4
Joshua Robison

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

เมื่อคุณทำเสร็จแล้วให้ unmount ทุกอย่างและปลดการเชื่อมต่ออุปกรณ์:

sudo qemu-nbd -d /dev/nbd0

ฉันต้องการที่จะทราบว่าmax_part=16ดูเหมือนจะเป็นส่วนสำคัญ หากไม่มีคุณจะไม่เห็น/dev/nbd0pXไฟล์ใด ๆแม้ว่าอุปกรณ์หลักจะทำงานได้อย่างถูกต้อง ตรวจสอบการสนทนาต่อไปนี้ในฟอรัม Gentooเพื่อดูผู้คนพบปัญหานี้
firegurafiku

คำตอบทั้งหมดใช้ได้ในระดับหนึ่ง แต่นี่คือสิ่งที่ฉันโปรดปรานและควรเป็นคำตอบที่ได้รับการยอมรับ clonehd ทำงาน แต่เพิ่มความต้องการที่เก็บข้อมูลเป็นสองเท่า virtualbox-fuse นั้นสมบูรณ์แบบ แต่แม้ว่าคุณจะยังคงได้มัน แต่มันก็ไม่ได้ทำให้มันเป็น repos ในระบบปฏิบัติการรุ่นใหม่
Hatoru Hansou

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

ดิสก์ทั้งหมดจะถูกประกอบเข้ากับพาร์ทิชั่นPartition1, Partition2รูปแบบการตั้งชื่อ จากนั้นไฟล์เหล่านั้นสามารถติดตั้งแบบวนซ้ำได้ ตัวอย่างเช่น,

sudo mount -o loop /mnt/Parition1 /mountpoint

1
@mattwilkie: ความแตกต่างในขณะนี้ไม่มีการรวบรวมคู่มือที่จำเป็นอีกต่อไป
stwissel

1
ยินดี. นั่งอยู่ที่หน้าจอ PROPPER / แป้นพิมพ์แทนจิกบน Glas ทำทุก :-) แตกต่าง
stwissel

5
มันไม่สามารถใช้ได้ใน 14.04
int_ua

2
หนึ่งสามารถดาวน์โหลดได้จากที่นี่: sourceforge.net/projects/vdfuse/?source=typ_redirectและการทำงาน (เมื่อ 15.04)
จีบ

4
ไม่สามารถใช้งานได้อีกต่อไปสำหรับ 16.10 แพ็คเกจไม่มีอยู่อีกต่อไป
Piskvor

14

ตั้งค่าดิสก์เป็นมาสเตอร์รองสำหรับระบบปฏิบัติการเสมือนอื่นจากนั้นบูตเข้าสู่ OS (เสมือน) นี้และคุณสามารถเมานต์ได้

ขั้นตอนที่ 1:สมมติว่าคุณมีระบบปฏิบัติการเสมือน (พูดว่า Ubuntu 16.04) ติดตั้งแล้วในกล่องเสมือนเพิ่มที่เก็บข้อมูลใหม่จากการตั้งค่าของระบบปฏิบัติการเสมือนนั้น ป้อนคำอธิบายรูปภาพที่นี่

ขั้นตอนที่ 2:เรียกดูไฟล์ Vdi ที่คุณต้องการเข้าถึงและเลือก

ขั้นตอนที่ 3:ลงชื่อเข้าใช้ระบบปฏิบัติการเสมือน

ขั้นตอนที่ 4:ดิสก์เสมือนอาจจะพร้อมใช้งานในระบบปฏิบัติการ ถ้าไม่ทำตามขั้นตอนที่ 5

ขั้นตอนที่ 5:ภายในระบบปฏิบัติการเสมือนใช้ Gparted และตรวจสอบดิสก์ และตรวจสอบให้แน่ใจว่าดิสก์เป็นประเภทที่สามารถเข้าถึงได้โดยระบบปฏิบัติการเสมือน หากไม่เป็นเช่นนั้นคุณอาจต้องแก้ไขดิสก์ แต่คุณจะสูญเสียเนื้อหาที่มีอยู่


1
สำหรับบันทึกในปี 2559 มันจะไม่ทำงาน
เปาโลเป

1
มันทำงานได้ใน Ubuntu 16.04
Sharun

นี่เป็นทางออกเดียวเมื่อคุณต้องการเปลี่ยนแปลงแล้วกลับไปใช้มันไม่สามารถทำงานกับ 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

ไม่เกี่ยวข้องอีกต่อไปเนื่องจากไม่รองรับยูทิลิตี้นี้
Evan Carroll

3

ไม่ใช่สิ่งที่คุณร้องขอ แต่ถ้าเป็นเรื่องของการลบไฟล์จาก vdiและคุณต้องการทางออกที่รวดเร็วมาก :

  1. ใช้เซิร์ฟเวอร์ ssh บนโฮสต์ของคุณ ( apt-get install openssh-server && service ssh restart)
  2. ใช้ VirtualBox เพื่อสร้างเครื่องเสมือนจากไฟล์ vdi ที่มีอยู่จากนั้นบู๊ตเครื่องเสมือนนั้น (ฉันเพิ่งเก็บ Network Adapter (NAT) เริ่มต้นเมื่อสร้าง VM)
  3. ภายในเครื่องเสมือน sftp ไปยังโฮสต์ของคุณ ( sftp hostuser@hostip)
  4. ในเซสชัน sftp putให้ไฟล์จำนวนมากไปยังโฮสต์เท่าที่คุณต้องการ

1
แฮ็คที่น่าเกลียด แต่ถ้าคุณอยู่ในที่แคบมันก็ทำงานได้สำเร็จ
Piskvor

ปัญหาหนึ่งอาจเป็นได้ว่าขณะนี้เครื่องไม่สามารถบู๊ตได้อย่างถูกต้องดังนั้นคุณต้องแก้ไขปัญหานั้นเสียก่อนและนั่นหมายความว่าคุณไม่สามารถทำได้จากภายใน การใช้ SSH กับ OS เสมือนของคุณเป็นวิธีการคัดลอกไฟล์ วิธีเร็วกว่าการพยายามแบ่งปันดิสก์
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
นี่ไม่ใช่คำตอบสำหรับคำถาม คุณมีปัญหาอื่น - ภาพที่เสียหาย คุณควรตอบคำถามใหม่ด้วยตนเอง
Evan Carroll

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