Có thể khởi động Windows 8.1 mà không cần bootmanager không?


10

Tôi đã cố gắng đưa ra một cách dễ dàng hơn để cài đặt khởi động kép Windows và Linux trên máy tính xách tay của tôi, không nhất thiết phải theo thứ tự đó. Những gì chúng ta thường phải làm là cài đặt Windows trước, sau đó cài đặt linux và cho phép GRUB xử lý Windows.

Vì vậy, những gì tôi đang cố gắng đạt được là tìm cách vượt qua quá trình cài đặt (cửa sổ) phiền phức đó và chỉ cần sử dụng một hình ảnh để sao chép trực tiếp vào ổ đĩa của tôi. Điều này cũng sẽ cho phép tôi giữ lại trình quản lý khởi động (GRUB) của mình. (không phải là tôi không thể khôi phục nó sau đó, nhưng chính sách của Microsoft là độc quyền, trong trường hợp này phủ nhận sự tồn tại của các trình quản lý khởi động khác trong hệ thống).

Trước tiên tôi đã có được một bản sao hợp pháp của Windows 8.1, sau đó tiến hành cài đặt nó trên máy ảo bằng VirtualBox. Sau đó, tôi đã tạo một phân vùng NTFS trên ổ cứng được phân vùng GPT của mình và sao chép nội dung của phân vùng Windows từ hình ảnh .vdi sang phân vùng mới được tạo.

Tất nhiên, nó chưa hoạt động. Tôi không biết cách thay thế bootmgr. Nó cho

File: \Boot\BCD
Status: 0xc000000e
Info: The Boot Configuration Data for your PC is missing or contains errors.

bởi vì nó không thể tìm thấy tệp đó từ phân vùng khác được sử dụng để khởi động, khôi phục hệ thống, v.v.

Bây giờ, tôi đã đọc rằng bootmgr cuối cùng thực thi winload.exe để khởi động Windows. Tôi không biết phải làm gì tiếp theo.

Tôi cho rằng nó nên hoạt động trên lý thuyết vì tôi có tất cả các tệp cần thiết để chạy Windows. Tôi cũng nghĩ rằng tôi không nên là người duy nhất nghĩ về điều này, và do đó tôi có thể đang thiếu một cái gì đó rất cơ bản ở đây. Có lẽ nó đã được thực hiện?

Tôi có ít ý tưởng làm thế nào khởi động hoạt động. Điều tôi quản lý để hiểu là khi bạn khởi động kép Windows và Linux, bạn xâu chuỗi bộ tải khởi động windows sang linux. Vì vậy, những gì tôi đang cố gắng để đạt được là bằng cách nào đó thoát khỏi bộ tải khởi động Windows.

BIÊN TẬP

Tôi đã xem xét các tập tin nhị phân bootmgr\Boot\BCD. bootmgrđọc tệp BCD và liệt kê các tùy chọn của bạn, trong đó bạn có thể chọn để khởi động.

Vì vậy, thông tin như thực thi winload.exenằm trong tệp BCD. Bây giờ, tôi nghĩ rằng bootmgrchính nó được thực thi bởi syslinux bằng cách sử dụng chain.c32mô-đun. Những gì tôi đang cố gắng là bằng cách nào đó thực thi bộ tải khởi động windows, tức là winload.exetrực tiếp từ syslinux (nếu có thể) hoặc sửa đổi bootmgrđể nó winload.exetự thực thi (đường dẫn của nó sẽ trực tiếp trong bootmgrtệp thực thi) mà không cần tìm BCD hoặc bất cứ thứ gì khác.

Ngủ đông (yêu cầu một quy trình khác) không liên quan đến tôi ở bước này.

Chỉnh sửa câu hỏi của bạn để cho chúng tôi biết loại phần sụn và (nếu EFI) xem bạn đã bật Mô-đun hỗ trợ tương thích trong cài đặt phần sụn

Phần sụn của tôi là EFI (đã bật CSM) và tôi thường khởi động vào Arch Linux bằng GRUB. Tôi đã phát hiện ra rằng bootmgrthực thi System32\winload.exetrên các hệ thống cũ và System32\winload.efitrên EFI.

