grub이 장치에 설치되어 있는지 어떻게 알 수 있습니까?


37

grub이 디스크에 설치되어 있는지, 어떤 설정이 있는지 (특히 루트 매개 변수에 대해) 어떻게 알 수 있습니까?

소프트웨어 RAID1 어레이에서 많은 디스크를 검사하여 두 디스크 모두에 GRUB이 설치되어 있고 각 디스크에 GRUB이 적절한 루트 값을 가지고 있는지 확인해야합니다.


3
아래의 새로운 답변을 받아 들일 수 있습니까? 받아 들여진 답변은 지금 구식입니다
rubo77

@ rubo77, grub0.9x 이하가 일반적인 사용법으로 바뀌고 이름이 바뀌기 오래 전에 내 대답은 정확했습니다 grub-legacy. 이것이 당신을 귀찮게한다면,에 대해 새로운 질문을하는 것이 좋습니다 grub2. 또는 시간이 지남에 따라 더 이상 사용되지 않는 모든 질문과 답변을 수정하는 캠페인을 수행하십시오.
cas

3
위반하지 않습니다. 나는 SO가 지식 기반이라고 생각하며 시간이 지남에 따라 변화해야합니다. 오래된 답변을 업데이트해야합니다.
rubo77

답변:


28

최신 정보:

이 답변은 2009 년부터 작성되었으며 grub2가 아닌 grub-legacy에 적용됩니다.

fileMBR에서 GRUB을 식별하는 데 사용할 수 있습니다 . 예 :

# file -s /dev/sda
/dev/sda: x86 boot sector; GRand Unified Bootloader, stage1 version 0x3
, stage2 address 0x2000, stage2 segment 0x200; partition 1:
ID=0xfd, starthead 1, startsector 63, 1044162 sectors; partition
2: ID=0x82, starthead 0, startsector 1044225, 1028160 sectors;
partition 3: ID=0xfd, starthead 0, startsector 2072385,
1951447680 sectors, code offset 0x48

root=paramater는 GRUB의 저장 년대 MBR에 저장되지 않은 menu.lst파일 시스템 (에 저장된 파일 일반적으로 루트 파일의 / boot / grub 디렉토리 또는 / 부팅 파일 시스템의 GRUB 디렉토리에 - 항상은 아니지만, 그것을 어디에나있을 수 있습니다).

위의 파일 출력을 구문 분석하고, menu.lst파일이 있는 디스크 / 파티션을 결정 하고, 마운트 한 후 읽고 파싱해야합니다. 또한 grub / default 파일을 읽어서 어떤 grub 메뉴 항목이 기본값인지 알아 내고 싶을 것입니다. 왜냐하면 가장 관심있는 root = 매개 변수를 가지고 있기 때문일 것입니다.


이 경우 grub이 올바른 위치에서 menu.l을 찾고 있는지 확인하는 방법이 필요합니다. 어딘가에 부트 로더가 부팅 디스크를 가져 와서 부팅 메뉴를 얻을 수 있는지 알려야합니다.
DrStalker

애벌레 홈 페이지에서 GRUB에 대한 유용한 정보를 많이있다 gnu.org/software/grub는 , 그럽 위키 grub.enbug.org , 그리고 위키 피 디아에서 en.wikipedia.org/wiki/GRUB
캐스

8
grub2에서는 더 이상 올바르지 않습니다. 대신 @benrifkah의 답변을 참조하십시오.
Paul Tomblin

52

다른 방법

file -s파일 명령의 마법 파일이 오래 되어 Ubuntu Lucid에서 작동하지 않았습니다 . 매직 파일이 GRUB 변경 사항을 따라 잡지 않은 경우이를 수행하는 다른 방법은 다음 dd과 같은 명령을 사용하여 장치의 처음 512 바이트를 검사하는 것입니다.

