[Booting]GRUB 복구

sDH8988L의 이미지

안녕하십니까???

이거 간만에 글을 남기게 되네요...

이번 글은 GRUB 복구에 관한 것입니다...

보통 일반 LINUX USER들은 따로 LINUX MACHINE을 가지고 있는 일은 드물죠???

주머니 사정상 Windows랑 공생을 많이 하게 되는데, 바로 이 Windows는 새로 깔 일이 많다 이겁니다... 새로 까는 거야 문제가 없는데, MBR을 덮어 쓰는 것이 LINUX USER들에게는 커다란 문제지요...

예전에 LILO를 쓰던 시절에는 LINUX BOOTING DISKETTE이나 INSTALLATION CD를 이용해서 BOOTING한 이후에 /sbin/lilo만 실행해 주면 쉽게 해결될 수 있는 문제였습니다...

그러나 요즘은 대부분 GRUB를 쓰고 계시죠...

이 글은 WINDOWS를 다시 깔므로 해서 날려버린 MBR에 GRUB를 복구하는 방법에 대해서 설명해 드리고자 합니다...

일단, 기본 가정은 기존 LINUX SYSTEM을 날려버리지 않았다는 것과 거기에는 기존에 사용하던 GRUB의 CONFIGURATION FILE이 남아 있다는 것입니다...

만일, 이런 것도 없다면, GRUB CONFIG FILE을 다시 만들거나 LINUX를 다시 깔아야 겠지요???

이런, 서두가 너무 길었네요... 그럼 본격적으로 시작합니다...

끝까지 보시면 아시겠지만, LILO만큼이나 쉽습니다...

1) LINUX BOOTING

> linux rescue

REDHAT INSTALLATION CD #1을 이용하면 Rescue Mode로
쉽게 Booting할 수 있습니다.

그래서 BOOTING DISK의 효용성이 많이 떨어졌지요...

2) 화면에서 시키는 대로 한다...

특히, 중간에 'Continue', 'Read-Only', 'Skip'이 나오는 부분이 있는데, 이 과정은 기존에 있던 Linux Partition을 검색하는 부분이므로 반드시 'Continue'를 해야 합니다.

그렇게 하면, Linux가 있는 Partition이 /mnt/sysimage로 Mount될 것입니다.
위에서 화면에 시키는 대로 모두하고 나면, 프롬프트가 하나 뜹니다.
그러나 이것은 원래 내가 가지고 있던 Linux System을 나타내지 않고 REDHAT INSTALLATION CD에 포함되어 있는 Linux System을 나타내므로 혼동하지 말아야 합니다.

3) CHANGE ROOT

프롬프트에서 다음과 같이 입력합니다...

> chroot /mnt/sysimage

이와 같이 하면 위 2) 과정에서 MOUNT한 기존의 LINUX SYSTEM으로 프롬프트를 바꾸게 됩니다.. 이제 ls -la와 같은 명령을 실행해보면 예전에 내가 가지고 있던 System이라는 것을 확인할 수 있을 겁니다.

4) GRUB 확인

이제 본격적인 GRUB 복구 작업에 들어가겠습니다.

일단, 복구를 하기 전에 기존의 grub가 제대로 있는 지 확인해 두는 것도 잊지 말아야 하겠죠???

> cd /boot/grub

여기서 grub.conf와 그것의 Link인 menu.lst를 확인합니다.

아마 예전에 Multi-Booting을 하던 대로 남아 있을 겁니다...

그렇다면, 이제 본격적인 작업에 들어갈 수 있습니다...

만일, WINDOWS를 새로 까는 과정에서 PARTITION 정보가 바뀌었다면, 바뀐 것을 반영해야 합니다.
(이 부분에 대해서는 GRUB에 관련된 다른 문서를 참고하십시요...)

5) GRUB 복구

> /sbin/grub

위의 것을 실행하면 GRUB PROMPT가 뜹니다...

