Gắn kết VHD trên Mac OS X


14

Có thể (làm thế nào) để gắn một tệp VHD được tạo bởi Windows 7 trong OS X không?

Tôi tìm thấy một số thông tin về cách làm điều này trên linux. Có một cầu chì fs "vdfuse" sử dụng lib hộp ảo để gắn kết các hệ thống tập tin được hỗ trợ bởi hộp ảo. Tuy nhiên tôi không thể biên dịch gói trên osx vì gần như tất cả các tiêu đề đều bị thiếu và tôi nghi ngờ rằng dù sao nó cũng sẽ hoạt động ...

EDIT # 2: Được rồi, tôi đã bị bẩn tay và cuối cùng đã biên dịch vdfuse ( http://forums.virtualbox.org/viewtopic.php?f=26&t=33355&start=0 ) trên osx. Là một điểm khởi đầu, tôi đã sử dụng macfuse ( http://code.google.com.vn/p/macfuse/ ) và xem xét các hệ thống tệp ví dụ.

Điều này dẫn tôi đến kịch bản xây dựng sau

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}

Bạn thực sự không cần phải biên dịch VirtualBox trên máy của mình, chỉ cần cài đặt phiên bản VirtualBox gần đây.

Vì vậy, bây giờ tôi có thể gắn một phần vhds. Các phân vùng riêng biệt xuất hiện dưới dạng các tệp khối phân vùng1, phân vùng 2, ... trên điểm gắn kết của tôi. Tuy nhiên, Mac OS X không bao gồm hệ thống tệp loopback và fs loopback của macfuse không hoạt động với các tệp khối, vì vậy chúng tôi cần một fs loopback để gắn kết các blockfiles như các phân vùng thực tế.


Win7 phải làm gì với nó? Để trả lời hoàn toàn câu hỏi của bạn, tôi cần biết ứng dụng nào đã tạo VHD của bạn (VirtualBox, VMware (và máy trạm so với Máy chủ so với ...), v.v.)
gWaldo

Trên thực tế, tôi đã tạo VHD với phần đĩa có trong Windows 7 ...
jan bernlöhr

Bạn có thể muốn sử dụng gcc -arch x86-64 "$ {infile}" \ cho dòng 7 nếu bạn đang chạy Leopard hoặc Snow Leopard (đặc biệt 10.6) để nó biên dịch 64 bit
gWaldo

@gWaldo, VHD là định dạng tệp được sử dụng bởi Windows 6.1, Virtual PC, Virtual Server, Hyper-V, Xen và các loại khác.
Chris S

Thật đáng kinh ngạc, tôi đã không phải thay đổi các hướng dẫn này nhiều để hoạt động này vào năm 2020. Tuy nhiên, có một vài thay đổi nhỏ. Tôi đã liệt kê chúng trong một bài viết mới.
Ben XO

Câu trả lời:


7

Cuối cùng tôi đã làm cho nó hoạt động. Vì vậy, tóm lại ở đây là các bước để thực hiện

  1. Cài đặt macfuse
  2. Cài đặt hộp ảo
  3. Biên dịch vdfuse như đã đề cập trong câu hỏi
  4. Gắn đĩa vhd

    sudo ./vdfuse -tVHD -w -f / Đường dẫn / Đến / VHD / Đường dẫn / Đến / Điểm

  5. Đính kèm các blockfiles phân vùng ảo

    hdiutil đính kèm -imagekey Discimage-class = CRawDiskImage -nomount / Path / To / Mountpoint / PartitionN

  6. Gắn kết phân vùng ảo

    gắn kết -t YourFS / dev / đĩaK / Đường dẫn / Tới / ParitionMountPoint


Thật đáng kinh ngạc, tôi đã không phải thay đổi các hướng dẫn này nhiều để hoạt động này vào năm 2020. Tuy nhiên, có một vài thay đổi nhỏ. Tôi đã liệt kê chúng trong một bài viết mới.
Ben XO

3

Điều này làm việc cho tôi trên Mountain Lion. Không cần cài đặt hoặc biên dịch:

hdiutil attach -readonly -imagekey diskimage-class=CRawDiskImage <Path to .vhd file>

Nói cho tôi vào ngày 10.8.3: hdiutil: đính kèm thất bại - không có hệ thống tệp có thể gắn kết
hkulekci

