os.iso 을 rufus 와 같은 프로그램으로 usb에 bootable 하게 만드는 원리

익명 사용자의 이미지

운영체제를 깔때 os 이미지 파일 다운 받아 bootable 하게 만드는 프로그램을 이용하여
usb에 넣는거는 알고있으나 그 원리가 궁금합니다.

음...제 궁금한 부분을 나열 한다면
iso는 어떤상태로 있는가 ?
iso 를 usb 에 bootable 하게 만들었다면 usb에 있는 파일은 어떤 상태인가?

====
부트로더와 파일시스템 과 연관시켜 알려주시면 정말 감사하겠습니다.
reference만 해주셔도 정말 감사하겠습니다. !!@@

=====잡담
흠...usb를 쓰는 이유가 보조기억장치에 그파티션에 리눅스(예를들어)를 올린다는건데
그러면 그 파티션에 ext4같은 파일시스템으로 쫙 포맷을 시킨다는것인데
대체 어떡해 usb가 그것을 하는가요 ...그냥 iso 를 넣으면 안되니깐 그 bootable 하게 해주는
프로그램이 그역할을 ???

Stephen Kyoungwon Kim@Google의 이미지

답변을 하려고 보니 강좌 게시판에 글을 3개쯤 나눠 작성해야 될 것 같은 분량이네요.

부팅 과정이나 파일시스템에 관련된 내용을 따로 공부하시는 게 좋을 것 같습니다. 그리고 저도 전문가가 아니기 때문에 아래 내용은 대충 비슷하겠지만 세부적인 내용은 틀릴 수도 있습니다. 더 잘 아시는 분들이 수정해 주시리라 생각합니다.

ISO는 CD의 이미지니까 나중에 CD로 부팅하든 USB로 만들어 부팅하든, 거기서 돌어갈 OS의 루트 파일 시스템을 갖고 있습니다. 그외에도 CD든 USB든 부팅이 가능해야 하니까 grub 부트로더를 포함한, 부팅 관련 정보가 필요하고요.

전자는 CD 부팅이든 USB 부팅이든 차이가 없겠지만, 후자는 다소 다를 수도 있으리라 생각됩니다. rufus 같은 프로그램은 아마도 CD로 부팅할 때 필요한 정보를 ISO에서 찾아내어 USB로 부팅할 때 필요한 형태로 번역해서 USB에 집어넣고, ISO에 들어 있는 루트 파일 시스템도 가져다가 USB에 따로 집어넣는 일을 할 거라고 생각합니다.

컴퓨터가 부팅할 때, 처음에는 펌웨어(흔히 바이오스로 부르는)가 실행됩니다. 펌웨어가 주위에 붙은 장비를 인식하고 거기서 부트로더를 찾아냅니다. USB 스틱은 당연히 펌웨어에게 인식될 수 있어야 하고, 그 안에 grub bootloader도 펌웨어에 의해 인식될 수 있게끔 펌웨어와 정한 약속에 따라 저장되어 있어야 합니다.

UEFI라면 장비 안에 fat 등 특정 파티션이 있어야 하고 사이즈가 일정 크기 이하여야 하고... 이런 게 있겠고요. MBR이라면 아마도 첫 섹터에다 집어넣고 크기가 일정 이하여야 하고, 이런 것들이 있겠죠.

이 CD가 UEFI로 부팅될 것이었다면 ISO 안에 부트로더가 들어간, fat 파티션 같은 거 하나에다 root file system이 들어간 ISO9660 파티션 하나가 압축되어 있을 텐데, USB로 바꿀 때는 비슷하게 fat 파티션 하나 + NTFS 또는 ext4 파티션 하나를 생성하고 각각 부트로더와 루트가 될 파일 내용을 집어넣는다거나 하겠죠. MBR로 부팅될 것이었다면, ISO 안의 MBR에 해당하는 부분에 설치된 파일들에 부트로더가 들어 있을 것입니다. USB도 MBR 방식으로 부팅이 될 수 있게끔 적정 위치에 부트로더를 카피하거나 해야겠죠.

그 외에는 라이브 USB를 실행하면 나오는 리눅스가 사용할 루트 파일 시스템이 ISO 안에 들어 있으니 그걸 USB 스틱 안에 파티션 만들어 집어넣을 것 같습니다. 나중에 USB의 부트로더가 USB의 OS를 로드해서 실행할 때, 그 OS와 연결될 루트 파일 시스템이 USB 안에 당연히 들어 있어야 할 것 같구요.

마지막 부분은 질문이 이해가 안 되네요. USB든 CD든 보조기억장치에 들어 있는 리눅스로부터 빈 하드디스크에 리눅스를 설치하는 원리가 무어냐는 질문인가요?

댓글 달기

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