여기서 아래와 같이 차례로 입력합니다.

> root (hd0,5)

이 문장은 첫번째, HDD의 5번째 Partition에 LINUX SYSTEM이 있음을 나타내므로 개인들의 SETTING에 따라 다른 값을 입력해야 합니다. 만일, 두번째 HDD의 첫번째 Partition이라면 (hd1,1)과 같이 입력하면 되겠죠.

정 몇번째 Partition인 지 모른다면, (hd0,1)부터, 숫자를 늘려가면서 extf2 File system이라는 출력이 나올때까지 계속 해봐도 됩니다. -_-;;;

> install /boot/grub/stage1 d (hd0) /boot/grub/stage2 p /boot/grub/menu.lst

이렇게 하면, GRUB를 MBR에 설치하고 기존에 있던 GRUB 정보를 복구할 수 있을 겁니다.

이렇게 하고 GRUB를 나가면 됩니다.

> quit

6) REBOOT

이제 Rebooting을 하게 되면, 기존에 가지고 있던 GRUB가 나타남을 알 수 있을 것이다...

이렇게 하면 WINDOWS를 다시 깔아서 생기는 LINUX BOOTING문제를 해결할 수 있습니다...

뭐... 딱히 WINDOWS 때문에 생긴 문제가 아니더라도 LINUX로 BOOTING을 하지 못할 경우에 사용해도 되겠죠... 다만, 예전에 쓰던 GRUB CONFIG FILE이 남아 있다는 것을 전제로 하지만요...

그렇지 않다면, GRUB CONFIG FILE을 만들어야 하겠죠???

Forums: 
urmajest의 이미지

Install CD를 넣고, BOOT : 가 뜨면

vmlinuz root=/dev/hda? (파티션 넘버는 아시겠죠 -_-)

로 부팅을 하고,

grub-install /dev/hda

이렇게 해주면 되었던 것 같네요..

eungkyu의 이미지

조금 더 쉬운 방법이 있는데, 리눅스 root 파티션 이름은 알고 있다고 가정합니다. (모르고 있다고 해도 ext2 fs가 나올때까지 root명령을 하나씩 해보면 되지 않을까 하는 -0-)

먼저, ftp://alpha.gnu.org/gnu/grub/grub-0.93-i386-pc.ext2fs를 받아서 floppy에 구워놓습니다. (rawrite 이용)

복구를 할 때는, 일단 이 플로피로 부팅을 하면 grub prompt가 뜹니다.
이제 원하는 옵션을 이용하여 부팅을 하면 됩니다.

부팅하는 첫번째 방법은,

root (hd0,0)
kernel /boot/vmlinuz-... root=/dev/hda1 [기타옵션]
initrd /boot/initrd-...
boot
이고, (file이름은 completion이 되니 쉽게 찾을 수 있겠죠)

두번째 방법은,

root (hd0,0)
configfile file

이렇게 해서 메뉴를 불러온 다음 평소때처럼 메뉴로 부르는것이겠죠.
메뉴 위치를 알아야 쓸 수 있습니다. debian의 경우는 /boot/grub/menu.lst이었던 거 같네요.

물론 부팅한 다음에 grub-install을 해서 mbr을 복구해놔야겠지요.
grub-install /dev/hda
이런 식으로 하면 복구가 됩니다.

송지석의 이미지

eungkyu wrote:

먼저, ftp://alpha.gnu.org/gnu/grub/grub-0.93-i386-pc.ext2fs를 받아서 floppy에 구워놓습니다. (rawrite 이용)

리눅스 PC가 주변에 없어서 rawrite를 쓸 수 가 없는 경우가 있습니다.
이경우 이미지 파일을 윈도2000이나 xp의 부팅디스켓 만드는 프로그램이 있는 디렉토리에서 첫번째 장의 이름과 같게 만들어 넣어두고 구우시면 됩니다.
예전에 parted로 파티션 나눌 때 두장의 플로피를 구워야 하는 데 굽는 프로그램이 없어서 썼던 방법입니다.
eungkyu의 이미지

