자체 부팅 관리자없이 Windows 8.1을 부팅 할 수 있습니까?


10

필자는 랩톱에 Windows 및 Linux 이중 부팅을 설치하는 쉬운 방법을 제시하려고 노력했지만 그 순서는 아닙니다. 우리가 일반적으로해야 할 일은 먼저 Windows를 설치 한 다음 Linux를 설치하고 GRUB이 Windows를 처리하도록 허용하는 것입니다.

그래서 내가 달성하려는 것은 그 성가신 설치 프로세스 (윈도우)를 우회하고 이미지를 사용하여 드라이브에 직접 복사하는 방법을 찾는 것입니다. 그래야 GRUB (부팅 관리자)을 유지할 수 있습니다. (나중에 복원 할 수는 없지만이 경우 시스템에 다른 부트 관리자가 존재하지 않도록 독점하는 것이 Microsoft의 정책입니다).

먼저 합법적 인 Windows 8.1 복사본을 얻은 다음 VirtualBox를 사용하여 가상 컴퓨터에 설치했습니다. 그런 다음 GPT 파티션 된 하드 드라이브에 NTFS 파티션을 만들고 Windows 파티션의 내용을 .vdi 이미지에서 새로 만든 파티션으로 복사했습니다.

물론 아직 작동하지 않습니다. bootmgr을 바꾸는 방법을 모르겠습니다. 그것은 준다

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

부팅, 시스템 복구 등에 사용되는 다른 파티션에서 해당 파일을 찾을 수 없기 때문에

이제 bootmgr이 winload.exe를 실행하여 Windows를 부팅한다는 것을 읽었습니다. 다음에 무엇을 해야할지 전혀 모른다.

Windows를 실행하는 데 필요한 모든 파일이 있기 때문에 이론적으로 작동해야한다고 생각합니다. 또한 내가 이것을 생각한 유일한 사람이되어서는 안된다고 생각하므로 여기에 매우 기본적인 것이 빠져있을 수 있습니다. 어쩌면 이미 끝났습니까?

부팅이 어떻게 작동하는지 잘 모릅니다. 내가 이해 한 것은 Windows와 Linux를 이중 부팅 할 때 Windows 부트 로더를 Linux에 연결한다는 것입니다. 그래서 내가 달성하려는 것은 어떻게 든 Windows 부트 로더를 제거하는 것입니다.

편집하다

나는 이진 파일을 bootmgr보고있다 \Boot\BCD. bootmgrBCD 파일을 읽고 부팅하도록 선택할 수있는 옵션을 나열합니다.

따라서 실행과 같은 정보 winload.exe는 BCD 파일에 있습니다. 이제 모듈 bootmgr자체를 사용하여 syslinux가 자체적으로 실행됩니다 chain.c32. 내가 어떻게 든 윈도우 부트 로더를 실행 할 일은 즉 노력하고 winload.exe(가능한 경우) SYSLINUX에서 직접 또는 수정 bootmgr자신을 실행합니다 winload.exe(그 경로에 직접 것 자체 bootmgrBCD 또는 다른 용도로 보지 않고 실행).

이 단계에서는 최대 절전 모드 (다른 절차가 필요함)가 중요하지 않습니다.

펌웨어 유형 및 펌웨어 설정에서 호환성 지원 모듈을 활성화했는지 여부를 EFI 인 경우 질문을 편집하십시오.

내 펌웨어는 EFI (CSM 사용)이며 일반적으로 GRUB을 사용하여 Arch Linux로 부팅합니다. 레거시 시스템과 EFI에서 bootmgr실행 System32\winload.exe되는 것을 발견했습니다 System32\winload.efi.

나는 0.0여기서 무엇을 해야할지에 대한 아이디어가 있습니다. 지난 10 일 동안 BCD를 변경하려고했지만 성공할 것으로 생각합니다. 그러나 실제로 원하는 것은 Windows 부팅 관리자를 우회하는 것이므로 관련이 없습니다.

winload.efiEFI 셸에서 실행하는 방법이 있는지 (혹은 추측) GRUB에 대한 다른 수정 방법이 있는지 여부를 알고 있다면 체인 로더없이 EFI 모드에서 Windows를 부팅합니다.

모든 조언을 환영합니다.

추가

다음 포럼 게시물은 유용한 통찰력을 제공 할 수 있습니다.

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

1.

