Grub 잘 아시는분 계세요?

제가 처음에 윈도우7을 깔고 우분투를깔았습니다…그러나 윈도우 7 마음에 들지 않아 XP다시 깔았습니다.

XP를 까니까 GRUB가 망가져서 멀티 부팅이 되질 않았습니다…그래서 GRUB복구를 했습니다…;;

멀티 부팅이 가능한 선택매뉴 창이 뜨긴 뜨는데 윈도우는 window7으로 나오고 눌러도 윈도우로 들어가질 못합니다…

윈도우7정보를 가지고 있는거 같습니다…이런경우 해결 방법이 있나요?

XP정보로 바꿀수 있는 방법이 있나요?

sudo update-grub 해보세요

저는 솔직히 GRUB2의 update-grub 매커니즘은 별로 라고 생각합니다. 쩝
운영체제가 바뀌면 매번 update-grub해줘야 하니까요.

저는 그냥 /boot/grub/custom.cfg를 편집해서
menuentry "Windows 7/Vista" {
insmod ntfs
insmod fat
search -s -f /bootmgr
chainloader +1
}
menuentry "Windows XP/2000" {
insmod ntfs
insmod fat
search -s -f /ntldr
chainloader +1
}
이렇게 넣어줍니다.
이러면 update-grub없이도 GRUB에서 source명령으로 custom.cfg를
자동으로 포함해주니까 윈도우즈를 다른 파티션이나 다른 디스크에 넣어놔도
자동 검색해서 부팅합니다.(물론 검색하니깐 속도는 느려질 수 있지만, 저는 하드코딩를 미치도록 싫어하는 편이라)

감사합니다…큰 도움이 됬습니다…^^ 두 번째 방법은 이해가 안되네요…ㅠ 초보라서…

[quote="protochaos":1z8ls2bo]sudo update-grub 해보세요

저는 솔직히 GRUB2의 update-grub 매커니즘은 별로 라고 생각합니다. 쩝
운영체제가 바뀌면 매번 update-grub해줘야 하니까요.

저는 그냥 /boot/grub/custom.cfg를 편집해서
menuentry "Windows 7/Vista" {
insmod ntfs
insmod fat
search -s -f /bootmgr
chainloader +1
}
menuentry "Windows XP/2000" {
insmod ntfs
insmod fat
search -s -f /ntldr
chainloader +1
}
이렇게 넣어줍니다.
이러면 update-grub없이도 GRUB에서 source명령으로 custom.cfg를
자동으로 포함해주니까 윈도우즈를 다른 파티션이나 다른 디스크에 넣어놔도
자동 검색해서 부팅합니다.(물론 검색하니깐 속도는 느려질 수 있지만, 저는 하드코딩를 미치도록 싫어하는 편이라)[/quote:1z8ls2bo]