송지석 wrote:
eungkyu wrote:

먼저, ftp://alpha.gnu.org/gnu/grub/grub-0.93-i386-pc.ext2fs를 받아서 floppy에 구워놓습니다. (rawrite 이용)

리눅스 PC가 주변에 없어서 rawrite를 쓸 수 가 없는 경우가 있습니다.
이경우 이미지 파일을 윈도2000이나 xp의 부팅디스켓 만드는 프로그램이 있는 디렉토리에서 첫번째 장의 이름과 같게 만들어 넣어두고 구우시면 됩니다.
예전에 parted로 파티션 나눌 때 두장의 플로피를 구워야 하는 데 굽는 프로그램이 없어서 썼던 방법입니다.

rawrite는 dos용 프로그램인데요 :)
ntrawrite를 대신 사용할 수도 있겠습니다.
http://ntrawrite.sourceforge.net/
리눅스에서는 그냥 dd나 cat을 이용하면 되겠죠.

송지석의 이미지

ntrawrite가 있었군요.
rawrite는 윈 2K에서 실행하면 장치를 못열어서 오류가 나더군요. 음. 지금 보니 제가 잘못 설명했던 것 같네요. rawrite를 리눅스 PC가 없어서 못쓴다고 했으니. 음.. 허허.

지리즈의 이미지

Quote:
엉뚱한 복구 방법1(2000일경우)
dd if=/dev/hda of=/bootsect.lnx bs=512 count=1 

bootsect.lnx를 2000쪽에 보관해 둔고, 리눅스쪽에도
보관해 둔다.
문제가 생기면 2000으로 부팅한 후. 위의 파일을 c:\boot.ini파일에 추가한다음(
없으면 이 파일을 생성하면 됩니다.) 리눅스로 부팅한다.

[boot loader] 
timeout=30 
default=multi(0)disk(0)rdisk(0)partition(1)\WINNT 
[operating systems] 
multi(0)disk(0)rdisk(0)partition(1)\WINNT="Microsoft Windows 2000 Professional" /fastdetect 
 c:\BOOTSECT.LNX="linux rescue" 

그리고 아래와 같이 보관해둔 파일로 부트섹터를 복구하던지 그냥 쓴다.

dd if=/bootsect.lnx of=/dev/hda bs=512 count=1 
혹은
cat bootsect.lnx > /dev/hda(조금은 위험한듯...)

Quote:
엉뚱한 복구 방법2(2000 혹은 그외의 모든 경우)
디스크를 준비하고 다음명령을 실행한다.
dd if=/dev/hda of=/dev/fd0 bs=512 count=1

디스크를 잘보관한다.(초간단 rescue disk 오직 그 시스템 밖에 복구하지 못하지만)
레스큐 디스크로 부팅이 되면, 아래와 같이 부트섹터를 복구한다.

dd if=/dev/fd0 of=/dev/hda bs=512 count=1 

Quote:
엉뚱한 복구 방법 1+2
dd if=/dev/hda of=/bootsect.lnx bs=512 count=1 

하여 얻은 bootsect.lnx파일을 잘 보관한다.(윈도그 쪽이던 다른 PC에 든지)
문제가 생기면 다른 리눅스 박스에 가서
dd if=/bootsect.lnx of=/dev/fd0 bs=512 count=1 
혹은
cat bootsect.lnx > /dev/fd0(이건 절대 안위험함)

로 레스큐 디스크를 만들던가, 아니면, rawrite를 써서 윈도그쪽에서 해결을 한다.

레스큐 디스크로 부팅이 되면, 아래와 같이 부트섹터를 복구한다.

dd if=/dev/fd0 of=/dev/hda bs=512 count=1 

