Montar uma imagem de unidade do VirtualBox (vdi)?

88

É possível montar uma imagem de unidade do VirtualBox (.vdi) para que o conteúdo possa ser visualizado no Nautilus etc.?

Eu tenho um Windows 2000 .vdi que não inicializa ("dispositivo de inicialização inacessível") após a atualização do VirtualBox 2.x para 3.1.6. Acredito que os detalhes da unidade IDE mudaram e que tudo o que preciso fazer é acessar a imagem da unidade interna e editar o Windows boot.inipara apontar para o novo local.

Matt Wilson
fonte
1
Se o seu .vdi e depois .img arquivo contém mais de 1 partição, isso é muito útil: navegar-img-sem-montagem
user2689749

Respostas:

56

Você pode converter em imagem padrão e montá-la.

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

Então

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

Você precisará CONHECER o tipo de sistema de arquivos, ext3neste caso. Após a montagem, entre e edite o editor de sua escolha. Não confunda arquivos dentro do /mntlocal com o host em execução, ou isso será ruim.

Para verificar detalhes sobre o arquivo de VDI, execute: VBoxManage showhdinfo ubuntu.vdi.

Fonte: [RESOLVIDO] .vdi aberto com gerenciador de arquivos? - ubuntuforums.org

Vojtech Trefny
fonte
4
Specilly útil em uma situação como esta. O OP poderá trabalhar na cópia mantendo o original como backup.
Javier Rivera
7
Cuidado ao fazer isso com arquivos .vdi de tamanho dinâmico. A conversão em .img forçará o arquivo de imagem a ser tão grande quanto o tamanho lógico do disco, e é por isso que essa abordagem funciona, mas pode ser muito maior que o arquivo .vdi. Dê uma olhada na saída de VBoxManage showhdinfo [your vdi file]se você não tiver certeza.
Jack O'Connor
1
-1, stwissel e Maxime R. 's respostas fornecer soluções - esta é uma solução justa, mas não a melhor resposta para a pergunta
STW
3
Se a imagem tiver uma tabela de partições (como a maioria das unidades), você precisará combinar esta resposta com esta para montar as partições individuais.
Bain
1
Não funciona Continue recebendo erros de montagem tipo fs errado. Eu tentei ext3 e ext2 e ext4. A caixa virtual diz que o tipo hd fs é ext4.
Joshua Robison
86

Use qemu-nbd, o processo é explicado em serverfault e neste blog .

Basicamente, você precisará instalar, qemuse necessário:

sudo apt-get install qemu

Em seguida, você precisará carregar o módulo do dispositivo de bloco de rede :

sudo rmmod nbd
sudo modprobe nbd max_part=16

Anexe a imagem .vdi a um dos nbd que você acabou de criar:

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

Agora você receberá um dispositivo de bloco / dev / nbd0, juntamente com vários nós de dispositivo de partição / dev / nbd0p *.

sudo mount /dev/nbd0p1 /mnt

Quando terminar, desmonte tudo e desconecte o dispositivo:

sudo qemu-nbd -d /dev/nbd0
Maxime R.
fonte
Gostaria de observar que max_part=16parece ser uma parte crítica. Sem ele, você não verá nenhum /dev/nbd0pXarquivo, apesar do dispositivo principal funcionar corretamente. Verifique a discussão a seguir nos fóruns do Gentoo para ver as pessoas que enfrentaram esse problema.
Firegurafiku
Todas as respostas funcionam até certo ponto, mas este é o meu favorito e deve ser o aceito. O clonehd faz o trabalho, mas duplica os requisitos de armazenamento. O virtualbox-fuse é ideal, mas, embora você ainda possa obtê-lo, ele não chegou aos repositórios de versões modernas do sistema operacional.
Hatoru Hansou 17/09/2015
2
Isso funcionou muito bem. Observe que a instalação em qemu-kvmvez de qemupode funcionar da mesma maneira. Ele fez isso no meu Ububtu 16.04 e instalou apenas 23 MB e 13 dependências em vez de 230 MB e muitas outras dependências para a instalação completa do qemu.
mivk
2
Eu gostaria de acrescentar que aparentemente sudo partprobeprecisa ser executado com kernels mais recentes, para que /dev/nbd0p*sejam criados no Debian / Ubuntu ( bugs.debian.org/cgi-bin/bugreport.cgi?bug=824553 ).
Kai
1
Esta deve ser a resposta aceita !! Meu vdi é muito grande para ser convertido em .iso no meu disco rígido. Depois de lutar um pouco, rolei para baixo para ver se havia outros métodos que usavam o vdi diretamente. Este é simples. (Nota: qemu leva cerca de 300MB para aqueles de nós que se preocupam com o nosso disco rígido encher.)
psitae
35

Parece que o vdfuse é a ferramenta que você está procurando. Está nos repositórios do Ubuntu. Se você deseja se compilar (fonte de 2010), também pode fazer isso .

No entanto, para a maioria de nós, tudo se resume a um simples:

sudo apt-get install virtualbox-fuse