grub4dos는 현재 부트 로더 (NTLDR 또는 BOOTMGR 등)를 "일반"부트 섹터 (예 : 300 바이트의 기계 코드)에 포함 된 코드의 대체물로 사용할 수 있기 때문에 부트 로더를 체인로드 할 수 있습니다.

이 코드는 단순히 몇 가지 매개 변수를 설정 한 다음 로더를 호출합니다.

심지어 다른 코드로 이해하고 복제하기가 쉽지 않았습니다.

BOOTMGR과 같은 NT 시스템 로더는 단일 .exe에서 "실제 모드"운영 체제 (DOS와 완전히 다른 것은 아님)와 일반 텍스트와 레지스트리 하이브를 모두 구문 분석 할 수있는 기능 / 도구를 가지고 있습니다. 처음부터 쉽게 작성.

좋은 사람들 @ReactOS는 년 이후 FREELDR (훨씬 간단한 NTLDR의 대체를 목표로 함)을 작성하기 위해 노력하고 있습니다 (ReactOS 프로그래머 중에는 정말 훌륭하고 좋은 사람들이 있다고 생각합니다).

보인다 그들이 NTLDR과 실험적 Server 2003을 부팅 관리하는 것을 (그러나 그것은 명확하게 문서화되어 있지 않습니다).

2.

BootUgr은 (U) EFI 지원을 도입하여 BIOS와 (U) EFI의 차이점을 추상화합니다. 예를 들어 다음은 두 가지 시퀀스입니다.

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

WinLoad는 특정 환경 (API 포함)이 존재할 것으로 예상합니다. BootMgr이이를 처리하므로 거의 동일한 WinLoad 프로그램이 두 환경에서 모두 작동합니다.

실제로 (U) EFI는 부팅 매개 변수를 저장하고 가져 오는 방법을 정의하므로 BootMgr의 BCD는 BIOS / (U) EFI에 상관없이 동일한 목적을 다룹니다.

그러나 BootMgr은 BIOS와 (U) EFI의 차이점을 제외하고 "부팅 선택"을 할 수있는 반면 WinLoad는 부팅 방법을 알고있는 특정 운영 체제를 부팅합니다.

WinLoad가 존재하는 환경의 양에 따라 WinLoad를 직접 호출 할 수 있습니다. Michael Brown의 wimboot는 BootMgr PE [1]를 직접 호출하므로 WinLoad가 더 많은 환경을 원한다는 점을 제외하고 WinLoad를 직접 호출 할 수 있습니다. 당신은 그것을 시도 할 수 있습니다!

[1] GRUB4DOS와 Syslinux의 chain.c32가 호출 할 수있는 BootMgr과 혼동하지 마십시오. 해당 BootMgr에는 포함 된 BootMgr PE를 호출하는 방법을 알고있는 스텁이 포함되어 있습니다.


1
아직 충분한 정보를 제공하지 않았습니다. 이 컴퓨터에 EFI 펌웨어 또는 구형 PC / AT 스타일 펌웨어가 있는지 응답자에게 알리기 위해 질문을 편집 하십시오. 현재 EFI 파티션 디스크의 MBR 부트 스트랩 프로그램에 대해 이야기하고 있습니다. ( 내 프로그램 중 하나를 사용하지 않거나 H. Peter Anvin의 경우를 제외하고는) 말도 안되며 컴퓨터가 부트 스트랩하는 방식아닐 수도 있습니다 .
JdeBP

귀하가 설명하는 정책으로 Microsoft를 종료하지 않아도 이중 부팅 시스템을 막을 수 있습니다
Ramhound

@JdeBP 당신이 맞아요. 어느 시점에서, 나는 실제로 둘 다 사용하고있었습니다. pc \ at 메소드와 함께 syslinux를 사용하고있었습니다. 그런 다음 GRUB을 EFI 파티션에 설치했습니다. 내 노트북은 두 가지를 모두 지원하지만 매번 같은 결과를 얻었습니다. 그 동안 나는 나 자신에게 알리려고 노력할 것이다. 다른 한편으로, 당신이 달성하려는 것을 이해하고 있습니까? 내가 전에 설명한 것을 잊어 버릴 수 있는지, 아마도 그것이 가능한지 아닌지 조언을 줄 수 있습니다.
osolmaz

펌웨어 유형을 묻지 않았습니다. 그것은 당신이 제공해야 할 중요한 데이텀입니다. 그것이 없으면 사람들은 적절한 대답을 시작할 수 없습니다. 펌웨어 유형 및 펌웨어 유틸리티 에서 호환성 지원 모듈을 활성화했는지 여부를 EFI 인 경우 질문을 편집 하십시오 setup.
JdeBP

