GRUB`ntldr` 명령 (모듈)을 사용하는 방법에 대한 자세한 정보는 어디서 얻을 수 있습니까?


16

최근에 GRUB ntldr모듈을 우연히 발견했습니다 .

분명히 사용할 수있는 것 중 하나는 chainloader아래 예와 같이 NT> = 6.0 버전의 Windows를 부팅 하는 대안 입니다. (Windows 파티션의 볼륨 부팅 레코드가 손상된 경우 매우 편리합니다.)

menuentry "Windows 7 (bootmgr on /dev/sda1)" --class windows --class os {
    insmod part_msdos
    insmod ntfs
    insmod ntldr
    set root='(hd0,msdos1)'
    search --no-floppy --fs-uuid --set=root 1EA0019AA0017A13
    ntldr ($root)/bootmgr
}

이 부팅 지시문을 사용하는 방법에 대한 자세한 내용은 어디서 볼 수 있습니까? HTML 버전GNU GRUB 매뉴얼을 보았을 때 목록에 표시되지 않았습니다 .


ckhan의 답변에 회신

대단히 감사합니다! GRUB ntldr명령 / 모듈 에 대해 더 배우기 위해 소스 코드를 파헤쳐 봐야겠다고 결정했습니다 . 하지만 당신은 나보다 훨씬 더 나은 일을 했어요.

코드를 작성한 사람이 어떤 디자인 토론을했는지 확인하기 위해 이메일 아카이브를 살펴본 적이 없었습니다. 그 방법은 앞으로 매우 도움이 될 것 같습니다. 언급 해 주셔서 감사합니다.

GRUB ntldr지원 에 대한 나의 생각

  1. 구별의 의미가 확실 ntldr하지는 않지만 명령이 아닌 모듈입니다. 또는 원하는 경우 동적으로로드 된 명령 일 수 있습니다. 소스 코드 링크를

    따라 152 ( ) 및 159 ( ) 행을 보면로드 할 코드를 볼 수 있습니다. ... GRUB은 분명히 " 명령 " 이라고 생각할 수있는 많은 기능을 모듈로 구현합니다. 내가 아는 사용법의 유일한 차이점은 모듈을 사용하기 전에 명령과 함께로드되었는지 확인해야한다는 것 입니다. 따로 : 나는 GRUB이 왜 지원하지 않는지 항상 궁금했다 . 명령이 존재하지만 모듈입니다. 를 반환 하면GRUB_MOD_INITGRUB_MOD_FINI

    insmod ntldr

    rebootrebootunknown commandinsmod rebootGRUB이 reboot명령 을 "기억"할 수 있도록합니다 . 따로

    : 언제 그리고 왜 GRUB이 모듈을 " 언로드 " 할 수 있을지는 아직 모르겠습니다. " 쓰레기 수거 " 와 비슷한 결과 일 수 있습니다 . 모듈을로드 한 후에는 시스템 전원을 끄고 재부팅 한 후에도 지속되는 것으로 나타났습니다. 물론, 당신은 그것에 의존 할 수는 없지만 실제로 실제로 작동하는 방식 인 것처럼 보입니다.
  2. 그들이 기반 ntldr으로 하는 것이 흥미 롭습니다 chainloader. chainloader.c코드를 보지 않았습니다 . 아마 인텔 16 비트 리얼 모드 에서 재배치로드를 수행한다고 생각 합니까?

    나는 나는 그들이 구현하지 않았다 오히려 다행 ntldr의 옵션으로 chainloader. 나는 Vladimir에 동의합니다. 커버의 유사점에 관계없이 사용법 구문은 매우 다릅니다. 현재의 접근 방식은 덜 복잡합니다.
  3. GRUB에이 명령을 추가하는 것에 대한 열정이 부족하다는 것을 보는 것도 흥미 롭습니다. GRUB 개발자는 PBR ( Windows Partition Boot Record) 의 손상이 거의 없을 것으로 생각했습니다. 그러나 일반적인 설치 과정에서 수행하는 방법을 설명 할 수 있습니다.

    사용자에게 시스템에 Windows가 설치되어 있다고 가정합니다. 그들은 이제 Windows 와 함께 Ubuntu (12.04 LTS)를 설치 합니다. 우분투 설치 도중 어느 시점에서 GRUB을 설치할 위치를 분명히 결정할 수 있습니다. 내가 추측하기 시작할 수없는 이유로, 그들 중 일부는 GRUB을 Windows가 설치된 파티션에 설치하기로 결정합니다.

    설치가 완료되고 Ubuntu를 성공적으로 시작할 수 있습니다. 그러나 GRUB 메뉴에서 항목을 선택하여 Windows를 시작하려고하면 Windows가 시작 되지 않습니다 . GRUB으로 Windows를 시작하려고하면 GRUB 메뉴가 다시 표시됩니까?

    왜? 글쎄, 그들이 실제로 일어난 일의 Windows 파티션 부분에 GRUB을 설치하기로 결정했을 때 Windows 파티션의 PBR이 GRUB의 PBR로 덮어 쓰여졌습니다. 따라서 chainloader +1Windows 부트 로더를 체인로드하지 않고 GRUB을 다시로드합니다. 이러한 상황에서 사용자가 Windows를 부팅 할 수있는

    가장 안전한 빠른 방법 인 IMO 는 GRUB의 new를 사용하는 것 ntldr입니다. 이것이 개발자에게 흥미가 있는지 궁금합니다. 나는 그들이이 시나리오를 예상하지 않았기를 기대합니다.