Parece que agora também suporta vdi dinâmico.

E para montar o .vdiarquivo em /mntdir, use o comando:

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

Todo o disco será montado com partições Partition1, Partition2formato de nomeação. Em seguida, esses arquivos podem ser montados em loop. Por exemplo,

sudo mount -o loop /mnt/Parition1 /mountpoint
Stwissel
fonte
1
@mattwilkie: A diferença agora: não compilação manual necessária mais
stwissel
1
Você é bem vindo. Sentar-se em uma tela / teclado
apropriado
5
Não está disponível no 14.04.
int_ua
2
Pode-se fazer o download a partir daqui: sourceforge.net/projects/vdfuse/?source=typ_redirect e funciona (em 15.04)
sup
4
Não é mais válido para 16.10, o pacote não existe mais.
Piskvor
14

Defina o disco como mestre secundário para outro sistema operacional virtual, inicialize neste sistema operacional (virtual) e você poderá montá-lo.

Etapa 1: Supondo que você já tenha um sistema operacional virtual (por exemplo, Ubuntu 16.04) instalado na caixa Virtual, adicione um novo armazenamento a partir das configurações desse sistema operacional virtual. insira a descrição da imagem aqui

Etapa 2: procure o arquivo Vdi que você deseja acessar e selecione-o.

Etapa 3: Faça logon no sistema operacional virtual.

Etapa 4: o disco virtual provavelmente estará disponível dentro do sistema operacional. Caso contrário, siga a etapa 5

Etapa 5: dentro do sistema operacional virtual, use o Gparted e verifique os discos. e verifique se o disco é do tipo acessível pelo sistema operacional virtual. Caso contrário, talvez seja necessário editar o disco, mas você perderá o conteúdo existente.

josef
fonte
1
Para o registro, em 2016 não vai funcionar
Paulo Pedroso
1
Funciona no ubuntu 16.04.
Sharun 12/12/16
esta é realmente a única solução quando você precisar fazer alterações e, em seguida, voltar a usá-lo, não conseguia rw trabalhar com vdfuse
DuBistKomisch
7

Não testei a mim mesmo, mas há um módulo de fusível para montá-los ( vdfuse), consulte a seguinte página:

Observe que usá-lo para acesso de gravação é arriscado.


Uso:

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

Para montar uma imagem diretamente usando seu nome de arquivo:

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

Para montar um disco da máquina (incluindo instantâneos):

$ ./vdautomount-<version> -p /path/to/vdfuse WinXP /mnt/vdi
$ mount -o loop /mnt/vdi/Partition1 /mnt/WindowsXP
João Pinto
fonte
Não é mais relevante, pois este utilitário não é suportado.
Evan Carroll
3

Não é o que você solicitou, mas se é apenas uma questão de obter arquivos do vdi e você deseja uma solução muito rápida :

  1. Execute um servidor ssh no seu host ( apt-get install openssh-server && service ssh restart)
  2. Use o VirtualBox para criar uma máquina virtual a partir do arquivo vdi existente e, em seguida, inicialize essa máquina virtual. (Apenas mantive o adaptador de rede (NAT) padrão ao criar a VM.)
  3. Dentro da máquina virtual, sftp para o seu host. ( sftp hostuser@hostip)
  4. Na sessão sftp, putquantos arquivos forem necessários para o host.
JellicleCat
fonte
1
Um truque feio, mas se você estiver em uma situação difícil, ele faz o trabalho.
Piskvor
Um problema pode ser o fato de a máquina não inicializar corretamente no momento; portanto, você precisa corrigi-lo primeiro e isso significa que você não pode fazê-lo por dentro. Também usar o SSH com os sistemas operacionais de caixa virtual é o caminho a seguir para copiar arquivos. Muito mais rápido do que tentar compartilhar um disco.
Alexis Wilke
2

Como Vojtech Trefny mencionou acima,

1) primeiro converta seu VDI -> IMG

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

2) Depois monte o IMG

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

3) No entanto, como recebi esta mensagem de erro:

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

e dmesg disse:

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

você precisa verificar a estrutura da partição do arquivo .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) Como você pode ver, a partição principal está iniciando nos bytes 16775168. No entanto, observe que o tamanho do setor é 512 bytes, portanto, é necessário multiplicar os resultados 16775168 x 512 = 8588886016 para compensar a montagem da seguinte maneira:

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

5) Na verdade, isso não funcionou para mim no caso de o sistema de arquivos ficar sujo após o redimensionamento. Nesse caso, eu ainda fiz isso:

dd if=ubuntu.img of=ubuntu.disk bs=512 skip=16775168 count=12092416
e2fsck ubuntu.disk
mount ubuntu.disk /mnt
PHZ.fi-Pharazon
fonte
1
Esta não é uma resposta para a pergunta. Você teve outro problema - uma imagem corrompida. Você deveria ter respondido automaticamente a uma nova pergunta.
Evan Carroll
Isso se expande para a resposta anterior que cobre o caso de erro. A imagem corrompida foi um caso de uso. +1 para muitos novos truques.
FractalSpace