Usb으로 우분투 설치하기

쉽게 말해서, 우분투사이트에서 다운받은 ISO파일을 윈도우처럼 USB에 풀어서 사용 가능한 방법이 궁금합니다. unetbootin? 등이 있겠지만, 프로그램을 되도록이면 사용하지 않고 기본 프로그램으로, 뭔가 원리를 이해해보고 싶어서 그럽니다.

윈도우의 경우는 저의 지식으로는, MBR자체에서 bootmgr으로 부팅을 한다고 들었지만, 아무래도 우분투 ISO 파일을 풀어서 USB 부팅을 시도했으나, 예상대로 부팅할 수 있는 OS를 찾지 못했다더군요.

ISO파일을 이용해 설치가 가능한 것은, ISO 파일의 mbr(이라고 하나요? cd도 있으려나…)같은 부분에 GRUB이 설치되어 읽을때 bootmgr을 불러들이는게 아니라 GRUB을 통해서 설치 프로그램을 불러들이는 것이라 생각하고 있는데요… 그렇다면 unetbootin같은 프로그램 들도 다 grub4dos같은 걸 설치하여 우분투 부팅을 시도하는 건가요? unetbootin등의 원리가 궁금해 죽겠습니다…

능력자 분들의 답변 기다리겠습니다. 감사합니다.

음… 이야기가 조금 복잡해집니다만…

일단 usb가 만들어지는 순서를 보자면

  1. USB에 bootable flag를 할당한다.

[code:2oabn3f2]
이렇게 하면 바이오스에서 부트로더로 넘어올 떄에 디스크를 "부팅 가능한 디스크"로 인식합니다.
[/code:2oabn3f2]

  1. MBR 영역에 부트로더를 설치한다.

[code:2oabn3f2]
이때 사용되는 부트로더는 SYSLINUX라는 녀석입니다. (GRUB와는 틀립니다)
이 부트로더는 FAT32, NTFS 파티션 상에서 리눅스로 부팅 가능한 디스크를 생성하기 위해 만들어졌습니다.
그래서 윈도우 상에서 구동 가능한 syslinux.exe 파일도 존재합니다.
[/code:2oabn3f2]

  1. 커널, 램디스크, 리눅스 배포판 이미지를 USB에 포함하고 syslinux 설정파일을 수정한다.

[code:2oabn3f2]
이 부분 설명은 제외하겠습니다. 찾으면 많이 나오니까요.

다만, 라이브 USB의 부팅 과정은

1. syslinux
2. kernel 을 메모리에 올림
3. 램디스크를 메모리에 올림
4. 설치환경, 혹은 라이브 환경 구동
4-1. 설치환경에서는 우분투 배포판 이미지를 연결하여 설치 시작

입니다.
[/code:2oabn3f2]

[quote="Circleses":3pvcw7gz]쉽게 말해서, 우분투사이트에서 다운받은 ISO파일을 윈도우처럼 USB에 풀어서 사용 가능한 방법이 궁금합니다. unetbootin? 등이 있겠지만, 프로그램을 되도록이면 사용하지 않고 기본 프로그램으로, 뭔가 원리를 이해해보고 싶어서 그럽니다.

윈도우의 경우는 저의 지식으로는, MBR자체에서 bootmgr으로 부팅을 한다고 들었지만, 아무래도 우분투 ISO 파일을 풀어서 USB 부팅을 시도했으나, 예상대로 부팅할 수 있는 OS를 찾지 못했다더군요.

ISO파일을 이용해 설치가 가능한 것은, ISO 파일의 mbr(이라고 하나요? cd도 있으려나…)같은 부분에 GRUB이 설치되어 읽을때 bootmgr을 불러들이는게 아니라 GRUB을 통해서 설치 프로그램을 불러들이는 것이라 생각하고 있는데요… 그렇다면 unetbootin같은 프로그램 들도 다 grub4dos같은 걸 설치하여 우분투 부팅을 시도하는 건가요? unetbootin등의 원리가 궁금해 죽겠습니다…

능력자 분들의 답변 기다리겠습니다. 감사합니다.[/quote:3pvcw7gz]