user@host:~$ sudo dd bs=512 count=1 if=/dev/sda 2>/dev/null | strings
ZRr=
`|f
\|f1
GRUB
Geom
Hard Disk
Read
 Error

dd명령을 통해 명령 의 출력을 전송하여 strings인쇄 할 수없는 문자를 제거합니다 (전송 통계는에 버려짐 /dev/null).

GRUB에 오류가 발생했을 때 표시 될 메시지가 표시되면 GRUB이 설치되어있는 것입니다.

이 암호로 보호 된 게시물에 답하기 위해 ubuntuforums.org에서 louib의 모자 팁 : http://ubuntuforums.org/showthread.php?t=363372

궁금한 점은 이것이 내가 얻은 것입니다 file -s.

user@host:~$ sudo file -s /dev/sda
/dev/sda: x86 boot sector; partition 1: ID=0x83, active, starthead 32, startsector 20
48, 337211392 sectors; partition 2: ID=0x5, starthead 254, startsector 337215486, 1434214
6 sectors, code offset 0x63

GRUB에 대해서는 특별히 아무것도 없습니다.


5
에 딱 맞다. 수락 된 답변이 여러 컴퓨터에서 나에게 도움이되지는 않았지만 귀하의 것입니다.
Cerin

13
허용 된 답변은 2009 년에 작성되었으며 grub.cfg가 아니라 menu.lst에서 언급했듯이 grub1 ( "grub-legacy")에 대한 것입니다. 그 이후로 분명히 상황이 바뀌었고 grub2는 MBR에 식별자를 넣지 않습니다. 그것이 당신을 위해 어떤 기계에서는 작동했지만 다른 기계에서는 작동하지 않았다면, 그것은 일부에 grub1이 있고 다른 것에 grub2가 있음을 의미합니다.
cas

1
설명해 주셔서 감사합니다 Craig. 원래 file -s명령을 시도한 시스템 은 GRUB2 인 grub-pc를 사용하므로 부분적으로 올바른 것처럼 들립니다. 그러나 file -sGRUB 0.97을 실행하는 다른 시스템에서 실행했지만 일부는 작동하지 않았지만 다른 시스템에서는 작동했습니다. 이 시스템들 사이의 차이점은 file 명령과 함께 제공되는 매직 파일의 숫자에있었습니다. 매직 넘버 파일을 교환하면 작동하지 않는 시스템의 정의로 인해 작동하는 시스템이 실패한 것으로 확인되었습니다.
benrifkah

7

grub-emu다음에 컴퓨터를 재부팅 할 때 grub에 표시되는 메뉴를 볼 수 있습니다 .

$ sudo apt-get install grub-emu
$ sudo grub-emu

데스크탑 컴퓨터에서 메뉴가 예상대로 표시되었지만 실제로 커널을 부팅하는 경우 "장치 없음"오류가 발생했습니다. 나는 그것이 예상되는 행동이라고 생각합니다.

내 DigitalOcean VPS에서 서버가 실제로 제대로 재부팅되었지만 grub 메뉴에 항목이 표시되지 않았습니다. (2013 VPS이므로 마일리지가 다를 수 있습니다.)

실행할 때 참고 사항 grub-emu:

  • 당신이 애벌레와 상호 작용하려면 X-Windows에서, 당신은 당신의 필요 키보드 포커스를단말기에 팝업 창에 당신이 애벌레 - 에뮤를 실행 한에서, 그리고.
  • 를 누른 c다음을 입력 하여 에뮬레이터를 종료 할 수 있습니다 exit.
  • 종료 후 터미널 에뮬레이터의 상태가 좋지 않을 수 있습니다 (예 : Enter는 새 줄에 표시되지 않음). 을 입력하여 수정하십시오 reset. (컴퓨터를 다시 시작하지 않아도 걱정하지 마십시오. 터미널을 정리하기 만하면됩니다.)

타이핑 c다음에 exit나를 위해 작동하지 않았다.
Faheem Mitha

1
반드시 당신의 애벌레 창 아닌 애벌레 창 자체를 양산 원래 터미널에 포커스를 가지고 있는지 확인 (이 실현 나에게 두 번째를했다)
Madivad
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.