Làm cách nào để tạo hình ảnh đĩa VHD từ hệ thống trực tiếp Linux?


29

Một lần nữa, tôi phải nhờ đến các chuyên gia ở đây tại SuperUser, vì các nguồn khác của tôi (chủ yếu là Google ;-)) không chứng minh được rất hữu ích ...

Về cơ bản, tôi muốn tạo một hình ảnh VHD của một đĩa vật lý để được lưu trữ / truy cập / thậm chí có thể được gắn trong một máy ảo. Bây giờ, có hàng tá bài viết và hướng dẫn về cách thực hiện điều đó trên web, nhưng không có bài viết nào đáp ứng chính xác các điều kiện tôi muốn đạt được:

  • Tôi muốn tệp đíchhình ảnh VHD , vì Windows 7 có thể gắn kết nó một cách tự nhiên, thậm chí qua mạng và nhiều chương trình khác có thể sử dụng nó (VirtualBox, ...)
  • Đĩa tôi đang cố gắng để hình ảnh có cài đặt Windows XP, vì vậy về mặt lý thuyết, tôi có thể sử dụng disk2vhdtiện ích này, nhưng tôi muốn tìm một giải pháp không yêu cầu khởi động cài đặt Windows XP đó (tức là giữ đĩa chỉ đọc )
  • Vì vậy, tôi đã tìm kiếm một giải pháp liên quan đến một số loại hệ thống trực tiếp (chạy từ stic USB hoặc mạng)

Tuy nhiên, tất cả các giải pháp mà tôi đã gặp đều sử dụng disk2vhdhoặc sử dụng ddlệnh trong linux, một bản sao hoàn chỉnh của đĩa (tức là các khối trống) và không xuất ra tệp VHD. Có công cụ / chương trình nào trong Linux có thể trực tiếp tạo tệp VHD không? Hoặc có thể chuyển đổi hình ảnh đĩa thô được tạo bằng dd sang tệp VHD mà không cần phân bổ không gian cho các khối trống không? Làm thế nào bạn sẽ tiến hành?

Như mọi khi, bất kỳ lời khuyên hoặc nhận xét đều được đánh giá cao !!


Các BSD có một công cụ gọi là mkimg có thể tạo hình ảnh vhd trong số các định dạng khác.
julian

Câu trả lời:


30

Để tham khảo trong tương lai, đây là cách cuối cùng tôi đã tiến hành, với một vài bình luận về các vấn đề hoặc cạm bẫy khác nhau gặp phải:

1. Khởi động máy với hệ thống trực tiếp Linux

Bước đầu tiên là khởi động máy chứa đĩa thành hình ảnh, sử dụng hệ thống trực tiếp Linux.

LƯU Ý: Ý tưởng đầu tiên của tôi là sử dụng đĩa USB Ubuntu Live, nhưng máy không hỗ trợ khả năng khởi động từ USB, vì vậy tôi thấy việc sử dụng đĩa CD Knoppix cũ dễ dàng hơn .

2. Hình ảnh đĩa sử dụng ddvà dẫn dữ liệu quassh

Sau đó, tôi đã sao chép tất cả nội dung đĩa vào hình ảnh tệp trên máy chủ cục bộ của mình bằng cách sử dụng ddvà dẫn dữ liệu qua ssh:

$ dd if = / dev / hdX bs = 4k conv = noerror, sync | ssh -c blowfish myuser @ myserver 'dd of = myfile.dd'

Một vài nhận xét ở đây: phương pháp này sẽ đọc tất cả nội dung của đĩa, vì vậy có thể mất nhiều thời gian (tôi mất 5 giờ cho một đĩa 80Gb). Nút thắt không phải là mạng, nhưng thực sự là tốc độ đọc đĩa. Trước khi khởi chạy bản sao, tôi khuyên bạn nên kiểm tra các tham số BIOS / đĩa / hệ thống để đảm bảo rằng đĩa và bo mạch chủ đang hoạt động ở tốc độ cao nhất có thể (điều này có thể được kiểm tra bằng lệnh hdparm -ivà bằng cách chạy thử với hdparm -Tt /dev/hdX).

LƯU Ý: ddkhông xuất tiến trình của hoạt động, nhưng chúng tôi có thể buộc nó thực hiện bằng cách gửi tín hiệu USR1 đến ddquy trình PID từ thiết bị đầu cuối khác:

$ kill -USR1 PIDofdd

3. Lấy lại không gian chưa sử dụng

Tại thời điểm này, máy nguồn không còn cần thiết nữa và chúng tôi sẽ làm việc độc quyền trên máy chủ đích (cũng chạy Linux). VirtualBox sẽ được sử dụng để chuyển đổi hình ảnh đĩa thô sang định dạng VHD, nhưng trước khi thực hiện, chúng ta có thể loại bỏ các khối không sử dụng, để VirtualBox không phân bổ không gian cho chúng trong tệp cuối cùng.