Tôi có 0.0ý tưởng về những gì để làm từ đây. Trong 10 ngày qua, tôi đã cố gắng thay đổi BCD và tôi nghĩ rằng tôi sắp đạt được thành công. Nhưng điều đó không liên quan, bởi vì điều tôi thực sự muốn làm là bỏ qua Windows Boot Manager hoàn toàn.

Nếu bạn có bất kỳ ý tưởng nào cho dù có cách nào để thực thi điều đó winload.efitừ trình bao EFI (chỉ là phỏng đoán) hoặc một số sửa đổi khác cho GRUB để nó sẽ khởi động Windows ở chế độ EFI mà không cần bộ tải chuỗi.

Bất kỳ lời khuyên đều được chào đón.

Phụ lục

Sau bài viết diễn đàn có thể cung cấp một số cái nhìn sâu sắc hữu ích:

http://reboot.pro/topic/19371-chainload-directly-to-winloadexe/

1.

Grub4dos ngay bây giờ có thể tải chuỗi bộ tải khởi động (như NTLDR hoặc BOOTMGR) vì nó có thể hoạt động như một sự thay thế mã chứa trong bộ khởi động "bình thường" (nghĩa là 300 byte mã máy).

Mã này chỉ cần đặt một vài tham số và sau đó gọi trình nạp.

Ngay cả điều đó là (không) dễ dàng để hiểu và sao chép với các mã khác nhau.

Trình tải hệ thống NT như BOOTMGR có ít nhiều trong một hệ điều hành .exe một chế độ "chế độ thực" (không hoàn toàn không giống với DOS) và các phương tiện / công cụ để phân tích cả văn bản đơn giản và tổ ong Registry, đó không phải là thứ có thể tái tạo viết từ đầu dễ dàng.

Những người tốt @ReactOS đang làm việc để viết FREELDR (nhằm mục đích thay thế cho NTLDR đơn giản hơn nhiều) kể từ NĂM (và tôi tin rằng có một số lập trình viên ReactOS thực sự giỏi và giỏi về nó).

vẻ như (nhưng không được ghi lại rõ ràng) rằng họ đã quản lý để khởi động thử nghiệm một Máy chủ 2003 với NTLDR.

2.

Với việc giới thiệu hỗ trợ cho (U) EFI, BootMgr giúp trừu tượng hóa sự khác biệt giữa BIOS và (U) EFI. Ví dụ, đây là hai chuỗi:

BIOS (PCAT) -> BootMgr { BootMgr stub -> embedded BootMgr.exe } -> WinLoad.exe -> Windows
64-bit (U)EFI -> BootMgFw.efi -> BootMgr.efi -> WinLoad.efi -> Windows

WinLoad mong muốn có một môi trường nhất định (bao gồm API). BootMgr đảm nhiệm việc này, vì vậy [gần như] cùng một chương trình WinLoad sẽ hoạt động trong cả hai môi trường.

Trên thực tế, (U) EFI định nghĩa một phương thức lưu trữ và tìm nạp các tham số khởi động, do đó BCD của BootMgr bao gồm cùng một mục đích, bất kể EFI của BIOS / (U).

Nhưng ngoài sự khác biệt về BIOS và (U) EFI, BootMgr cho phép bạn thực hiện "lựa chọn khởi động", trong khi WinLoad khởi động một hệ điều hành cụ thể mà nó biết cách khởi động.

Tùy thuộc vào mức độ môi trường mà WinLoad dự kiến ​​sẽ có mặt, có thể gọi WinLoad trực tiếp. Wimboot của Michael Brown gọi trực tiếp BootMgr PE [1], do đó, nó có thể gọi trực tiếp WinLoad, ngoại trừ WinLoad có thể muốn có nhiều môi trường hơn. Bạn có thể thử nó!

[1] Không nên nhầm lẫn với BootMgr mà GRUB4DOS và Syslinux 'chain.c32 có thể gọi. BootMgr đó bao gồm một sơ khai biết cách gọi BootMgr PE nhúng.


1
Bạn chưa cung cấp đủ thông tin. Chỉnh sửa câu hỏi của bạn để cho người trả lời biết liệu máy này có phần sụn EFI hay phần sụn kiểu PC / AT cũ. Hiện tại bạn đang nói về các chương trình bootstrap MBR trên các đĩa được phân vùng EFI, nghĩa là ( trừ khi người ta đang sử dụng một trong những chương trình của tôi hoặc của H. Peter Anvin) và có thể không phải là cách mà máy của bạn khởi động .
JdeBP

