저는 "Marcus"라는 별명을 붙인 듀얼 부팅 컴퓨터를 가지고 있습니다. 저는 Raspberry Pi에서 명령을 호출할 수 있는 Alexa 앱을 작성했습니다.
Pi는 Marcus의 전원을 켜거나 재부팅하거나 전원을 끌 수 있습니다.
Marcus에 로그인하고, grub-reboot를 실행하고, 컴퓨터를 Windows로 재부팅하는 명령을 실행하는 명령이 있습니다. 이를 위해서는 분명히 Marcus의 전원을 켜고 Linux로 부팅해야 합니다.
grub이 시작될 때 읽는 변수를 설정할 수 있기를 원합니다. 공급업체 키가 옵션인 것 같습니다. 네트워크에서 파일을 사용할 수 있도록 할 수 있지만 grub에서 파일을 읽도록 하는 방법을 모르겠습니다. 네트워크 파일을 읽을 수 있다면 이를 사용하여 시스템이 부팅되는 OS를 제어할 수 있습니다.
여기에 어떤 아이디어라도 크게 감사하겠습니다.
답변1
문제는 네트워크에서 부팅할 때 시스템 펌웨어(BIOS 또는 UEFI)가 네트워크 드라이버를 제공한다는 것입니다. 펌웨어에서 제공하는 네트워크 드라이버는 로컬 디스크에서 부팅할 때 활성화되지 않을 수 있으므로 GRUB는 펌웨어를 활성화하는 방법(아마도 UEFI를 사용하여?)을 알지 않는 한 자체 네트워크 스택을 제공해야 합니다. 그렇다면 Marcus 시스템은 BIOS나 UEFI를 사용하며, 어떤 유형의 네트워크 카드를 사용합니까?
GRUB의 공급업체 키 기능을 사용하면 작동하지 않는 것 같습니다. 특수 버튼을 사용할지 여부를 결정하려면 BIOS 설정 NVRAM의 특정 바이트를 읽어야 합니다. 따라서 시스템 시작과 GRUB 진입 사이에 어떻게든 이 값을 수정해야 합니다. 이는 자체 BIOS 확장, 사용자 정의 부트로더 및/또는 일종의 사용자 정의 하드웨어를 실행하는 것을 의미합니다.
아마도 이를 달성하는 가장 쉬운 방법은 네트워크 부팅이 실패할 경우 보조 부팅 대상으로 로컬 부팅을 사용하여 네트워크에서 부팅을 시도하도록 Marcus 시스템을 설정하는 것입니다. PXE 네트워크 부팅에 필요한 DHCP 옵션을 제공하는 DHCP 서버와 PXE 부트 로더 및 해당 구성 파일을 Marcus 시스템에 제공하는 TFTP 서버가 필요합니다. Pi는 이 두 가지 작업을 매우 쉽게 수행할 수 있습니다.
Marcus에서 실행되는 PXE 부트로더에 대해 두 개 또는 세 개의 구성 파일을 작성할 수 있습니다. 하나는 로컬 디스크에서 무조건 Linux를 부팅하고, 다른 하나는 동일한 방식으로 무조건 Windows를 부팅하고, 세 번째는 부팅 메뉴를 표시하는 데 사용할 수 있습니다(경우에 적용됨). 응용 프로그램 시작) 시작 명령이 실행되지 않습니다(시스템을 수동으로 시작할 때 네트워크 시작 시도가 시간 초과될 때까지 기다릴 필요가 없음).
그런 다음 Alexa 앱은 깨우기 명령을 Marcus 시스템에 보내기 전에 TFTP 서버에서 제공한 구성 파일을 간단히 변경합니다. 사용된 음성 명령에 따라 무조건 Windows 또는 무조건 Linux 부팅 구성을 TFTP 서버에 배치합니다. 그런 다음 Marcus 시스템 깨우기 또는 다시 시작 명령을 실행합니다. 부팅 시도가 성공하거나 시간 초과될 때까지 충분한 시간을 기다린 후(또는 구성 파일을 읽었음을 나타내는 TFTP 서버의 로그 메시지를 확인한 후) 부팅 메뉴 구성을 TFTP로 되돌립니다. 섬기는 사람.