Tôi vừa thử lại và nhận được thông báo lỗi tương tự. Kỳ dị. Tôi đã sử dụng điều này một vài lần thành công vài tháng trước.
henning77

Với hình ảnh vhd cũ hơn, nó hoạt động trở lại (NTFS, được tạo vào tháng 01/2013). Với một vhd mới hơn thì không. Tôi chưa biết sự khác biệt ở đâu.
henning77

tôi đã không tìm thấy một cái gì đó về vấn đề này.
hkulekci

Tôi có một VHD được mã hóa bitlocker từ Windows 7 và có thể gắn kết nó tương tự với hdiutil attach -imagekey diskimage-class=CRawDiskImage /Path/to/encrypted.vhd -nomountvà sau đó sử dụng m3datarecovery.com/mac-bitlocker để giải mã nó. DAEMON Tools for Mac: Phần mềm gắn và chụp ảnh thông minh cũng hoạt động để gắn kết, nhưng nó không miễn phí.
Pat

1

FUSE hoạt động trên MacOSX, tuy nhiên bạn sẽ cần các tiêu đề.


Cảm ơn, tôi đã thiết lập macfuse trên các máy của chúng tôi để làm cho ntfs (tuxera), ext2 và các hệ thống tệp khác có thể truy cập được đối với người dùng osx của chúng tôi. Có lẽ tôi có thể biên dịch lib trên hệ thống linux và sau đó sao chép các tệp ot osx ...
jan bernlöhr

1

Nếu bạn không tìm thấy giải pháp khác, bạn có thể sử dụng VirtualBox (hoặc một công cụ tương tự khác hỗ trợ các tệp VHD) để chạy một hệ thống ảo sử dụng hình ảnh đĩa ảo đó, sau đó truy cập hoặc sao chép các tệp bạn cần bằng Samba hoặc sftp hoặc như vậy .


Cảm ơn bạn, điều này là khả thi nhưng tiếc là không hoàn toàn những gì tôi đang tìm kiếm. Hiện tại tôi có phân vùng NTFS trên hệ thống khởi động kép, vì vậy tôi có thể đọc / ghi dữ liệu từ win và osx. Bước tiếp theo là ảo hóa các phân vùng chứa win7 và dữ liệu ... Tuy nhiên, dữ liệu vẫn cần có thể truy cập được trên osx.
jan bernlöhr

0

Chỉ cần đổi tên tập tin VHD của bạn thành IMG .. nhấp đúp chuột vào nó để gắn kết nó. Đó là tất cả.

Hãy nhớ rằng Mac OS X chỉ cung cấp quyền truy cập đọc cho âm lượng NTFS, vì vậy nếu VHD của bạn có âm lượng NTFS, bạn chỉ có quyền truy cập đọc.


1
Thật không may, điều này không làm việc. DiskImageMorer chỉ nói "không được công nhận".
jan bernlöhr

0

Bây giờ là năm 2020 và những hướng dẫn 10 năm tuổi này gần như đã có hiệu quả. Đây là những gì tôi đã làm để gắn một Ảnh sao lưu cũ từ Windows 7 trên máy Mojave Mac của tôi, dựa trên câu trả lời được chấp nhận từ Jan Bernlöhr, cũng như kịch bản trong câu hỏi.

  1. Cài đặt osxfuse (kế thừa cho macfuse)
  2. Cài đặt VirtualBox
  3. Tải xuống mã nguồn vdfuse ( vdfuse.c) từ https://github.com/Thorsten-Sick/vdfuse (hiện tại v83 - liên kết ban đầu được chốt vào v80).
  4. Tải xuống các tiêu đề VirtualBox, nhưng bạn phải có phiên bản từ năm 2012. Tôi đã sử dụng lệnh sau: svn co -r '{20120801}' http://www.virtualbox.org/svn/vbox/trunk/include/
  5. Sử dụng các hướng dẫn xây dựng sau, được điều chỉnh từ câu hỏi, nhưng với một vài thay đổi nhỏ (bản dựng 64 bit và VirtualBox mới hơn dường như không có 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. Gắn đĩa vhd

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

  2. Đính kèm các blockfiles phân vùng ảo

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

  3. Gắn kết phân vùng ảo

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

Thật kỳ diệu, điều này làm việc một sự quyến rũ!

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.