이 방식은 오직 그 시스템 밖에 복구가 안돼는 최대의 단점이 있지만,
윈도우쪽 시스템을 다시 깔기 직전에 이 정도는 해두면 편리합니다.
그리고 플로피 디스크로 부터 단 512byte만 읽어 옴으로
부팅시간이 아주 매우 빠릅니다.
(특히 방법2 권장)

lilo의 경우도 가능하지만, 커널 컴파일 후 lilo를 실행하면,
부트색터의 내용이 바뀜으로 그 때마다 부트섹터 이미지를 구해야 하는 단점이 있습니다.
grub은 상관없습니다.

방법1은 2000 부트로더를 이용한 grub - linux 부팅방법의 팁도 되겠지요.
아예 처음부터 grub을 인스톨할때 mbr(/dev/hda)가 아니라,
/dev/hda7 이나 /dev/hdb1... 과 같은 리눅스 파티션 앞쪽에 인스톨하여,
부트섹터 이미지를 구하면 됩니다.

There is no spoon. Neo from the Matrix 1999.

지리즈의 이미지

지리즈 wrote:
엉뚱한 복구 방법2(2000 혹은 그외의 모든 경우)
디스크를 준비하고 다음명령을 실행한다.
dd if=/dev/hda of=/dev/fd0 bs=512 count=1

디스크를 잘보관한다.(초간단 rescue disk 오직 그 시스템 밖에 복구하지 못하지만)
레스큐 디스크로 부팅이 되면, 아래와 같이 부트섹터를 복구한다.

dd if=/dev/fd0 of=/dev/hda bs=512 count=1 

초간단 레스큐 디스크 만들기 팁으로 올려도 되겠네요. :-)

There is no spoon. Neo from the Matrix 1999.

HotPotato의 이미지

urmajest wrote:
Install CD를 넣고, BOOT : 가 뜨면

vmlinuz root=/dev/hda? (파티션 넘버는 아시겠죠 -_-)

로 부팅을 하고,

grub-install /dev/hda

이렇게 해주면 되었던 것 같네요..

:lol: 네, 물론 그렇게 하면 됩니다.
하지만, 어떤 PC에서는 그렇게 하면 알 수 없는 바이오스라는 오류만 뜨고 복구가 안되는 경우도 있습니다. 제 경우가 바로 그런 경우인데, `grub-install`이 쉘 스크립트라는 사실을 알고 나서야 소스를 뒤져서 본 주제를 처음 올리신 분이 하신 방법(부분)만 따로 떼어내서 실행했더니 되더군요.

--
즐 Tux~

HowKnow의 이미지

ㅇ.ㅇ

:shock: HowKnow
http://www.nForum.org

윤봉환의 이미지

# /sbin/grub
> root (hd1,0)
> setup (hd0)
> quit

다른 분들이 설명한 글이 많아요. 검색해 보세요.

放下着-----
내려놓으려는 마음도 내려놓기

放下着-----
내려놓으려는 마음도 내려놓기

doodoo의 이미지

동감!

저도 똑같이 하거든요 ^^;

jazzshock의 이미지

Live CD로 부팅 후 터미널 열고

1. sudo -i
2. grub
3. find /boot/grub/stage1

차례로 실행하면 "(hd?,?)"라고 뜨게 되는데 이걸 그대로 다음 명령 "root" 뒤에 입력

4. root (hd?,?)
5. setup (hd0) <-- MBR에 GRUB 설치
6. quit

7. 터미널 닫고 재시작 누르고 CD추출. 끝.

마침 어제 MBR복구할 일이 생겨서 GRUB이 날아가는 바람에 찾아보니 간단히 해결되더군요.

출처는 여기입니다. -> https://help.ubuntu.com/community/RecoveringUbuntuAfterInstallingWindows

익명 사용자의 이미지

다른거보다 훨씬 쉽네요 ㅠ root명령어랑 이런거 잘 몰랐었는데 감사합니당!

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.