Zamontować obraz dysku VirtualBox (VDI)?


88

Czy można zamontować obraz dysku VirtualBox (.vdi), aby zawartość można było wyświetlać w Nautilus itp.?

Mam system Windows 2000 .vdi, który nie uruchamia się („niedostępne urządzenie rozruchowe”) po aktualizacji z VirtualBox 2.x do 3.1.6. Wierzę, że dane napędu IDE uległy zmianie i wszystko, co muszę zrobić, to uzyskać dostęp do obrazu dysku wewnętrznego i edytować system Windows, boot.iniaby wskazał nową lokalizację.


1
Jeśli plik .vdi, a następnie .img zawiera więcej niż 1 partycję, jest to bardzo przydatne: Browse-img-without-mounting
user2689749

Odpowiedzi:


55

Możesz przekonwertować na standardowy obraz, a następnie zamontować go.

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

Następnie

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

W takim przypadku musisz ZNAĆ typ systemu plików ext3. Po zamontowaniu wejdź i edytuj w wybranym edytorze. Nie należy mylić plików w /mntlokalizacji z uruchomionym hostem, bo będzie źle.

Aby sprawdzić szczegóły dotyczące pliku VDI, uruchom: VBoxManage showhdinfo ubuntu.vdi.

Źródło: [ROZWIĄZANE] Otwórz .vdi z menedżerem archiwum? - ubuntuforums.org


4
Specjalnie przydatny w takiej sytuacji. OP będzie mógł pracować nad kopią, zachowując oryginał jako kopię zapasową.
Javier Rivera,

7
Ostrożnie rób to z plikami dynamicznymi .vdi. Konwersja do .img zmusi plik obrazu do wielkości logicznej wielkości dysku, dlatego to podejście działa, ale może być znacznie większe niż plik .vdi. Spójrz na wynik, VBoxManage showhdinfo [your vdi file]jeśli nie jesteś pewien.
Jack O'Connor,

1
-1, odpowiedzi Stwissel i Maxime R. dostarczają rozwiązań - jest to sprawiedliwe obejście, ale nie najlepsza odpowiedź na pytanie
STW

3
Jeśli obraz ma tablicę partycji (jak większość dysków), musisz połączyć tę odpowiedź z tą, aby zamontować poszczególne partycje.
bain

1
Nie działa Nadal pojawiają się błędy montażowe niewłaściwy typ FS. Próbowałem ext3 i ext2 i ext4. Pole wirtualne mówi, że typem hd fs jest ext4.
Joshua Robison

86

Użyj qemu-nbd, proces jest wyjaśniony na temat błędu serwera i na tym blogu .

Zasadniczo będziesz musiał zainstalować w qemurazie potrzeby:

sudo apt-get install qemu

Następnie musisz załadować moduł urządzenia sieciowego :

sudo rmmod nbd
sudo modprobe nbd max_part=16

Dołącz obraz .vdi do jednego z właśnie utworzonych plików nbd:

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

Otrzymasz urządzenie blokujące / dev / nbd0 wraz z kilkoma węzłami urządzenia partycji / dev / nbd0p *.

sudo mount /dev/nbd0p1 /mnt

Po zakończeniu odłącz wszystko i odłącz urządzenie:

sudo qemu-nbd -d /dev/nbd0

Chciałbym zauważyć, że max_part=16wydaje się to być kluczową częścią. Bez niego nie zobaczysz żadnych /dev/nbd0pXplików, mimo że główne urządzenie będzie działać poprawnie. Zapoznaj się z poniższą dyskusją na forach Gentoo, aby zobaczyć, że ludzie napotykali ten problem.
firegurafiku

Wszystkie odpowiedzi działają do pewnego stopnia, ale to moja ulubiona i powinna być przyjęta. clonehd wykona zadanie, ale podwaja wymagania dotyczące pamięci. virtualbox-fuse jest idealny, ale chociaż wciąż możesz go zdobyć, nie trafił do repozytoriów we współczesnych wersjach systemu operacyjnego.
Hatoru Hansou,

2
To działało świetnie. Pamiętaj, że instalacja qemu-kvmzamiast qemumoże równie dobrze działać. Zrobiłem to na moim Ububtu 16.04 i zainstalowałem tylko 23 MB i 13 zależności zamiast 230 MB i wiele innych zależności dla pełnej instalacji qemu.
mivk 21.01.18

2
Chciałbym dodać, że najwyraźniej sudo partprobenależy go wykonać przy użyciu nowszych jąder, aby /dev/nbd0p*były tworzone w Debian / Ubuntu ( bugs.debian.org/cgi-bin/bugreport.cgi?bug=824553 ).
Kai,

1
To powinna być zaakceptowana odpowiedź !! Moje vdi jest za duże, aby przekonwertować je na plik .iso na dysku twardym. Po dłuższym wysiłku przewinąłem w dół, aby sprawdzić, czy inne metody nie wykorzystują bezpośrednio vdi. Ten jest prosty. (Uwaga: qemu zajmuje około 300 MB tym z nas, którym zależy na zapełnieniu dysku twardego.)
psitae

35

Wygląda na to, że vdfuse to narzędzie, którego szukasz. Znajduje się w repozytoriach Ubuntu. Jeśli chcesz się skompilować (źródło 2010), możesz to zrobić .

