Monte um VHD no Mac OS X

14

É possível (como) montar um arquivo VHD criado pelo Windows 7 no OS X?

Encontrei algumas informações sobre como fazer isso no linux. Existe um fusível fs "vdfuse" que usa bibliotecas do virtualbox para montar sistemas de arquivos suportados pelo virtualbox. No entanto, não consegui compilar o pacote no osx porque quase todos os cabeçalhos estão ausentes e duvido que funcionasse de qualquer maneira ...

Edição 2: Ok, eu tenho minhas mãos sujas e finalmente compilei o vdfuse ( http://forums.virtualbox.org/viewtopic.php?f=26&t=33355&start=0 ) no osx. Como ponto de partida, usei o macfuse ( http://code.google.com/p/macfuse/ ) e observei os exemplos de sistemas de arquivos.

Isso me levou ao seguinte script de compilação

infile=vdfuse.c
outfile=vdfuse
incdir="your/path/to/vbox/headers"
INSTALL_DIR="/Applications/VirtualBox.app/Contents/MacOS"
CFLAGS="-pipe"

gcc -arch i386 "${infile}" \
         "${INSTALL_DIR}"/VBoxDD.dylib \
         "${INSTALL_DIR}"/VBoxDDU.dylib \
         "${INSTALL_DIR}"/VBoxVMM.dylib \
         "${INSTALL_DIR}"/VBoxRT.dylib \
         "${INSTALL_DIR}"/VBoxDD2.dylib \
         "${INSTALL_DIR}"/VBoxREM.dylib \
        -o "${outfile}" \
        -I"${incdir}" -I"/usr/local/include/fuse" \
        -Wl,-rpath,"${INSTALL_DIR}"  \
        -lfuse_ino64  \
        -Wall ${CFLAGS}

Na verdade, você não precisa compilar o VirtualBox em sua máquina, basta instalar uma versão recente do VirtualBox.

Então agora eu posso montar parcialmente vhds. As partições separadas aparecem como arquivos de bloco Partition1, Partition2, ... no meu ponto de montagem. No entanto, o Mac OS X não inclui um sistema de arquivos de loopback e o loopback fs do macfuse não funciona com arquivos de bloco, portanto, precisamos de um loopback fs para montar os arquivos de bloco como partições reais.

jan bernlöhr
fonte
O que o Win7 tem a ver com isso? Para responder a sua pergunta completamente, eu preciso saber o que aplicativo criou seu VHD (VirtualBox, VMware (e estação de trabalho vs Servidor vs ...), etc.)
gWaldo
Na verdade, eu criou o VHD com diskpart contida no Windows 7 ...
janeiro bernlöhr
Você pode querer usar gcc -arch x86-64 "$ {infile}" \ para a linha 7 se você estiver executando Leopard ou Snow Leopard (esp 10.6) para que ele compila de 64 bits
gWaldo
@gWaldo, VHD é um formato de arquivo usado pelo Windows 6.1, PC Virtual, Servidor Virtual, Hyper-V, Xen e outros.
Chris S
Incrivelmente, não precisei alterar muito essas instruções para que isso funcionasse em 2020. No entanto, houve algumas pequenas alterações. Eu os listei em um novo post.
Ben XO

Respostas:

7

Finalmente consegui funcionar. Então, em resumo, aqui estão as etapas para executar

  1. Instale o macfuse
  2. Instalar Caixa Virtual
  3. Compile vdfuse conforme mencionado na pergunta
  4. Monte o disco vhd

    sudo ./vdfuse -tVHD -w -f / Caminho / Para / VHD / Caminho / Para / Ponto de montagem

  5. Anexe os arquivos de bloco da partição virtual

    hdiutil attach -imagekey diskimage-class = CRawDiskImage -nomount / Caminho / Para / Ponto de montagem / PartiçãoN

  6. Monte a partição virtual

    mount -t YourFS / dev / diskK / Caminho / Para / ParitionMountPoint

jan bernlöhr
fonte
Incrivelmente, não precisei alterar muito essas instruções para que isso funcionasse em 2020. No entanto, houve algumas pequenas alterações. Eu os listei em um novo post.
Ben XO
3

Isso funcionou para mim no Mountain Lion. Nenhuma instalação ou compilação necessária:

hdiutil attach -readonly -imagekey diskimage-class=CRawDiskImage <Path to .vhd file>
henning77
fonte
Diga para mim em 10.8.3: hdiutil: attach falhou - nenhum sistema de arquivos montável
hkulekci
Eu apenas tentei novamente e recebi a mesma mensagem de erro. Esquisito. Eu usei isso algumas vezes com sucesso há alguns meses.
precisa saber é o seguinte
Com uma imagem vhd antiga, ela funciona novamente (NTFS, criado em 01/2013). Com um vhd mais recente, isso não acontece. Ainda não sei onde está a diferença.
henning77
Não encontrei nada sobre esse problema.
hkulekci
Eu tenho um VHD criptografado pelo BitLocker do Windows 7 e foi capaz de montá-lo da mesma forma com hdiutil attach -imagekey diskimage-class=CRawDiskImage /Path/to/encrypted.vhd -nomounte, em seguida, usar m3datarecovery.com/mac-bitlocker para desencriptar-lo. DAEMON Tools for Mac: O software inteligente de montagem e criação de imagens também trabalhou para montar, mas não é gratuito.
Pat
1

O FUSE funciona no MacOSX, mas você precisaria dos cabeçalhos.

gWaldo
fonte
Obrigado, eu já estabeleci o macfuse em nossas máquinas para tornar o ntfs (tuxera), ext2 e outros sistemas de arquivos acessíveis aos nossos usuários osx. Talvez eu possa compilar o lib em um sistema Linux e, em seguida, copiar os arquivos ot OSX ...
janeiro bernlöhr
1

Se você não encontrar outra solução, poderá usar o VirtualBox (ou outra ferramenta similar que suporte arquivos VHD) para executar um sistema virtual que use essa imagem de disco virtual e acessar ou copiar os arquivos necessários usando o Samba ou sftp ou algo semelhante. .

JanC
fonte
Obrigado, isso é viável, mas infelizmente não é exatamente o que estou procurando. Atualmente, tenho partições NTFS em um sistema de inicialização dupla, para que eu possa ler / gravar dados do win e do osx. O próximo passo é virtualizar as partições que contêm win7 e dados ... No entanto, os dados ainda precisam ser acessíveis no osx.
jan bernlöhr
0

Apenas renomeie seu arquivo VHD para IMG. Clique duas vezes nele para montá-lo. Isso é tudo.

Lembre-se de que o Mac OS X fornece acesso de leitura apenas para o volume NTFS; portanto, se o seu VHD tiver um volume NTFS, você terá apenas acesso de leitura.

FiReBaT
fonte
1
Infelizmente, isso não funciona. DiskImageMounter apenas diz "não reconhecido".
jan bernlöhr 13/01/12
0

Agora é 2020, e essas instruções de 10 anos quase funcionaram. Aqui está o que eu fiz para montar uma imagem de backup antiga do Windows 7 no meu Mojave Mac, com base na resposta aceita por Jan Bernlöhr, bem como no script da pergunta.

  1. Instale osxfuse (o sucessor do macfuse)
  2. Instale o VirtualBox
  3. Faça o download do código-fonte do vdfuse ( vdfuse.c) em https://github.com/Thorsten-Sick/vdfuse (atualmente na v83 - o link original está vinculado à v80).
  4. Faça o download dos cabeçalhos do VirtualBox, mas é necessário obter uma versão a partir de 2012. Usei o seguinte comando: svn co -r '{20120801}' http://www.virtualbox.org/svn/vbox/trunk/include/
  5. Use as seguintes instruções de compilação, adaptadas da pergunta, mas com algumas pequenas alterações (compilação de 64 bits e VirtualBoxes mais recentes não parecem ter VBoxREM.dylib:
  infile=vdfuse.c
  outfile=vdfuse
  incdir="$(pwd)/include"
  INSTALL_DIR="/Applications/VirtualBox.app/Contents/MacOS"
  CFLAGS="-pipe"

  gcc -arch x86_64 "${infile}" \
         "${INSTALL_DIR}"/VBoxDD.dylib \
         "${INSTALL_DIR}"/VBoxDDU.dylib \
         "${INSTALL_DIR}"/VBoxVMM.dylib \
         "${INSTALL_DIR}"/VBoxRT.dylib \
         "${INSTALL_DIR}"/VBoxDD2.dylib \
        -o "${outfile}" \
        -I"${incdir}" -I"/usr/local/include/fuse" \
        -Wl,-rpath,"${INSTALL_DIR}"  \
        -lfuse_ino64  \
        -Wall ${CFLAGS}
  1. Monte o disco vhd

    sudo ./vdfuse -tVHD -w -f/Path/To/VHD /Path/To/Mountpoint

  2. Anexe os arquivos de bloco da partição virtual

    hdiutil attach -imagekey diskimage-class=CRawDiskImage -nomount /Path/To/Mountpoint/PartitionN

  3. Monte a partição virtual

    mount -t YourFS /dev/diskK /Path/To/ParitionMountPoint

Milagrosamente, isso funciona como um encanto!

Ben XO
fonte