@ JdeBP 질문을 편집했습니다.
osolmaz

답변:


5

원래 질문에 대답하기 위해 Windows는 자체 부트 로더를 거치지 않고로드 할 수 없습니다 (UEFI 설치의 경우 bootmgfw.efi). Windows는 bootmanager가 있고 winload.efi를 호출하기를 기대하기 때문입니다. 그렇지 않으면 문제를 해결할 때까지 Windows가 중단됩니다. 이것에는 여러 가지 이유가 있습니다 (실제적이고 무지합니다). 대부분 Microsoft가 모든 것을 처리하기 위해 bootmanager를 작성했기 때문입니다 (OS로드, 복구 환경로드, 의사 사전 OS 환경 등). 현재 온전한 유사성을 달성하는 유일한 방법은 Grub-efi를 사용하여로드를 체인화하는 것입니다.


이것을 대답으로 받아들이 기 전에 다음과 같이 질문해야합니다. 프로세스에 관련된 모든 프로그램을 속이는 데 필요한 낮은 수준의 해킹으로 인해 작업을 수행하기가 어려울 것입니까? 기만은 Windows가 여전히 자체 부트 관리자로 부팅되었다고 생각하지만 실제로는 다른 것이 었습니다 ... 그리고 모든 Windows 버전에는 별도의 노력이 필요할 것입니다. 그러나 이것이 작업을 불가능하게하지는 않으며, 정말로 어렵습니다.
osolmaz

3
나는 그것이 프로그래밍에서 완전히 불가능하다고 말하지는 않지만, bootmgfw.efi가 Windows OS에 대한 호출을 리버스 엔지니어링해야합니다. OS 로더에 대한 저수준 부트 프로토콜 호출을 리버스 엔지니어링해야 할 필요가있는 저수준 해킹의 양은 시간과 관련하여 엄청나게 비쌉니다. bootmgfw.efi가 있다고 믿었을뿐만 아니라 BCD가 있고 자신의 도구 등으로 만들어 졌다는 것을 Windows에 속일 필요가 있습니다.
ChrisR.

2

UEFI 펌웨어의 부팅 옵션 목록에 Windows EFI 부트 로더를 추가해야합니다. 이렇게하면 다음 중 하나를 선택할 수 있습니다.

  1. GRUB2를로드하거나
  2. Windows 부트 로더가로드되어야합니다

DVD 드라이브, 외장 하드 드라이브 또는 네트워크 부팅과 같은 추가 옵션도 해당 시점에 표시되어야합니다. UEFI 부트 로더는 일반적으로 \EFI( /boot/efi/) 파티션에 있습니다. Windows를 제대로 설치하지 않고 Windows 하드 드라이브 이미지를 방금 복사 했으므로 현재 컴퓨터의 EFI 파티션에 적절한 부트 로더가 포함되어 있지 않을 수 있습니다. 따라서

  1. 부트 로더를 EFI 파티션으로 복사
  2. GRUB2와 함께 부팅 옵션으로 Windows 추가

그런 다음 BIOS에서 부팅 순서를 변경하여 부팅 할 OS를 선택할 수 있어야합니다. 랩탑에서를 누르면 F12로드 할 부트 로더를 선택할 수있는 메뉴가 나타납니다.

이 단계에서는 이 튜토리얼efibootmgr 의 단계를 사용 하고 따르 겠습니다 .

bootmgfw.efi에서 \EFI\Microsoft\Boot\bootmgfw.efi또는 /boot/efi/Microsoft/Boot/bootmgfw.efiLinux를 사용할 때 해당 파일 을 EFI 파티션에 복사해야합니다 .

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

여기서 MicrosoftWindows 버전의 원본 EFI 파일이 들어있는 폴더입니다.

그런 다음 다음을 .efi사용하여 파일을 UEFI 부팅 항목 에 추가해야합니다 .

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

물론 당신은 변화를 필요로하는 곳에 /dev/sda-p 1디스크 장치 및 파티션 번호에 대한 올바른 값으로.

Lenovo 노트북이있는 경우 다음을 참고하십시오.

또한 부트 로더 이름이 "Windows Boot Manager"또는 "Red Hat Enterprise Linux"가 아닌 경우 시스템 부팅을 거부하는 알려진 버그가있는 제조업체 (Lenovo)가 하나 이상 제공됩니다.