Chính sách mà bạn mô tả không thoát khỏi Microsoft sẽ ngăn mọi người khỏi các hệ thống khởi động kép
Ramhound 15/03/2016

@JdeBP Bạn nói đúng. Tại một số điểm, tôi thực sự đã sử dụng cả hai. Tôi đã sử dụng syslinux với phương pháp pc \. Sau đó, tôi đã cài đặt GRUB vào phân vùng EFI. Vì vậy, máy tính xách tay của tôi hỗ trợ cả hai, nhưng tôi đã có kết quả giống nhau mỗi lần. Tôi sẽ cố gắng để thông báo cho mình trong khi chờ đợi. Mặt khác, bạn có hiểu những gì tôi đang cố gắng đạt được? Quên những gì tôi đã mô tả trước đây, có lẽ bạn có thể cho tôi lời khuyên cho dù điều đó có thể thực hiện được hay không.
osolmaz

Tôi đã không yêu cầu loại phần mềm nhàn rỗi. Đó là một mốc thời gian quan trọng, mà bạn phải cung cấp. Không có nó, mọi người thậm chí không thể bắt đầu một câu trả lời thích hợp. Chỉnh sửa câu hỏi của bạn để cho chúng tôi biết loại phần sụn và (nếu EFI) xem bạn đã bật Mô-đun hỗ trợ tương thích trong setuptiện ích của phần sụn chưa .
JdeBP

@JdeBP Tôi đã chỉnh sửa câu hỏi.
osolmaz

Câu trả lời:


5

Để trả lời câu hỏi ban đầu của bạn, không. Windows không thể được tải mà không cần thông qua bộ tải khởi động của riêng nó (trong trường hợp cài đặt UEFI, bootmgfw.efi). Điều này là do Windows hy vọng rằng bootmanager sẽ ở đó VÀ để gọi winload.efi. Nếu điều đó không xảy ra, thì Windows sẽ sập cho đến khi bạn khắc phục được sự cố. Có nhiều lý do cho việc này (thực tế và không biết gì). Hầu hết, đó là do Microsoft đã viết bootmanager để xử lý tất cả mọi thứ (tải HĐH, tải môi trường phục hồi, môi trường tiền giả giả, v.v.). Cách duy nhất để hiện tại đạt được bất kỳ sự tinh tế nào là sử dụng chuỗi tải bằng Grub-efi.


Trước khi tôi chấp nhận đây là câu trả lời, tôi phải hỏi: Có phải nhiệm vụ đó sẽ rất khó thực hiện, chủ yếu là do số lượng hack cấp độ thấp cần thiết để đánh lừa bất kỳ chương trình nào tham gia vào quá trình; sự lừa dối là Windows vẫn sẽ nghĩ rằng nó đã được khởi động với trình khởi động riêng của nó, trong khi thực tế nó là một thứ khác ... Và tôi đoán mỗi phiên bản Windows sẽ yêu cầu nỗ lực riêng. Nhưng điều này không khiến nhiệm vụ bất khả thi, chỉ thực sự khó khăn phải không?
osolmaz

3
Tôi sẽ không nói rằng nó hoàn toàn không thể (trong lập trình), nhưng bạn sẽ phải đảo ngược các cuộc gọi mà bootmgfw.efi thực hiện với hệ điều hành windows. Số lượng hack cấp độ thấp liên quan đến kết hợp với việc cần thiết kế đảo ngược các cuộc gọi giao thức khởi động cấp thấp đến trình tải hệ điều hành rất tốn kém về thời gian. Bạn sẽ không chỉ đánh lừa Windows để tin rằng bootmgfw.efi đã ở đó, mà cả BCD tồn tại và nó được tạo ra bởi các công cụ của chính nó, v.v.
ChrisR.

2

Bạn cần thêm bộ tải khởi động Windows EFI vào danh sách các tùy chọn khởi động trong phần sụn UEFI. Bằng cách đó, bạn sẽ có thể chọn xem:

  1. GRUB2 nên được tải hoặc
  2. Bộ tải khởi động Windows nên được tải