Để làm như vậy, tôi gắn hình ảnh như một thiết bị loopback:

$ mount -o loop,rw,offset=26608813056 -t ntfs-3g /mnt/mydisk/myfile.dd /mnt/tmp_mnt
$ cat /dev/zero > zero.file
$ rm zero.file

GHI CHÚ: Có thể lấy phần bù cho biết bắt đầu phân vùng trong ảnh đĩa bằng cách sử dụng partedtrên tệp ảnh:

$ parted /mnt/mydisk/myfile.dd
(parted) unit
Unit?  [compact]? B
(parted) print
Model:  (file)
Disk /mnt/mydisk/myfile.dd: 80026361856B
Sector size (logical/physical): 512B/512B
Partition Table: msdos

Number  Start         End           Size          Type      File system  Flags
 1      32256B        21936821759B  21936789504B  primary   ntfs         boot
 2      21936821760B  80023749119B  58086927360B  extended               lba
 5      26608813056B  80023749119B  53414936064B  logical   ntfs

LƯU Ý 2: Trình điều khiển NTFS nhân Linux mặc định cung cấp quyền truy cập chỉ đọc, do đó cần phải cài đặt và sử dụng ntfs-3gtrình điều khiển không gian người dùng hoặc ghi vào đĩa sẽ gây ra lỗi!

4. Tạo hình ảnh VHD bằng VBoxManage

Tại thời điểm này, chúng ta có thể sử dụng các tiện ích VirtualBox để chuyển đổi hình ảnh thô thành tệp VHD:

VBoxManage convertfromraw myfile.dd myfile.vhd --format VHD

bạn sẽ có thể gắn hình ảnh vhd bằng cách sử dụng vdfusehoặc qemu-nbdchuyển đổi nó thành tập tin .img (thông tin thêm: askubfox.com/questions/19430/ trộm )
Francesco

1
Trên một máy chậm, mã hóa của ssh có thể là một nút cổ chai. Thay vào đó, hãy xem xét sử dụng netcat (man nc) nếu bạn không cần mã hóa.
Jeremy

2
Bạn đã quên cd vào đĩa được gắn trước khi tạo tệp zero: mount -o loop, rw, offset = 26608813056 -t ntfs-3g /mnt/mydisk/myfile.dd / mnt / tmp_mnt; cd / mnt / tmp_mnt; mèo / dev / zero> zero.file; rm zero.file; Ngoài ra, bạn có thể sử dụng pv thay vì dd để hiển thị tiến độ ngay lập tức.
Smeterlink

1
Bạn có thể nên sử dụng kích thước khối lớn hơn với dd, ví dụ bs=4Mđể tăng tốc quá trình đáng kể.
Fritz

13

Tôi đã cố gắng thực hiện chính xác điều tương tự như OP (trong khi giải cứu cài đặt Windows) và cuối cùng đã tạo ra một công cụ mới cho nó , ntfsclone2vhd.

Sau đó, bạn chỉ cần làm một cái gì đó như thế này:

ntfsclone --save-image -o - /dev/sdXX | ntfsclone2vhd - /mnt/usb/output.vhd

1
Trò chơi muộn 3 năm, nhưng trang này là trang Google hàng đầu cho các từ khóa có liên quan, vì vậy nó vẫn có thể giúp một số linh hồn nghèo trong tương lai.
Yirkha

2
GIẢI PHÁP NÀY CẦN PHẢI ĐƯỢC BẮT ĐẦU. Đó là giải pháp đơn giản nhất (thanh phải makesao chép Linux) mà tôi đã tìm thấy trong nhiều giờ tìm kiếm. Bravo vì đã chủ động Yirkha!
dùng66001

3

Một cách tiếp cận là sử dụng một vài công nghệ tiện dụng: VirtualBox và ntfsprogsgói.

Các phiên bản gần đây của VirtualBox cho phép bạn tạo các tệp đĩa cứng VHD, đồng thời ntfsprogscung cấp ntfsclonetiện ích. Như tên gọi của nó, ntfsclonenhân bản hệ thống tập tin NTFS và tôi tin rằng nó thực hiện nó ở cấp hệ thống tập tin, bỏ qua các khối đĩa không sử dụng.

Vì vậy, để bắt đầu, hãy tạo một VM mới trong VirtualBox và cung cấp ổ đĩa VHD mới, trống cho nó. Ổ đĩa VHD chỉ cần lớn bằng kích thước dữ liệu được sử dụng trên ổ đĩa vật lý mà bạn muốn sao chép (thực ra, làm cho nó lớn hơn một chút, để cho phép một số phòng ngọ nguậy).