그런 다음 PC를 시작하면 다음과 같이 표시됩니다 (부팅 과정에서 해당 키를 누르고 있으면)

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

(etc.)

bcdeditWindows에서이 보여줍니다 :

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
매우 훌륭하게 설명했습니다. 감사합니다. 며칠 전 같은 일을했지만 Windows EFI 부팅 관리자를 위해 별도의 파티션을 사용하고 GRUB을 사용한 체인로드를 통해 성공했습니다. 이제 원래 EPS도 사용할 수 있다는 것을 알게되었습니다. 또한 bcdedit를 사용하는 대신 hivex를 사용하여 BCD를 수정했습니다. 리눅스에서 BCD 파일을 조작 할 수있는 무료 도구 모음을 작성하려고합니다. 그러나 내가 달성하려고하는 것은 다른 것입니다. 어떻게 bootmgfw.efi가 winload.efi를 실행한다면 왜 GRUB에서 winload.efi를 직접 실행할 수 없습니까?
osolmaz

아 알 겠어요 따라서 BCD 시스템 저장소를 읽어 Windows 부팅 관리자 (bootmgfw.efi) 로딩을 건너 뛰고 Windows 부팅 로더 (winload.efi)를 직접로드 하시겠습니까? ( 여기 에서 정의에 따라 갑니다.) 흥미 롭습니다. 누군가 그렇게하는 것을 들어 본 적이 없습니다. 당신의 동기는 무엇입니까, 왜 winload.efi를 직접로드해야합니까? 또한 \EFI\Boot\Microsoft테스트 할 폴더 의 전체 사본이 있습니까 (파일이 몇 개 있습니까)?
jmiserez

글쎄, 내가 그것을 달성한다면, 나는 BCD를 읽을 필요조차 없으며, 파티션에 대한 GRUB에 항목을 추가 할 수 있습니다. (여기서는 최대 절전 모드 및 시스템 복구를 제외하고 있습니다.) 동기는 나중에 수정해야 할 걱정없이 Windows를 설치하는 것이 훨씬 쉽다는 것입니다. sysadmins, 배치 설치 등에 유용합니다 (^^). winload.efi를 직접로드하는 이유는 폐쇄 형 사양 Windows 레지스트리 파일 (이진)을 처리하는 것이 GRUB와 같은 일반 텍스트 구성 파일을 처리하는 것보다 훨씬 지루합니다. 중간 사람을 제거하는 것이 더 쉽습니다.
osolmaz

1
나는 당신이 의미하는 것을 알았습니다. 그렇습니다. 매우 편리합니다. 1) bootmgfw.efi가 시작될 때 winload.efi에 전달되는 변수가 있는지, 2) 보안 부팅에 문제가 있고 인증서 체인이 필요한지 궁금합니다. inherit {bootloadersettings}BCD 매장에서 실제로 무엇을 의미 하는지 알고 있습니까?
jmiserez

1
3) hivex를 사용했기 때문에 어떤 객체에 해당하는지 추측 할 수 있습니다. 하이브에는 "전역"설정 개체가 있으며 다른 모든 개체에는 이에 대한 참조가 있습니다. 내가 말할 수있는 것은 Windows로 부팅하기에 두 개의 객체만으로 충분하다는 것입니다. 실제 Windows 루트 가장 어려운 부분은 파티션을 지정한 이진 데이터 구조를 이해하는 것이 었습니다. 이것은 대부분 wodny : bitbucket.org/wodny/libbcd/src에 의해 수행되었습니다 .
osolmaz

0

GNU / Linux 설치 후 Windows 또는 그 반대의 순서로 설치를 수행 할 수 있습니다.

모든 운영 체제를 설치 한 후 다음을 수행하십시오.

  1. 여기에서 "부팅 복구 디스크"를 받으십시오. http://sourceforge.net/projects/boot-repair-cd/

  2. 라이브 부팅 가능한 USB 펜 드라이브 만들기 (pendrivelinux.com의 지침)

  3. 또는 ISO 파일을 CD에 굽습니다.

  4. 이를 통해 부팅하고 화면의 지시를 따릅니다. 설치된 운영 체제가 모두 포함 된 GRUB을 다시 설치해야합니다.

모두 제일 좋다.


1
나는 그것을 알고 있는데, 내가 원하는 것은 다른 것입니다. 체인로드없이 Windows를 직접 부팅 할 수 있는지 묻고 있습니다.
osolmaz
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.