하드디스크 별로, mbr(master boot record)는 하나 밖에 없고, 롬바이오스에서 순서를 정하여,
오직 하나만을 사용합니다. 결국 부팅시 사용되는 mbr은 하나 밖에 없습니다.

그런데, 기본적으로 윈도우즈 부트매니져는 부트섹터나, mbr로 부팅은 하지만, 윈도우즈 종류만 자동 식별합니다.
grub은 윈도우즈까지 식별하여 부팅하게 해주지만 말입니다.

grub은 원래 ext2/3/4 파일시스템에서 동작하는 부트로더입니다.
그걸 윈도우즈파티션인 fat/ntfs에서 동작하게 만든 것이, grub4dos에요

윈도우즈 부트매니져에서 리눅스로 부팅하기 위해선… grub4dos가 필요합니다.
윈도우즈에서 우분투를 설치하고자 할때는 wubi로 설치하게 되는데… wubi는 사실 grub4dos를 변형한 것입니다.
wubi로 usb에 설치하시거나, grub4dos를 사용하시면 됩니다.

grub4dos를 윈도우즈부트매니져에 등록하는 방법은
grub4dos를 내려받기 하신 후, c:\에 grubldr.mbr, grubldr, menu.lst파일을 복사하시고,

bcdedit /create /application bootsector /d GRUB4DOS
===>{guid}가 출력됨
bcdedit /set {guid} device partition=c:
bcdedit /set {guid} path \grubldr.mbr
이렇게 하시면, 다음 부팅시, 부트메뉴에 GRUB4DOS라고 나올 것입니다.

GRUB4DOS전환 후, 부트메뉴는 menu.lst파일을 사용하게 됩니다.

그런식으로 프로그램을 설치하지 않고, 사용해보시려면, 굳이 우분투를 설치하지 않아도,
라이브시디로 부팅하시거나, ISO파일로 부팅하셔서 둘러보기 하시면 됩니다.

GRUB4DOS에서 우분투 ISO파일로 부팅하시려면 일단, ISO파일을 http://www.ubuntu.com이나,

http://ftp.daum.net/ubuntu-releases/12.04/에서 내려받기 하신 후, usb 드라이브의 최상위 폴더에 넣어주세요.

그리고나서 menu.lst를 편집하셔서,

[code:3pvcw7gz]
#boot from ubuntu install cd image
title Try out Ubuntu 12.04

#search iso file and set to root
find --set-root /ubuntu-12.04-desktop-amd64.iso

#map iso file as harddisk or memdisk
map /ubuntu-12.04-desktop-amd64.iso (0xff) || map --mem /ubuntu-12.04-desktop-amd64.iso (0xff)

#apply map
map --hook

#load kernel and ramdisk image from iso
kernel (0xff)/casper/vmlinuz boot=casper iso-scan/filename=/ubuntu-12.04-desktop-amd64.iso quiet splash noprompt noeject
initrd (0xff)/casper/initrd.lz

title Install Ubuntu 12.04
find --set-root /ubuntu-12.04-desktop-amd64.iso
map /ubuntu-12.04-desktop-amd64.iso (0xff) || map --mem /ubuntu-12.04-desktop-amd64.iso (0xff)
map --hook
kernel (0xff)/casper/vmlinuz boot=casper toram root=/dev/shm iso-scan/filename=/ubuntu-12.04-desktop-amd64.iso quiet splash noprompt noeject
initrd (0xff)/casper/initrd.lz

title Ubuntu 12.04 (Persistent)
find --set-root /ubuntu-12.04-desktop-amd64.iso
map /ubuntu-12.04-desktop-amd64.iso (0xff) || map --mem /ubuntu-12.04-desktop-amd64.iso (0xff)
map --hook
kernel (0xff)/casper/vmlinuz boot=casper persistent iso-scan/filename=/ubuntu-12.04-desktop-amd64.iso quiet splash noprompt noeject
initrd (0xff)/casper/initrd.lz
[/code:3pvcw7gz]