Các tùy chọn bổ sung như ổ đĩa DVD, ổ cứng ngoài hoặc khởi động mạng cũng sẽ hiển thị tại thời điểm đó. Bộ tải khởi động UEFI thường nằm trên phân vùng \EFI( /boot/efi/). Vì bạn vừa sao chép hình ảnh ổ cứng Windows mà không cài đặt Windows đúng cách, phân vùng EFI của máy hiện tại của bạn có thể không chứa bộ tải khởi động thích hợp. Vì vậy, nó là cần thiết để

  1. Sao chép bộ nạp khởi động vào phân vùng EFI
  2. Thêm Windows làm tùy chọn khởi động cùng với GRUB2

Sau đó, bạn có thể chọn hệ điều hành nào được khởi động bằng cách thay đổi thứ tự khởi động trong BIOS. Trên máy tính xách tay của tôi, nhấn F12sẽ hiển thị một menu để chọn bộ tải khởi động nào sẽ tải.

Đối với các bước này, tôi sẽ sử dụng efibootmgrvà làm theo các bước từ hướng dẫn này :

Bạn sẽ cần sao chép tệp tương ứng bootmgfw.efivào phân vùng EFI tại \EFI\Microsoft\Boot\bootmgfw.efihoặc /boot/efi/Microsoft/Boot/bootmgfw.efikhi sử dụng Linux:

# mkdir -p /boot/efi/EFI/Microsoft
# cp -r Microsoft /boot/efi/EFI/Microsoft

trong đó Microsoftmột thư mục chứa các tệp EFI gốc cho phiên bản Windows của bạn.

Sau đó, bạn cần thêm .efitệp vào các mục khởi động UEFI bằng cách sử dụng:

# efibootmgr -c -d /dev/sda -p 1 -l \\EFI\\Microsoft\\Boot\\bootmgfw.efi -L "Windows Boot Manager"

tất nhiên bạn cần thay đổi /dev/sda-p 1các giá trị chính xác cho thiết bị đĩa và số phân vùng.

Lưu ý điều này nếu bạn có máy tính xách tay Lenovo:

Cũng lưu ý rằng ít nhất một nhà sản xuất (Lenovo) gửi các sản phẩm có lỗi đã biết khiến hệ thống từ chối khởi động trừ khi tên của trình tải khởi động là "Windows Boot Manager" hoặc "Red Hat Enterprise Linux".

Khởi động PC của bạn sau đó sẽ hiển thị một cái gì đó như thế này (nếu bạn giữ các phím tương ứng trong quá trình khởi động):

Windows Boot Manager
ubuntu
USB CD
USB FDD
ATAPI CD
ATA HDD2

(etc.)

bcdedittrên Windows cho thấy điều này:

C:\WINDOWS\system32>bcdedit /enum firmware

Firmware Boot Manager
---------------------
identifier              {fwbootmgr}
displayorder            {bootmgr}
                        {bb086763-b111-11e2-bf8e-806e6f6e6963}
                        {8e7fb978-8bc8-11e2-bf2f-806e6f6e6963}
timeout                 0

Windows Boot Manager
--------------------
identifier              {bootmgr}
device                  partition=\Device\HarddiskVolume2
path                    \EFI\Microsoft\Boot\bootmgfw.efi
description             Windows Boot Manager
locale                  en-US
inherit                 {globalsettings}
integrityservices       Enable
default                 {current}
resumeobject            {ec215a09-8bc4-11e2-bf2b-0024d7eb75a4}
displayorder            {current}
toolsdisplayorder       {memdiag}
timeout                 2

(...)

Firmware Application (101fffff)
-------------------------------
identifier              {bb086763-b111-11e2-bf8e-806e6f6e6963}
device                  partition=\Device\HarddiskVolume2
path                    \EFI\ubuntu\grubx64.efi
description             ubuntu

1
Rất độc đáo giải thích, cảm ơn bạn. Vài ngày trước, tôi đã thành công trong việc làm điều tương tự, nhưng vẫn sử dụng một phân vùng riêng cho trình quản lý khởi động Windows EFI và thông qua chuỗi tải với GRUB. Bây giờ tôi đã học được rằng tôi cũng có thể sử dụng EPS ban đầu của mình. Ngoài ra, thay vì sử dụng bcdedit, tôi đã sử dụng hivex để sửa BCD; Tôi dự định viết một bộ công cụ miễn phí để có thể thao tác các tệp BCD trong linux. Nhưng những gì tôi đang cố gắng để đạt được là một cái gì đó khác nhau. Nếu bootmgfw.efi bằng cách nào đó thực thi winload.efi, tại sao tôi không thể thực thi winload.efi trực tiếp từ GRUB?
osolmaz