Jednak dla większości z nas sprowadza się to do prostego:

sudo apt-get install virtualbox-fuse

Wygląda na to, że teraz obsługuje także dynamiczne VDI.

Aby zamontować .vdiplik w katalogu, /mntużyj polecenia:

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

Cały dysk zostanie zamontowany z partycjami Partition1, Partition2formatu nazewnictwa. Następnie pliki te można zamontować w pętli. Na przykład,

sudo mount -o loop /mnt/Parition1 /mountpoint

1
@mattwilkie: Różnica teraz: nie jest już wymagane ręczne kompilowanie
stwissel

1
Zapraszamy. Siedzenie przy ekranie / klawiaturze zamiast dziobania w
szkle robiło

5
Nie jest dostępny w 14.04.
int_ua

2
Można go pobrać stąd: sourceforge.net/projects/vdfuse/?source=typ_redirect i działa (na 15.04)
sup

4
Pakiet nie jest już ważny dla wersji 16.10, pakiet już nie istnieje.
Piskvor,

14

Ustaw dysk jako dodatkowy system główny dla innego wirtualnego systemu operacyjnego, a następnie uruchom system operacyjny (wirtualny) i możesz go zamontować.

Krok 1: Zakładając, że masz wirtualny system operacyjny (powiedzmy Ubuntu 16.04) już zainstalowany w polu Virtual, dodaj nową pamięć z ustawień tego wirtualnego systemu operacyjnego. wprowadź opis zdjęcia tutaj

Krok 2: Przeglądaj plik Vdi, do którego chcesz uzyskać dostęp, i wybierz go.

Krok 3: Zaloguj się do wirtualnego systemu operacyjnego.

Krok 4: Dysk wirtualny będzie prawdopodobnie dostępny w systemie operacyjnym. Jeśli nie, wykonaj krok 5

Krok 5: W wirtualnym systemie operacyjnym użyj Gparted i sprawdź dyski. i upewnij się, że dysk jest typu dostępnego dla wirtualnego systemu operacyjnego. Jeśli nie jest, być może będziesz musiał edytować dysk, ale wtedy utracisz istniejącą zawartość.


1
Dla przypomnienia, w 2016 roku to nie zadziała
Paulo Pedroso,

1
Działa w Ubuntu 16.04.
Sharun,

to naprawdę jedyne rozwiązanie, gdy trzeba wprowadzić zmiany, a następnie powrócić do korzystania z niego, nie można było uruchomić rw z vdfuse
DuBistKomisch

7

Sam nie testowałem, ale jest moduł bezpieczników do ich zamontowania ( vdfuse), sprawdź następującą stronę:

Należy pamiętać, że korzystanie z niego do zapisu jest ryzykowne.


Stosowanie:

$ ./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

Aby zamontować obraz bezpośrednio przy użyciu jego nazwy pliku:

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

Aby zamontować dysk komputera (w tym migawki):

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

Nie ma już znaczenia, ponieważ to narzędzie nie jest obsługiwane.
Evan Carroll

3

Nie to, o co prosiłeś, ale jeśli to tylko kwestia pobrania plików z VDI , a chcesz bardzo szybkiego rozwiązania :

  1. Uruchom serwer ssh na swoim hoście ( apt-get install openssh-server && service ssh restart)
  2. Użyj VirtualBox, aby zbudować maszynę wirtualną z istniejącego pliku vdi, a następnie uruchom maszynę wirtualną. (Właśnie zachowałem domyślną kartę sieciową (NAT) podczas budowania maszyny wirtualnej).
  3. W maszynie wirtualnej sftp do hosta. ( sftp hostuser@hostip)
  4. W sesji sftp puttyle plików na hoście, ile potrzebujesz.

1
Brzydki hack, ale jeśli jesteś w trudnej sytuacji, wykonuje zadanie.
Piskvor,

Jednym z problemów może być to, że komputer obecnie nie uruchamia się poprawnie, dlatego najpierw trzeba go naprawić, co oznacza, że ​​nie można tego zrobić od wewnątrz. Używanie SSH z systemami wirtualnymi jest także sposobem kopiowania plików. O wiele szybciej niż próba udostępnienia dysku.
Alexis Wilke

2

Jak wspomniano powyżej Vojtech Trefny,

1) najpierw przekonwertuj VDI -> IMG

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

2) Następnie zamontuj IMG

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

3) Jednak po otrzymaniu tego komunikatu o błędzie:

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

i dmesg powiedział:

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

musisz sprawdzić strukturę partycji .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) Jak widać, partycja główna zaczyna się od bajtów 16775168. Pamiętaj jednak, że rozmiar sektora wynosi 512 bajtów, więc musisz pomnożyć wyniki 16775168 x 512 = 8588886016, więc musisz zrównoważyć podłączenie w następujący sposób:

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

5) W rzeczywistości nie działało to w przypadku, gdy system plików był brudny po zmianie rozmiaru. W tym przypadku dalej to zrobiłem:

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

1
To nie jest odpowiedź na pytanie. Miałeś inny problem - uszkodzony obraz. Powinieneś sam odpowiedzieć na nowe pytanie.
Evan Carroll

Rozszerza się to do poprzedniej odpowiedzi obejmującej przypadek błędu. Zepsuty obraz był jednym z przypadków użycia. +1 za wiele nowych lew.
FractalSpace,
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.