UEFI 펌웨어와 함께 제공되는 Dell OptiPlex 9010 컴퓨터를 사용하고 있지만 PCI-Express NVMe 장치에서 부팅을 지원하지 않습니다.
DUET 을 사용하여 USB 스틱에 EFI 부팅 파티션을 생성하고로드 된 NVMe 드라이버가있는 OS의 EFI 부팅 프로그램을 실행 하여이 문제를 해결했습니다 .
이를 수행하는 명령은 현재 수동으로 입력되었습니다. 과정은 다음과 같습니다.
- 컴퓨터가 꺼져 있습니다.
- DUET USB 스틱을 USB 포트에 꽂습니다 (항상 항상 플러그를 꽂아 둡니다)
- 컴퓨터를 켜십시오
- (UEFI는 항상 해당 USB 스틱에서 먼저 부팅하고 내가 연결 한 다른 드라이브의 부팅 로더는 무시하도록 구성되어 있습니다)
- DUET USB 스틱은 EFI 셸을로드합니다 (
EFI Shell version 2.31 [4.653]
) - (이
map
명령은 DUET USB 스틱이 자동으로에 장착되어 있음을 나타냅니다fs0:
) - NVMe 드라이버를로드합니다 :
load fs0:\EFI\Drivers\NvmExpressDxe-64.efi
- 로 볼륨 매핑 새로 고침을 트리거하면
map -r
이 명령이 문제없이 성공적으로 완료됩니다. - (이제 때때로 NVMe 볼륨이 나열
fs1:
되지만 때때로fs0:
) - 다음을 실행하여 Windows로 부팅합니다.
fs1:\EFI\Boot\Bootx64.efi
- Windows 시작 화면이 나타나고 컴퓨터가 Windows 부팅을 재개합니다
명령을 startup.nsh
스크립트 (DOS의 EFI에 해당) 에 넣어서이를 자동화하려고했습니다 autoexec.bat
.
내 스크립트는 다음과 같습니다
echo Step 1
load fs0:\EFI\Drivers\NvmExpressDxe-64.efi
echo Step 2
map -r
echo Step 3
fs0:
echo Step 4
fs0:\EFI\Boot\Bootx64.efi
echo Step 5
(이 스크립트는 실행될 때 NVMe 드라이브가에 다시 매핑 되기 때문에 fs0:
대신에 사용 되지만 대신 대화식으로 명령을 실행할 때는에 매핑됩니다 . 왜 또는 어떻게 발생하는지 모르겠습니다).fs1:
startup.nsh
fs0:
fs1:
내가 부팅하고 쉘을 실행하게 startup.nsh
하면이 출력을 얻습니다.
startup.nsh> Step 1
startup.nsh> load fs0:\EFI\Drivers\NvmExpressDxe-64.efi
load: Image fs0:\EFI\Drivers\NvmExpressDxe-64.efi loaded at D7C3F000 - Success
startup.nsh> Step 2
startup.nsh> map -r
Device mapping table
fs0 :PciRoot(0x0)/Pci(0x1c,0x4)/...
fs1 :PciRoot(0x0)/Pci(0x1c,0x4)/...
blk0 :PciRoot(0x0)/Pci(0x1c,0x4)/...
...
Shell: Cannot read from file - No Media
Shell> _
따라서 map -r
내부에서 startup.nsh
실행되면 실행되지만 “파일에서 읽을 수 없음-미디어 없음”오류와 함께 실패하고 나머지 스크립트 실행 ( echo Step 3
출력 이 없으므로 ) 을 중단 하지만 수동으로 입력하면 fs0:\EFI\Boot\Bootx64.efi
그런 다음 Windows가 정상적으로로드됩니다.
EFI 셸 명령 설명서를 살펴 보았 try
거나 on error resume next
또는 같은 명령이 표시되지 않아 on error goto :label
스크립트가 실패 할 것입니다.
답변
map -r
시작 스크립트 가 손상 되었음을 확인할 수 있습니다 .
다시 맵핑하면 스크립트의 위치가 변경되고 쉘이 실행할 다음 명령을 읽을 수 없기 때문에 발생합니다. EFI 셸 모드를 변경하고 매핑의 업데이트 방법을 사용하여이 문제를 해결할 수 있습니다.
간단히 말해서, 대신 다음을 map -r
시도하십시오.
connect -r
set -v efishellmode 1.1.2
map -u
답변
IMHO, 귀하의 접근 방식은 지나치게 복잡합니다. 컴퓨터의 내장 EFI CSM을 사용하여 외부 디스크에서 두 번째 EFI 구현을 실행 한 다음 두 번째 EFI 구현에서 EFI 드라이버를로드하고 있습니다. 몇 가지 대안이 나에게 발생합니다.
- 컴퓨터의 기본 EFI에서 EFI 셸을 실행하고 거기서 스크립트를 실행하여 EFI 드라이버를로드 할 수 있습니다. 그러면 CSM과 두 번째 EFI 구현이 중단되어 부팅 시간이 단축되고 안정성이 향상됩니다. 즉,이 옵션은 현재보고있는 것과 동일한 문제를 일으킬 가능성이 높습니다.
- 컴퓨터의 기본 EFI에서 rEFInd 를 실행하고 rEFInd 가 자동으로로드되는 드라이버로 드라이버를 구성 할 수 있습니다. 이것에 대한 큰주의는 rEFInd의 드라이버 로딩 코드는 파일 시스템에 대해 잘 테스트되었지만 다른 유형의 드라이버로는 테스트되지 않았으므로 드라이버를로드 할 것이라고 약속 할 수 없습니다. 또한 드라이버를로드 한 경우에도 이미 발생한 것과 유사한 문제가 발생할 수 있습니다.
- 기본 EFI에서 읽을 수있는 미디어에 부트 로더 및 필요한 경우 OS 커널을 배치 할 수 있으므로 NVMe 드라이버가 필요하지 않습니다. 이미 DUET에 USB 플래시 드라이브를 사용하고 있으므로 사용할 수 있습니다. 또는 컴퓨터가 다른 유형의 하드 디스크를 지원하므로 기본 스토리지 유형이 아닌 경우에도 하드 디스크 중 하나를 사용할 수 있습니다. Windows 전문가가 아니기 때문에 Windows를 배치하는 방법을 구체적으로 제안 할 수는 없습니다.
즉, 귀하의 직접적인 질문에 대한 답변을 모르겠습니다. 새 드라이버를로드 할 때 장치에서 다시 매핑되기 때문에 발생합니다. 이는 쉘에서 “러그를 당깁니다”.