GRUB2의 부트매니져의 설정파일은 /boot/grub/grub.cfg구요…
사실 update-grub, /etc/grub.d/* 등은 부팅시엔 필요가 없는겁니다.
이 파일들은 grub.cfg 파일을 만들거나 수정하기 위해 필요한 것입니다.

update-grub명령이 실행되면 /etc/grub.d/*의 파일들을 번호 순으로 실행하여
grub.cfg파일을 다시 만들게 되는 겁니다.
그리고 grub.cfg의 첫머리 주석을 보시면
파일을 고치지말라고 되어 있습니다 - 고쳐바짜 update-grub하면 고친 내용 날아가고 자동으로 새로 만들어짐

그런데 grub.cfg를 보시면

BEGIN /etc/grub.d/41_custom

if [ -f $prefix/custom.cfg ]; then
source $prefix/custom.cfg;
fi

END /etc/grub.d/41_custom

이런 부분이 있습니다.
사실 이부분도 /etc/grub.d/41_custom파일에 의해 만들어 진것입니다만…
source라는 명령은 쉘스크립트의 명령이 아니라
GRUB 자체 내장명령으로 해당 파일을 include하여 파싱하는 명령입니다.
$prefix의 값은 기본적으로 /boot/grub이구요

단 /boot/grub/custom.cfg파일은 존재하지 않습니다.
만들어 주어야 하죠.

*부연설명
insmod ntfs –> ntfs파티션의 파일을 검색하기 위해 필요
insmod fat –> fat및 fat32파티션의 파일을 검색하기 위해 필요
search -s -f /ntldr –> 모든 파티션의 최상위 디렉토리의 ntldr파일을 찾아서 발견된 파티션을 root 변수에 저장함
chainloader +1 –> root변수의 파티션의 마스터부트섹터로 점프함 (마스터부트섹터의 기계어 코드를 실행함)

저 그런데…

grub도 종류가 여러가지 인가요?

grub / grub2 /dos4grub…

더있나요???

그리고 가능하다면 코분투만드실때…

아이콘하나로 grub복구 가능하게 만들수는 없을까요??

여기 올라오는 많은 질문중 grub사라저서 고생하시는 분들이 많아보입니다.

저도 고생많이 했고…그래서 조금알게 되었고…ㅎㅎ

하여간 코분투 정말 편합니다…특히 10.10맘에 쏙듭니다…아니 제 컴들이 좋아합니다.

옛날엔 LILO라는 부트매니져를 사용했었는데…
레드햇시절에 GRUB이 나왔죠
그리고 이제 확장되서 GRUB2가 나왔어요, 그리고 그외 SYSLINUX, EXTLINUX등도 나왔죠
근데 여튼 이것들은 리눅스로 부팅하기위한 부트매니져들입니다.
LILO,GRUB,GRUB2등은 리눅스부트파티션을 필요로하죠,
우분투설치시디에 사용된 부트매니져는 SYSLINUX이구요 이건 윈도우즈파티션에서도 동작합니다.
그래서 윈도우즈파티션에서 GRUB을 동작하게 하기 위해 GRUB4DOS라는 것이 나온거구요
이것의 구조는 GRUB2(grub-pc)가 아닌 GRUB1(grub-legacy)를 기반으로 합니다.
최근우분투는 설치하면 자동으로 GRUB2를 설치해줍니다.

GRUB4DOS프로젝트에 보시면 WINGRUB이라는것도 있어요.
윈도우즈용 프로그램으로 GRUB부트메뉴설정파일인 MENU.LST편집및 GRUB4DOS설치를 할 수 있게 만든것이죠.
그런데 WINGRUB은 버젼업이 안되더군요.

GRUB4DOS도 최근엔 버젼업이 안되고 있지만, 중국인들이 자체적으로 다시 개발하고 있습니다.
도스의 BAT스크립트와 비슷한 문법을 사용하여 스크립팅할 수 있게 만들고 있더군요.
개인적으로 DOS의 BAT스크립트 문법은 별로 라서 그다지 추천하고 싶지 않군요.

그리고 grub extras라는 프로젝트도 있는데…
이건 grub2에 모듈이라던가 그래픽메뉴등을 추가하는 프로젝트입니다.

GRUB4DOS는 윈도우즈및 리눅스에서 부트매니져를 설치할 수 있어서 (bootlace.com)
부팅이 안될때, 복구할때 사용하기 좋습니다.
리눅스부팅이 안되더라도, 윈도우즈에서 grub4dos의 부트매니져 설치및 메뉴편집이 가능하니까요,
또한, 윈도우즈xp의 boot.ini나 윈도우즈7의 BCD파일을 편집하여,
윈도우즈부트매니져에서도 GRUB4DOS를 추가할 수 있습니다.

WUBI라는 윈도우즈에서 우분투설치하는 프로그램도,
사실은 GRUB4DOS를 윈도우즈 부트매니져에 추가하고, 리눅스를 하나의 이미지파일에 담아 놓은 것과 같은 것이죠.

감사합니다.

grub 이놈 이해가 갑니다.

제가 구형 컴에 puppy리눅스를 돌리는데…

퍼피를 깔고 우분투를 깔면 grub2에서 퍼피를 인식하지 못합니다.

이럴때는 어떻게 해야하나요?

지금은 그냥 퍼피에있는 grub4dos로 부팅하여 사용하고 있습니다.

ps. 방금 팬3 / 512에 우분투10.10을 깔았는데…작동하네요…

menu.lst의 내용을 올려보세요.

update-grub을 해도 안되면 윈7을 깔면서 윈도우용 부트로더가 별도의 파티션에 설치되었을 가능성이 있습니다. (XP는 부트로더를 별도의 파티션에 설치하지 않습니다.) 일단 menu.lst와 fdisk -l /dev/sda 내용을 봐야 할 것 같군요.

** 퍼피리눅스 설치 파티션 찾기 **
for d in ls -1 /dev/sda[0-9]*; do sudo mount $d /tmp/t >&/dev/null; [ -f /tmp/t/puppy431/vmlinuz ] && echo $d; sudo umount $d >&/dev/null; done|head -1

#/boot/grub/custom.cfg에 추가
menuentry "Puppy Linux 431" {
search -s -f /pupy431/vmlinuz
linux /puppy431/vmlinuz root=퍼피리눅스설치파티션 psubdir=puppy431
initrd /puppy431/initrd.gz
}