Khi tôi di chuyển một phân vùng NTFS có thể khởi động với Windows trên nó sang một khối bù khác, cần cập nhật gì để làm cho nó có thể khởi động lại?
Bối cảnh: Tôi dự định viết một chương trình thực hiện các hành động cần thiết , đó là lý do tại sao tôi không tìm kiếm hướng dẫn cách sử dụng các công cụ của Microsoft bằng cách khởi động từ Windows DVD. Thay vào đó, tôi cần làm thế nào để tự sửa đổi những thứ này, để tôi có thể viết một giải pháp dễ dàng hơn cho người dùng PC trung bình khi anh ấy muốn chuyển hệ thống Windows của mình sang một đĩa cứng lớn hơn.
Cụ thể, đây là những gì tôi đã thử:
Tôi có một đĩa có nhiều phân vùng, một trong số đó là phân vùng NTFS có Windows và đĩa sử dụng khối MBR cũ đơn giản 0 cho bố cục phân vùng (không quá 4 phân vùng).
Bây giờ tôi định dạng và phân vùng một đĩa mới, lớn hơn. Ở đó tôi dành chỗ cho phân vùng NTFS và sao chép nội dung từ phân vùng Windows NTFS của đĩa cũ vào. Và tôi làm cho phân vùng "hoạt động".
Tuy nhiên, khi tôi cố gắng khởi động từ đĩa này, tôi nhận được thông báo "lỗi đọc" ngay lập tức và quá trình khởi động dừng lại, văn bản chính xác là:
A disk read error occurred
Press Ctrl+Alt+Del to restart
Tôi đã xác minh rằng cả hai đĩa có cùng mã vùng khởi động trong khối 0.
Dường như với tôi rằng một cái gì đó khác có thể cần cập nhật. Tôi đoán rằng ở đâu đó có một tham chiếu khối tuyệt đối mà tôi cần cập nhật, có thể chỉ đến trình tải cấp tiếp theo hoặc tới kernel NT.
Cập nhật: Tôi tìm thấy này bài viết sẽ khá vào chiều sâu của những gì tôi muốn biết. Tuy nhiên, nó nói để sửa đổi boot.ini, nhưng tôi đã cài đặt Windows 7 ở đây, nơi những thứ đó dường như đã thay đổi: Không có boot.ini mà là một thư mục có tên System Volume Information với GUID và các dữ liệu khác có liên quan đến vấn đề của tôi . Tiếp tục đào ...
Cập nhật 2: Nhờ trang web có giao diện khủng khiếp nhưng rất nhiều thông tin của starman , tôi đã có thể tìm ra bước đầu tiên: Khu vực khởi động NTFS có một trường dành cho các khu vực "ẩn". Feld này phải chứa số khu vực của khu vực khởi động. Điều này giải quyết thông báo "đọc lỗi". Tuy nhiên, bây giờ, tôi nhận được lỗi "BOOTMGR bị thiếu". Có vẻ như có một nơi khác phải điều chỉnh số khối, nhưng tôi không thể tìm thấy bất cứ điều gì trong danh sách mã về điều này.
Tôi tìm thấy rất nhiều trang web trợ giúp đề xuất các công cụ Windows để khắc phục sự cố "BOOTMGR bị thiếu" này, nhưng dường như không ai biết những gì diễn ra sau hậu trường. Kiểu như đề nghị cài đặt lại Windows khi có một chút vấn đề với nó. Ít nhất, các bản sửa lỗi đó dường như hoạt động, chủ yếu liên quan đến các công cụ Bcdedit và Bootrec. Bây giờ, ai biết những gì họ làm, đặc biệt là sau này, liên quan đến một phân vùng di chuyển?
Cập nhật 3: Sau nhiều lần thử và lỗi, tôi tin rằng giải pháp này nằm trong tệp đăng ký BCD-Template , thường nằm trong \ Windows \ System32 \ config. Nếu tôi nhận được cập nhật này bằng lệnh "bcdboot", Windows sẽ khởi động từ nó. Bây giờ tôi đang ở giữa để tìm ra thông tin nào mà sổ đăng ký này có liên quan đến câu hỏi trên. Bất kỳ con trỏ đến nội dung của đăng ký này đều được chào đón.
Cập nhật 4: Hóa ra trong khi tệp BCD-Template được viết lại và có nội dung nhị phân khác với phiên bản trước, các giá trị bên trong không thay đổi. Vì vậy, nó phải là một cái gì đó khác mà bcdboot.exe viết. Trước đây tôi đã kiểm tra xem nó có thay đổi 32 khối khởi động đầu tiên của phân vùng không, nhưng chúng dường như không thay đổi. Bản đồ Parititon cũng không được thay đổi. Vì vậy, bcdboot sửa đổi gì ngoài đăng ký BCD? Bất kỳ lời khuyên về làm thế nào tôi có thể theo dõi điều đó? Có công cụ cấp thấp nào chỉ cho tôi biết tập tin nào ghi vào chương trình không?
Cập nhật 5: Câu trả lời dường như là: c: \ Boot \ BCD cũng được thay đổi và đó dường như là tệp chính cho quy trình của người quản lý khởi động. Tôi sẽ điều tra việc này sau ...
Cập nhật 6: Có vẻ như là một chi tiết quan trọng mà tôi đã có hai phân vùng ban đầu được tạo khi tôi cài đặt Windows 7: Một phân vùng nhỏ gồm 204800 cung có vẻ là phân vùng bootstrap, tiếp theo là phân vùng thực, lớn, chứa hệ thống Windows ( ổ C :). Khi tôi cố gắng chuyển cài đặt này sang một đĩa mới, lớn hơn, tôi đã giữ nguyên hai phân vùng trên ổ đĩa mới, mặc dù chúng kết thúc ở một độ lệch khác nhau. Điều này một mình dẫn đến thông báo "BOOTMGR bị thiếu". Kể từ đó, tôi chỉ sử dụng bcdboot.exe trên phân vùng Windows, đã thêmtệp \ Boot \ BCD trên phân vùng đó. Tập tin đó (và thư mục) ban đầu chỉ tồn tại trên phân vùng nhỏ hơn. Do đó, vấn đề này có thể phức tạp hơn trong trường hợp của tôi khi một phân vùng (bộ căng dây khởi động) được chuyển đến một phân vùng khác (phân vùng chứa HĐH), trong khi những người khác có thể chỉ phải xử lý một phân vùng chứa cả hai và có thể có giải pháp đơn giản hơn
Cập nhật 7: Tìm thấy thêm một chi tiết: Tệp \ Boot \ BCD ghi lại số sê-ri của MBR. Nếu số đó không khớp, hệ thống sẽ không khởi động. Tiếp theo tôi sẽ kiểm tra nếu có một tham chiếu khối tuyệt đối được lưu trữ trong đó.
\BCD\Boot
, và bạn thường muốn chỉnh sửa đó với bcdedit.exe
, không bcdboot
. Và đúng, phân vùng riêng để khởi động (chỉ được yêu cầu khi bạn sử dụng tính năng mã hóa toàn bộ đĩa, vì mã giải mã sau đó phải được lưu trữ bên ngoài phân vùng cửa sổ chính) nếu nó tồn tại.