나는 윈도우 이외의 어떤 부트 로더, 궁금 ntldr하고 bootmgr는 GRUB, ntldr명령을로드 할 수 있는가?


1
좋은 물건! 나는 정말로 당신이 grub-devel 메일 링리스트에 줄을 긋고이 질문에 대해 살짝 들여다보고 일부 답변되지 않은 질문에 차임하거나 우리의 가정을 수정하도록 요청해야한다고 생각합니다. 질문을 먼저 열어 주셔서 감사합니다!
ckhan

답변:


14

문서화되지 않은 기능 연구

ntldr명령 이 맞습니다 (모듈이 아닌 명령입니다)는 문서화되어 있지 않습니다. 따라서 코드 고고학의 일부 모험에 대한 변명입니다 .

문서화되지 않은 기능을 찾을 때마다 가장 먼저 할 일은 소스를 확인하는 것입니다.

  • Savannah git repo 의 소스는 2010 년 8 월에 메인 라인으로 병합되었음을 보여줍니다.

  • 소스 브랜치는 더 이상 보이지 않지만 2010 년 4 월에 그 해 초에 계속 등장한 것을 볼 수 있습니다 . "Vladimir 'phcoder'Serbinenko"의 체크인 의견은

    ntldr support. (based on information from nyu but no code from him)
    

그것은 chainloader명령에 매우 가깝기 때문에 헤더 주석의 파일 이름이 여전히 업데이트되지 않았습니다.

이제 정확한 체크인과 이름을 얻었으므로 메일 링 아카이브를 확인할 수 있습니다. grub-devel 메일 링리스트 에서 1 년 전 개발자가이 기능을 추가하는 것에 대해 논의한 위치를 확인할 수 있습니다 .

해당 스레드에서 일부 관련 발췌 :

Robert Millan 이 패치는 NTLDR 부트 시맨틱에 대한 로더를 구현합니다 (BootMGR에서 동일하므로 둘 다 지원됨).

Robert Millan 이 기능을 사용하려면 독립형 명령이 아닌 체인 로더의 옵션이어야한다고 생각합니다. 그것은 실제로 체인 로더와 거의 동일하지만 유일한 차이점은 ntldr은 PBR 자체가 아닌 GRUB에 의해 PBR 다음에로드된다는 것입니다.

Vladimir Serbinenko ntldr 이이 PBR을 파티션을 식별하기 위해 수퍼 블록으로 만 사용하기 때문에 아무런 문제가 없다고 생각합니다. 따라서 나는이 로딩을 $ root를 전달하는 특별한 경우로 생각하고 싶습니다. 그것의 형태는 조금 이상합니다.

Yves Blusseau 이 명령에 대해서는 부트 로더의 유형을 감지하려고 시도하는 chainloader (grub4dos와 같은) 명령이 하나만 있으면 사용자에게 더 간단하다고 생각합니다. 이것은 내 개인적인 의견 일뿐입니다.

Vladimir Serbinenko 나는 이것에 동의하지 않습니다. chainloader와 ntldr은 같은 구문을 공유하지 않습니다. chainloader는 부트 섹터를, ntldr은 ntldr ot bootmgr 파일을 필요로합니다. GRUB2는 GRUB1의 "디자인"중 하나 인 "커널"명령의 잘못된 설계 결정을 위반하기 위해 수행됩니다. GRUB4DOS는이 주제에 대해 GRUB1을 따릅니다.

로버트 밀란 좋아. 별도의 명령으로 만들어 봅시다. 그래도 여전히 chainloader.c와 코드를 공유해야한다고 생각합니다 (일부 ifdef와 함께).

질문에 답변

이 모든 것을 다 이해 한 후에는 어떻게 사용할 수 있는지 알고 있습니까?

  • 체인 로더를 기반으로합니다.

  • 파일을 열려면 단일 인수가 필요합니다.

  • 파티션 부트 레코드를 피하므로 손상을 피할 수 있습니다. 그들이 어떻게 테스트했는지 자세히 설명하는 이 게시물을 참조하십시오 .

  • 그것은 단지 160 줄의 코드 이며, 거기에 다른 것이 많이 없다는 것을 알 수 있습니다.

이것이 도움이 되었기를 바랍니다!

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.