이렇게 저장하세요,
1번메뉴는 우분투를 사용해보는 것이고,
2번메뉴는 우분투를 설치하기 위해, iso내용을 통째로 메모리에 복사후, 램부팅하는 것이지만 네이티브설치가 아니라,
LIVE-persistent모드를 사용하신 다면
설치하실 필요가 없습니다.
3번메뉴는 LIVE-persistent모드를 사용하는 것으로, 우분투를 실제 파티션에 설치하지 않고,
casper-rw파일에 설치하는 것입니다.
이렇게 하기 위해선 먼저 usb에 casper-rw파일을 생성해야 합니다.
그렇기 때문에 1번메뉴로 부팅하신 후, 터미널에서 다음과 같이 입력하세요

[code:3pvcw7gz]mkdir t
sudo mount /dev/sdb1 t
sudo dd if=/dev/zero of=t/casper-rw bs=1M count=4096
sudo mkfs.ext4 -F t/casper-rw
sudo umount t
[/code:3pvcw7gz]
이렇게 하시면 usb에 4Gi byte의 ext4파일시스템으로 포멧된 casper-rw파일이 만들어 집니다.
이후, 3번 메뉴로 부팅하시면, usb에 우분투를 설치하신 것과 거의 비슷하게 사용하실 수 있습니다.

grub4dos의 원리는…
윈도우즈부트매니져에서 grub4dos.mbr파일을 윈도우즈 부트섹터로 인식하게 한 후, 해당 부트섹터를 로드하여 부팅
grub4dos에서 grubldr.mbr은 512바이트이기 때문에, 부팅에 필요한 나머지 요소들을 grubldr파일에서 읽어옴
grub4dos에서 menu.lst를 검색해 메뉴를 보여줌
grub4dos는 bios메모리 영역을 건드려 iso파일을 디스크인양 속임
grub4dos에서 리눅스커널(vmlinuz)및, 램디스크이미지(initrd.lz - initrd.img를 lzma로 압축한것)를 로드하여 부팅(initramfs)

  • 램디스크 부팅 *
    init파일 실행
    init에서 boot=casper 옵션을 인식하여, /script에 들어 있는 casper스크립트를 실행
    casper스크립트에서 iso-scan/filename옵션을 인식하여, iso파일을 /isodevice에 마운트
    casper스크립트에서 루트파일시스템을 저장한 파일을 검색함(라이브모드에서 이것은 /isodevice/casper/filesystem.squashfs파일임)
    루트파일시스템을 마운트하고, chroot하여 본부팅과정으로 진입

라이브모드에서는 실제 디스크의 루트파티션이 아니라, filesystem.squashfs를 램으로 읽어들여, 이것을 루트디렉토리로 삼고,
/파일시스템의 변경은 메모리내에서만 이루어지기 때문에… 변경 사항이 저장되지 않지만,
persistent모드에서는 copy-on-write 방식으로 casper-rw에 변경사항이 저장되기 때문에… 우분투를 설치한것과 거의 동일하게,
프로그램을 설치및 업그레이드,제거 할 수 있습니다.

copy-on-write는 파일이 변경되면, 원본을 유지한채, 복사본을 만들어 저장하는 것입니다.
squashfs파일 시스템은 iso9660과 같이 전체파일시스템으로 변경이 불가하고, 하나가 변경되면 전체를 다시 저장해야 합니다.
읽기전용이기 때문에, 저장이 안되지만, copy-on-write로 casper-rw에 저장하게 됩니다.
즉 기본적으로 casper-rw내의 파일시스템을 사용하지만, 여기에 파일이 존재하지 않으면,
읽기전용인 루트파일시스템에서 읽어오고, 변경할때는 casper-rw내의 파일시스템에 저장하게 되는 것입니다.

램디스크부팅과정을 체험하고 싶으시면…
grub메뉴에서 편집모드로 들어가신 후,
grub4dos에서는 kernel 로 시작하는 줄
grub2에서는 linux 로 시작하는 줄 뒤에
root=zzz 이라고 적어보세요, 이것은 루트파일시스템을 init에 넘겨주는 커널파라미터로,
zzz이라는 경로는 존재하지 않기 때문에, 루트 파일 시스템을 마운트하지 못하여,
본부팅에 실패하고, initramfs 상태에서 머물게 됩니다.

두분 모두 감사합니다.
테스트로 프로그램을 이용해서 설치해 보니 SYSLINUX라는 걸 이용하는걸 확인했습니다.
grub4dos를 이용한 방법도 매우 자세히 설명해주셔서 감사합니다 ㅠㅠ