Làm cách nào để sao chép phân vùng của Ảnh sang phân vùng của đĩa vật lý?


1

Cuối cùng tôi đã có một phím usb có thể khởi động làm việc với cài đặt windows 7 sẵn sàng để sử dụng, khi tôi nhận ra rằng một khi lựa chọn Ngôn ngữ xuất hiện, bàn phím và bàn di chuột của Macbook Pro không còn hoạt động nữa và tôi không có cách nào để thực sự cài đặt.

Tôi đã quyết định thiết lập VirtualBox Windows 7 x64, cài đặt trình điều khiển bàn phím và trackpad từ gói Phần mềm hỗ trợ Bootcamp và tắt VM.

Tôi đã sử dụng VBoxManage internalcommands converttoraw ... để biến đĩa ảo thành một .img. Đối với những người không quen thuộc với hộp ảo, nó tạo ra một hình ảnh đầy đủ của ổ cứng ảo như thể nó là một ổ cứng vật lý và hoạt động giống nhau.

Tôi đã sử dụng fdisk để xem hình ảnh:

sh-3.2# fdisk WINDOWS7.img 
Disk: WINDOWS7.img  geometry: 2610/255/63 [41943040 sectors]
Signature: 0xAA55
     Starting       Ending
#: id  cyl  hd sec -  cyl  hd sec [     start -       size]
------------------------------------------------------------------------
*1: 07    0  32  33 -   12 223  19 [      2048 -     204800] HPFS/QNX/AUX
2: 07   12 223  20 - 1023 254  63 [    206848 -   41734144] HPFS/QNX/AUX
3: 00    0   0   0 -    0   0   0 [         0 -          0] unused      
4: 00    0   0   0 -    0   0   0 [         0 -          0] unused

Sau đó, tôi đã sử dụng cách sau để bỏ qua phân vùng System Reserved và chỉ sao chép phân vùng dữ liệu windows vào lát cắt được chỉ định của Macintosh HD:

sh-3.2# dd if=WINDOWS7.img of=/dev/disk0s4 skip=206848 bs=65535

Để lại cho tôi những điều sau đây:

sh-3.2# fdisk /dev/disk0
Disk: /dev/disk0    geometry: 60821/255/63 [977105060 sectors]
Signature: 0xAA55
         Starting       Ending
#: id  cyl  hd sec -  cyl  hd sec [     start -       size]
------------------------------------------------------------------------
1: EE 1023 254  63 - 1023 254  63 [         1 -     409639] <Unknown ID>
2: AC 1023 254  63 - 1023 254  63 [    409640 -  684395032] <Unknown ID>
3: AB 1023 254  63 - 1023 254  63 [ 684804672 -    1269536] Darwin Boot 
4: 0B 1023 254  63 - 1023 254  63 [ 686074208 -  290768672] Win95 FAT-32

Điều này có vẻ đúng, nhưng để lại cho tôi một đĩa có khả năng Uninitialize mà tôi không thể gắn hoặc truy cập bằng tiện ích đĩa, khi tôi nhấp vào mount, không có gì xảy ra, ngay cả khi tôi thử mount -t ntfs /dev/disk0s4 /Volumes/Temp-Dir-Made-With-mkdir

disk utility

Điều gì có thể là vấn đề? Tôi có làm điều gì sai? Điều này là không thể?

Liệu lát 4 của đĩa0 không kế thừa hệ thống tập tin của phân vùng mà tôi đã viết cho nó?

Cảm ơn trước cho bất kỳ cái nhìn sâu sắc!

Chỉnh sửa 1:

@David Đó là một MacbookPro11,3 mà sẽ cho bạn biết tất cả mọi thứ bạn cần biết về nó. Theo như bootcamp, tôi đã tải nó trực tiếp lên windows từ Tài liệu hỗ trợ của Apple sau đây kbDL1720

@klanomath (Nhận xét 1) Đúng, nhưng đó là thông tin tốt để biết! Vì tò mò, tại sao 65535 có kích thước khối xấu? Tôi nghĩ rằng đặc tả kích thước khối chỉ phải thực hiện với số lượng khối được xử lý và đổ vào ổ đĩa / hình ảnh tại một thời điểm, về cơ bản cho phép bạn DD nhanh hơn với nhiều RAM hơn (với luật giảm dần có hiệu lực tất nhiên.) Tôi hoàn toàn sai trong cách hiểu của tôi về bs= tham số?