Ồ tôi hiểu rồi. Vì vậy, bạn muốn bỏ qua việc tải Windows Boot Manager (bootmgfw.efi) và tải Windows Bootloader (winload.efi) trực tiếp bằng cách đọc BCD System Store? (Đi theo các định nghĩa từ đây .) Điều đó thật thú vị, tôi chưa bao giờ nghe nói về ai đó làm điều đó. Động lực của bạn là gì, tại sao cần phải tải trực tiếp winload.efi? Ngoài ra, bạn có bản sao đầy đủ của \EFI\Boot\Microsoftthư mục để thử nghiệm không (có một vài tệp trong đó)?
jmiserez

Chà, nếu tôi đạt được điều đó, tôi thậm chí sẽ không cần đọc BCD, tôi chỉ có thể thêm một mục trong GRUB cho phân vùng. (Tôi không bao gồm ngủ đông và phục hồi hệ thống ở đây) Động lực của tôi là, việc cài đặt windows sẽ dễ dàng hơn nhiều mà không phải lo lắng rằng bạn sẽ phải sửa nó sau. Hữu ích cho các hệ thống, cài đặt hàng loạt, v.v. (và đối với tôi ^^). Đối với lý do tại sao tải trực tiếp winload.efi: xử lý các tệp đăng ký Windows (nhị phân) đóng kín tẻ nhạt hơn nhiều so với xử lý các tệp cấu hình văn bản đơn giản như GRUB. Nó chỉ là dễ dàng hơn để loại bỏ người đàn ông giữa.
osolmaz

1
Tôi hiểu ý của bạn, vâng điều đó sẽ rất tiện dụng. Tôi tự hỏi nếu 1) có bất kỳ biến bootmgfw.efi nào chuyển sang winload.efi khi nó được khởi chạy và 2) nếu có thể có vấn đề với khởi động an toàn và một số chuỗi chứng chỉ cần thiết. Bạn đã tìm ra ý inherit {bootloadersettings}nghĩa của cửa hàng BCD chưa?
jmiserez

1
3) Vì tôi đã sử dụng hivex, tôi có thể đoán đối tượng tương ứng. Có một đối tượng cài đặt "toàn cầu" trong tổ ong và mọi đối tượng khác đều có tham chiếu đến nó. Điều tôi có thể nói là, chỉ có hai đối tượng là đủ để khởi động vào windows: 1: đối tượng Windows Boot Manager với hằng số uuid {9dea862c-5cdd-4e70-acc1-f32b344d4795} 2: đối tượng chứa thông tin phân vùng và đường dẫn bootloader cho root Windows thực tế của bạn. Phần khó nhất là hiểu cấu trúc dữ liệu nhị phân chỉ định phân vùng. Điều này chủ yếu được thực hiện bởi wodny: bitbucket.org/wodny/libbcd/src .
osolmaz

0

Bạn có thể thực hiện cài đặt theo bất kỳ thứ tự nào, ví dụ như Cài đặt GNU / Linux và sau đó là Windows hoặc ngược lại.

Chỉ cần làm như sau sau khi bạn đã cài đặt tất cả các hệ điều hành của bạn.

  1. Lấy "Đĩa sửa chữa khởi động" từ đây. http://sourceforge.net/projects/boot-repair-cd/

  2. Tạo một ổ USB có thể khởi động trực tiếp của nó (Hướng dẫn trên Pendrivelinux.com)

  3. Hoặc ghi tập tin ISO vào đĩa CD.

  4. Khởi động thông qua điều này và làm theo các hướng dẫn trên màn hình. Bạn sẽ có một GRUB được cài đặt lại chứa tất cả các hệ điều hành đã cài đặt của bạn.

Tất cả tốt nhất.


1
Tôi nhận thức được điều đó, những gì tôi muốn là một cái gì đó khác biệt. Tôi đang hỏi liệu Windows có thể được khởi động trực tiếp mà không cần tải chuỗi không.
osolmaz
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.