윈도우와 리눅스를 멀티 부팅할 때 부트로더

psw9255439의 이미지

윈도우와 리눅스를 멀티부팅을 할 때 부트로더의 위치와 관련해서 질문합니다.

윈도우와 리눅스를 같은 저장 장치에 파티션을 나눠서 설치하는 상황입니다.

부트로더는 MBR에 저장된다고 들었는데요 윈도우를 먼저 설치하고 리눅스를 설치한다면 먼저 윈도우의 부트로더가 MBR에 설치되어 있는 상태에서 GRUB이 윈도우의 부트로더와 함께 MBR에 공존하게 되는 것인가요? 만약 MBR에 윈도우의 부트로더와 GRUB가 함께 존재한다면 왜 GRUB로 부팅되는 건가요?

리눅스를 설치하는 과정에서 GRUB를 어디에 설치할 지를 물어보는데 만약 /dev/sda 를 선택하면 /dev/sda 장치의 MBR에 GRUB가 설치되는 것인가요? 그리고 /dev/sda3 와 같이 파티션을 지정하여 GRUB를 설치하게 되면 MBR이 아닌 위치에 GRUB가 설치되는 것인데 BIOS에서 MBR을 읽는 과정에서 윈도우의 부트로더를 불러오게 되고 윈도우는 리눅스 파티션을 인식할 수 없으므로 리눅스로 부팅할 수 없는 것 아닌가요? 만약 /dev/sda3와 같은 파티션에 GRUB를 설치하게 되면 어떻게 리눅스로 부팅할 수 있나요?

두개의 리눅스를 같은 저장 장체에 파티션을 나눠서 설치하는 상황입니다.
GRUB 부트로더가 MBR에 설치되었을 때 각각의 리눅스에 존재하는 /boot/grub 디렉토리는 MBR에 있는 GRUB에 대한 설정인가요?

2minchul의 이미지

두번은 읽어서 질문의 요지를 파악한것 같아요. 여튼.. 이 기회에 제 얕은 지식을 조금이나마 정리해 봅니다.

  1. '부트로더' 자체는 부트 섹터에 저장되어 유지되어야 하므로 크기가 작아야 합니다. 그래서 부트로더의 본체와 그 설정들은 따로 file로 저장되어 있고, 실질적으로는 [부트섹터에 적재된 부트로더]는 그 [부트로더의 본체]의 위치를 찾아 실행시켜주는 역할을 합니다.

  2. grub의 경우, 위에서 말한 [부트로더의 본체]의 위치가 /boot/grub 디렉토리 입니다. 또 /boot/grub/grub.cfg 에 부트로더의 각종 설정을 저장합니다.

  3. 윈도우는 XP의 경우 NTLDR 부트로더를 쓰고, 7이후로는 bootmgr(부트매니저) 라는 부트로더를 사용합니다. NTLDRNTLDR, NTDETECT.COM, BOOT.INI, BOOTFONT.BIN 파일로 이루어져 있으며 일반적으로 'CMOS 기준으로 첫 번째 디스크의 활성 파티션 (통상적으로 C:드라이브)'의 루트 폴더에 숨겨져 있습니다. bootmgrBootmgr 파일과 Boot/디렉토리 로 이루어져 있으며 일반적으로 '예약 파티션'의 루트에 숨겨져 있습니다.

  4. 윈도우 설치후 리눅스를 설치하셨다면 부트섹터의 부트로더는 grub으로 덮어 씌어지고 윈도우의 부트로더는 file system에 남아있지만 연결(link)이 안된 상태가 됩니다. 즉 부팅시 바로 grub으로 링크되어 버립니다.

  5. 윈도우와 리눅스를 멀티 부팅할 수 있는 방법은 grub에서 bootmgr로 링크시키는 부팅메뉴를 하나 만드는것 입니다. 즉 부팅시 grub이 실행되고 grub에서 '윈도우 메뉴'를 선택하게 되면 grub이 수동으로 윈도우의 부트로더를 실행시키는 구조가 됩니다. 윈도우의 부트로더는 grub을 수동으로 실행시킬 수 없기 때문에 그 반대의 구조는 성립하지 못합니다.
    다음은 grub에서 '윈도우 메뉴'를 만드는 하나의 예제 입니다.

menuentry "Windows 10" {
insmod chain
insmod drivemap
set root=(hd0,msdos1)
chainloader +1
}
  1. /dev/sda에 grub을 설치한 후 /dev/sda3에 또 grub을 설치한다면 grub의 본체는 두개의 파티션에 위치해 있지만 부팅시 부트로더는 /dev/sda3에 있는 grub의 본체에게 링크 시키겠죠. 결론적으로 마지막에 설치한 리눅스만 부팅 가능한 상태가 될겁니다.

  2. 추천하는 멀티부팅 구성 입니다.

    1. 윈도우 설치
    2. 리눅스1 설치 (/dev/sda1에 grub 설치)
    3. 리눅스2 설치 (/dev/sda1에 grub 설치)
    4. 리눅스로 부팅하여 vi등의 에디터로 /boot/grub/grub.cfg에 윈도우 menuentry 추가

  • 쉬운 개념 설명을 위해 정확하지 않은 단어 표현이 쓰였습니다.
  • 일부 정확하지 못한 개념이 섞였습니다. 단순히 흐름만 이해하는 목적으로 읽어 주세요.
  • 글 내용의 범위가 너무 광범위 하여 일부 내용과 멀티부팅 구성 방법의 자세한 내용을 생략하였습니다. 잘 이해가지 않는 부분은 다시 질문 주세요.
  • 밤을 샌 개발자의 글입니다. 의식의 흐름대로 작성된점 양해바랍니다.

이민철 올림
psw9255439의 이미지

감사합니다!!

shint의 이미지

한번 참고해보시면 좋을지도 모르죠. ㅇ_ㅇ;;

----------------------------------------------------------------------------
젊음'은 모든것을 가능하게 만든다.

매일 1억명이 사용하는 프로그램을 함께 만들어보고 싶습니다.
정규 근로 시간을 지키는. 야근 없는 회사와 거래합니다.

각 분야별. 좋은 책'이나 사이트' 블로그' 링크 소개 받습니다. shintx@naver.com

댓글 달기

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
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.