@ user3439894 Tôi đã nghĩ về điều đó, không cần MBR nếu tôi đang sử dụng một bộ tải khởi động khác, nhưng tôi đã bỏ qua phân vùng System Reserved. Vấn đề ở đây là tôi đã có 4 phân vùng trên ổ cứng ... Tôi quên phân vùng 0 là gì (không ở trước máy mac của tôi), phân vùng 1 là Mac, phân vùng 2 là phân vùng phục hồi mac và phân vùng 3 là phân vùng Tôi đã làm cho các cửa sổ. Có lẽ tôi đã sai về điều này ... Boot camp đã biến thành cơn ác mộng, sẽ rất tuyệt nếu nó chỉ lấy hình ảnh của tôi và làm công việc cho tôi, nhưng tôi lạc đề.


1
Các bs là hoàn toàn sai. Nó phải là 512. Sử dụng 65535 bỏ qua 206848x65535 Byte đầu tiên của hình ảnh! Sử dụng số lượng (41734144 -206848) - & gt; dd if=WINDOWS7.img of=/dev/disk0s4 skip=206848 bs=512 count=41527296 Đồng thời tạo một kích thước phù hợp (41527296x512 Byte) & amp; đánh dấu đúng phân vùng đĩa0s4 với gpt đầu tiên. Và tạo một bản sao lưu đầu tiên!
klanomath

1
Mô hình / năm của bạn Mac là gì? "Phần mềm hỗ trợ Boot Camp" có được sao chép chính xác vào khóa USB không? Đối với thủ tục trên của bạn, bạn đang vô vọng bị mất. Hầu như, mỗi bước bạn đã đưa ra đều có một lỗ hổng. Ngoài ra, bạn đã bỏ qua nhiều bước hơn bạn đã đưa vào câu hỏi đã đăng.
David Anderson

Ngoài ra: mặc dù nhận xét của tôi có thể trả lời chính xác câu hỏi của bạn, tôi không thể đảm bảo rằng bạn sẽ nhận được kết quả mong muốn: phân vùng "Windows 7 sẵn sàng khởi động"!
klanomath

@DeeJayh, Ngay cả với klanomath đã được sửa dd lệnh Windows 7 sẽ không hoạt động vì nó sẽ thiếu thông tin cần thiết để khởi động trong phân vùng bạn đang bỏ qua trong tệp WINDOWS7.img. Tôi khuyên bạn nên khắc phục sự cố ban đầu đã gửi cho bạn trên con đường phức tạp này để bắt đầu!
user3439894

@ALL Câu hỏi được cập nhật với một chỉnh sửa
DeeJayh

Câu trả lời:


0

Lệnh thích hợp để dd một phần của tệp thô cho phân vùng trong trường hợp của bạn là:

dd if=WINDOWS7.img of=/dev/disk0s4 skip=206848 bs=512 count=41527296

Các bs bên trong dd lệnh có thể được hiểu là kích thước khối nhân tạo của đầu vào và "tập tin" đầu ra. Vì lý do lịch sử và kỹ thuật, kích thước khối mặc định của dd là 512 byte.

Lý do sử dụng 512 (hoặc một số nguyên thích hợp ^ 2 bội / chia) là bs là kích thước khối của hình ảnh của bạn và phân vùng đĩa0s4 - là 512 hoặc 4096.

Kích thước khối (logic) của đĩa0 có thể được tính (ngay cả khi không biết liệu fdisk có hoạt động với 512 hoặc 4096 Byte bên trong không): 977105060 * 512 = 500 GB hoặc 977105060 * 4096 = 4 TB. SSD 4 TB vẫn không tồn tại cho MacBook Pro, do đó kích thước khối phải là 512 byte. Điều tương tự là hợp lệ cho tập tin img của bạn.

Bây giờ bạn có thể tính đến lý do tốc độ: càng lớn bs là, hình ảnh sẽ được sao chép càng nhanh.

Vì vậy, một lệnh dd hợp lệ trong trường hợp của bạn có thể là:

dd if=WINDOWS7.img of=/dev/disk0s4 skip=X bs=2 count=Y

Kể từ khi bs chỉ là 2 Byte, bạn phải sửa đổi bỏ qua (bỏ qua X khối à bs nếu) và đếm (Khối Y à bs được "viết"). Vì bỏ qua là 206848 * 512, X là 206848 * 512/2 và số đếm là 41527296 * 512, Y là 41527296 * 512/2 và lệnh trên là:

dd if=WINDOWS7.img of=/dev/disk0s4 skip=52953088 bs=2 count=10630987776

Một bài kiểm tra nhanh cho thấy:

dd if=/dev/zero of=~/Desktop/output.file bs=1 count=1048576
1048576 bytes transferred in 1.593527 secs (658022 bytes/sec)
dd if=/dev/zero of=~/Desktop/output.file bs=2 count=524288
1048576 bytes transferred in 0.800444 secs (1309993 bytes/sec)
dd if=/dev/zero of=~/Desktop/output.file bs=4 count=262144
1048576 bytes transferred in 0.384188 secs (2729331 bytes/sec)
dd if=/dev/zero of=~/Desktop/output.file bs=1024 count=1024
1048576 bytes transferred in 0.001932 secs (542700705 bytes/sec)

Cái lớn hơn bs là, càng nhanh dd lệnh được thực thi.

BTW: Lớn nhất bs làm việc cho bạn là 1048576 (ước số chung lớn nhất) vì 105906176 (= Skip-size in Byte) / 1048576 = 101 (và 21261975552 (= Count-size in Byte) / 1048576 = 20277). 101 là số nguyên tố!


Cho đến nay tất cả bs giá trị là bội số của 2. Nếu bs không đồng đều, điều này có thể va chạm với kích thước (khối-) của nếu / của . Ít nhất là trong trường hợp của bạn nếu của thậm chí có kích thước Byte vì chúng là bội số của 512.

Bây giờ rõ ràng là tại sao sử dụng bs = 65535 không thành công: bỏ qua và đếm số khối được xác định bởi bs và không phải bởi kích thước khối tự nhiên của hình ảnh hoặc phân vùng của bạn. Một lệnh thích hợp có thể là

dd if=WINDOWS7.img of=/dev/disk0s4 skip=1616.024... bs=65535 count=324436.950...

Ít nhất với tôi điều này không thành công vì 1616.024 ... là một giá trị số bất hợp pháp. Vì vậy, người ta có thể cho rằng tất cả các số phải là giá trị nguyên!

Một bs 65535 chỉ hoạt động nếu tổng kích thước của nếu / của bất kỳ bỏ qua hoặc tìm kiếm "ranh giới" là bội số của 65535 Byte.

Nếu là của bạn dd chỉ huy không chứa bất kỳ phần bỏ qua / tìm kiếm / đếm bạn có thể sử dụng kích thước bs tùy ý mặc dù.


Thông qua dd lệnh ở đầu câu trả lời sẽ hoạt động, có lẽ bạn sẽ không thể khởi động vào phân vùng Windows To Go (hoặc Windows Installer Ready-To-Go?). MBR của đĩa0 sẽ không chứa mục khởi động cần thiết.


Thật tuyệt vời, đây không phải là giải pháp cho vấn đề của tôi, nhưng nó là câu trả lời cho câu hỏi tôi đã hỏi về mặt kỹ thuật. Đây có thể sẽ là lựa chọn của tôi cho câu trả lời tốt nhất. Cảm ơn bạn rất nhiều vì đã làm rõ! Tôi thực sự có một sự hiểu biết tốt hơn bây giờ, và tôi thấy rằng sẽ giúp tôi trong tương lai!
DeeJayh

Tôi đã chọn nó là câu trả lời tốt nhất, bạn có thể làm rõ đoạn cuối với một giải pháp không? Bạn nói "MBR của đĩa0 sẽ không chứa mục khởi động cần thiết." nhưng tôi không thể đơn giản cài đặt một cái gì đó như GRUB2 vào thời điểm đó và chạy và chạy? Cảm ơn một lần nữa cho câu trả lời tuyệt vời!
DeeJayh

@DeeJayh David Anderson cung cấp rất nhiều câu trả lời tuyệt vời cho chủ đề. Trong cài đặt của tôi (ở nhà) tôi không thể cài đặt Windows 7 (và Bootcamp không cho phép cài đặt Windows trong Parallels OS X VM vì nó gặp sự cố) vì vậy tôi thực sự không thể trả lời đúng câu hỏi. Bạn có thể ổn bằng cách cài đặt rEFInd.
klanomath

Khi @DeeJayh cài đặt Windows trong VirtualBox, anh ta chọn phân vùng mặc định. Theo mặc định, Windows tạo hai phân vùng. (Boot Camp Assistant tạo một phân vùng duy nhất hoạt động, nhưng không phải là cấu hình mặc định.) Phân vùng đầu tiên là ổ đĩa NTFS "System Reserved" nhỏ hơn. Đây là phân vùng hoạt động có chứa tất cả các mã cần thiết để khởi động Windows. Điều này bao gồm Bản ghi khởi động âm lượng (VBR) và các tệp khởi động hệ thống ẩn bao gồm tệp BCD. Các dd lệnh đang bỏ qua tất cả các phần mềm cần thiết này. Cài đặt rEFInd sẽ không khắc phục tình trạng này.
David Anderson

@DeeJayh Có lẽ tốt nhất là hỏi một câu hỏi thứ hai để giải quyết vấn đề thực sự của bạn.
klanomath
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.