Tiếp theo, tìm một đĩa CD trực tiếp Linux có chứa ntfsprogsgói, cũng như openssh-server. Tôi thích CD cứu hộ hệ thống vì điều này, nhưng hầu như bất kỳ CD trực tiếp dựa trên Debian hay Ubuntu nào cũng hoạt động tốt.

Khởi động VirtualBox VM bằng đĩa CD trực tiếp Linux và khởi động sshdtrong VM để bạn có thể thực hiện các lệnh trên nó từ xa. Phân vùng ổ đĩa VHD trống một cách khủng khiếp, sử dụng bất kỳ công cụ phân vùng nào bạn thích (tôi thích đơn giản fdisk, nhưng tôi hơi già trường học).

Với một bản sao khác của đĩa CD trực tiếp Linux, hãy khởi động máy chứa đĩa vật lý mà bạn muốn sao chép. Tôi giả sử rằng VirtualBox VM và máy này có thể truy cập lẫn nhau qua mạng. Trên máy này, thực hiện lệnh sau (tất cả trên một dòng):

ntfsclone --save-image -o - /dev/sdXX |
    ssh root@VirtualBox-VM 'ntfsclone --restore-image --overwrite /dev/sdYY -'

Ở đâu:

  • /dev/sdXX là tên thiết bị (trên máy cục bộ) của ổ đĩa vật lý bạn muốn sao chép và
  • /dev/sdYY là tên thiết bị (trong VM) của ổ đĩa đích VHD.

Giải thích: Lệnh đầu tiên ntfsclonetrong đường ống trích xuất hình ảnh của hệ thống tệp NTFS nguồn và gửi nó qua đường hầm ssh, trong khi ntfsclonelệnh thứ hai nhận hình ảnh và khôi phục nó vào ổ đĩa VHD.

Khi hoạt động hoàn tất, tệp VHD sẽ chứa một bản sao chính xác tệp cho tệp vật lý gốc (không có bất kỳ lỗi phần cứng nào, như các thành phần xấu, có thể khiến quá trình hủy bỏ sớm).

Một điều cuối cùng bạn có thể muốn làm là chạy Windows chkdsktrên ổ đĩa VHD, chỉ để đảm bảo việc nhân bản không gây ra bất kỳ vấn đề nào (không nên, nhưng này, tôi hơi hoang tưởng về những điều này).


Xin chào, cảm ơn bạn rất nhiều cho giải pháp đề xuất của bạn! Cuối cùng, tôi đã sử dụng một phương pháp khác vì tôi có một số phân vùng trên đĩa để sao lưu và không thể dễ dàng sử dụng VirtualBox trên máy để sao lưu (xem câu trả lời của tôi để biết chi tiết), nhưng đề xuất của bạn về sử dụng VirtualBox và ssh tỏ ra rất hữu ích!
Federico

1

(Tôi biết đây là một bài viết cũ, nhưng có lẽ điều này ít nhất sẽ giúp đỡ người khác.)

Bạn có thực sự cần để có thể tạo hình ảnh trong Linux không? Tôi nghĩ rằng bạn đang cố gắng sao lưu ổ cứng Windows sang VHD. Tôi không nghĩ rằng các hệ thống tệp Linux có thể được gói gọn trong một thùng chứa VHD.

Một tiện ích SysIternals miễn phí có tên Disk2vhd sẽ tạo ra các VHD của Windows XP hiện đang chạy hoặc hệ thống mới hơn. Điều này cũng sẽ làm việc để chụp ảnh ổ đĩa gắn USB.


0

Tôi cũng cố gắng sao chép một hệ thống linux trực tiếp gần đây.

Vẫn không có giải pháp hoàn hảo. Đề xuất 2 cách bạn có thể thử:

(1) VMware vConverter (miễn phí)

Bạn cần cài đặt vsphere hypanneror (miễn phí) làm đích.

Tôi đã làm điều này những ngày trước, không có lucks để thành công. Đoán tôi cài đặt vSphere trên VirtualBox.

Tham khảo tại đây: http://xrubenx.blogspot.com.au/2010/01/vmware-converter-standopol.html

(2) Sử dụng cái này http://www.r1soft.com/tools/linux-hot-copy/

Tôi sẽ thử hotcopy R1Soft vào cuối tuần này.


Tôi sẽ không thử sao chép nóng vì điều này, wiki.r1soft.com/display/LTR1D/hcp-setup
NelsonT

0

Bạn cũng có thể sử dụng một đĩa CD trực tiếp với các cửa sổ. Nó không chính thức từ Microsoft nhưng hoạt động. Bạn có thể đặt nó vào ổ đĩa cd hoặc usb.

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.