Usb를 이용한 우분투 설치 방법

현제 usb에 grub을 이용하여 윈도우 설치, 윈도우 pe 실행용으로 사용중입니다.

여기에 우분투 서버 설치를 추가 하려고 하는데… 사용법을 잘 모르겠네요…

menu.lst 내용


timeout 60
default 0

title Boot from Hard Drive
rootnoverify (hd0,0)
chainloader (hd0,0)+1

title --------------------
root

title Start Hiren’s BootCD
find --set-root /HBCD/boot.gz
kernel /HBCD/memdisk
initrd /HBCD/boot.gz

title Mini Windows Xp
find --set-root /HBCD/XPLOADER.BIN
chainloader /HBCD/XPLOADER.BIN

title Windows Vista ,7 Setup
root (hd0,0)
chainloader (hd0,0)/bootmgr
boot


어떻게 추가 하면 될까요??

아래 처럼 몇가지 해봤는데… 안돼네요…

(ubuntu_server는 설치CD내용을 복사해놓은 폴더임.)
title Ubuntu Server Install
kernel ubuntu_server/install/vmlinuz file=ubuntu_server/preseed/ubuntu-server.seed quiet –
initrd ubuntu_server/install/initrd.gz

다른 것은 기억이 안나서…

제가 사용하는 방법은 mini 설치 이미지를 받아서 설치하는 방법입니다.
이미지 용량이 적어서 사용하기가 편리합니다. (20-40MB)

title 우분투 네트워크에서 설치 (x64)
find --set-root /iso/mini.iso
map --mem /iso/mini.iso (hd32)
map --hook
chainloader (hd32)
boot

아래의 주소로 가면 우분투 미니 설치 이미지들이 있습니다.

https://help.ubuntu.com/community/Insta ... /MinimalCD

부팅해서 설치 과정에서 서버, 데스크탑 등을 고를 수 있습니다.
그럼.

[quote="ds4180":29b6p23n]
(ubuntu_server는 설치CD내용을 복사해놓은 폴더임.)
title Ubuntu Server Install
kernel ubuntu_server/install/vmlinuz file=ubuntu_server/preseed/ubuntu-server.seed quiet –
initrd ubuntu_server/install/initrd.gz
[/quote:29b6p23n]

[code:29b6p23n]
title Ubuntu Server Install (From ISO)
find --set-root /ubuntu_server
map /ubuntu_server/ubuntu.iso (0xff) || map --mem /ubuntu_server/ubuntu.iso (0xff)
map --hook
kernel (0xff)/casper/vmlinuz.efi boot=casper iso-scan/filename=/ubuntu_server/ubuntu.iso file=ubuntu_server/preseed/ubuntu-server.seed noprompt noeject quiet splash –
initrd (0xff)/casper/initrd.lz

title Ubuntu Server Install (From / of USB)
find --set-root /casper/vmlinuz.efi
kernel /casper/vmlinuz.efi boot=casper cdrom-detect/try-usb=true file=/cdrom/preseed/ubuntu.seed noprompt noeject quiet splash –
initrd /casper/initrd.lz

title Ubuntu Server Install (From HDD)
find --set-root /ubuntu_server
kernel /ubuntu_server/vmlinuz.efi boot=casper bootfrom=/dev/sdb1 live-media-path=/ubuntu_server/casper file=/cdrom/preseed/ubuntu.seed noprompt noeject quiet splash –
initrd /casper/initrd.lz
[/code:29b6p23n]

샘플입니다
첫번째는 ISO이미지로 부팅
두번째는 ISO파일을 USB로 만들거나, LIVE USB 만드는 툴들로 만든경우 USB로 부팅
세번째는 하드디스크(/dev/sdb1)으로 부터 부팅하는 것입니다.

이것을 조합해서 사용해 볼 수 있습니다.
먼저 find --set-root 경로 명령은 모든 디스크의 파티션을 검색해서 해당경로를 찾은 후,
파티션의 GRUB 표현 (예: (hd0,0)) 이런 식으로 /를 설정합니다. 이후, 경로에서 이 표현을 생략하더라도 자동으로 추가되는 효과가 있습니다.
그러니 find --set-root 명령이나 root 명령으로 / 경로를 설정하지 않고, 경로만 적으시면 안됩니다.
iso-scan/filename=경로 옵션은 iso파일을 찾아 해당 파일에서 램디스크 root파일시스템(filesystem.squashfs)를 찾습니다.
이때, live-media-path 옵션을 사용하며, 설정되지 않은 경우, /casper를 검색합니다.
bootfrom옵션은 램디스크 root파일시스템이 위치한 파티션을 지정합니다.
iso-scan/filename 이나 bootfrom 옵션, cdrom-detect/try-usb=true 옵션등은 모두 이러한 root파일시스템을 찾기 위한 옵션입니다.
cdrom-detect/try-usb=true 옵션은 시디롬을 검색하는 대신 USB를 시디롬처럼 인식하는 것입니다.
만일 이러한 설정들이 존재하지 않는 경우, CDROM을 검색하게 되며, 대체적으로 /dev/sr0가 첫번째 시디롬 장치이며,
이것이 성공적으로 검색되면 /cdrom에 마운트됩니다.
그러나, 성공적으로 찾지 못할 경우, 주기적으로 재시도 하기 때문에, 화면이 정지된 듯 보이며, 부팅이 불가합니다.

마지막으로 grub1,grub4dos(16비트 리얼모드) 의 고유기능으로 롬바이오스 펑션을 통해, 장치맵을 변경하는 기능이 있습니다.
map /경로/파일 (0xff) <== (0xff)는 일반적으로 마지막 하드디스크를 의미하며 (hd32)로 표현하기도 합니다.
해당 파일을 hd32 장치로 매핑합니다.
map --hook <== 매핑한 정보를 롬바오스 펑션콜로 적용합니다.
map --mem <== 메모리로 읽어 들여, 램디스크로 설정합니다.
map 으로 파일을 디스크 처럼 매핑할 경우, 해당 파일은 정렬(defrag)되어야 합니다. 왜냐면, 파일시스템으로 로드하는 것이 아니라,
BLOCKLIST (블럭단위)로 로드하기 때문입니다.
하지만, 이것이 실패할 경우를 대비해 || map --mem 파일 (0xff) 명령으로, 램디스크로 로드하게 한 것입니다.
램디스크는 블럭단위가 아니기 때문에, 정렬될 필요가 없으므로, 로드되는데 문제가 없습니다. 단 메모리를 많이 차지합니다.

예)
map /경로/파일.ima (fd0); map --hook; rootnoverify (fd0); chainloader (fd0)+1
map /경로/파일.iso (0xff); map --hook; rootnoverify (0xff); chainloader (0xff)
cdrom --init; map --hook; chainloader (cd0)

chainloader 명령은 다른 곳으로 점프하는 명령으로, 부트코드를 바꿔버리거나, 그곳으로 부팅을 진행하기 위해 사용됩니다.
chainloader 에서, cdrom 과 fd, hd 가 다른 것은, cdrom은 일반 디스크 포멧과 달라, 섹터개념이 아니기 때문입니다.
chainloader 명령도 grub1,grub4dos에서는 어떤 부트코드로도 점프가 가능하지만,
grub2에서는 리눅스용 부트코드만 가능합니다.

[code:29b6p23n]title Chainload to GRUB2
find --set-root /boot/grub/i386-pc/core.img
chainloader /boot/grub/i386-pc/core.img

title Chainload to First Partition
root (hd0,0)
chainloader +1

title Chainload to Window Boot Manager
find --set-root /bootmgr
chainloader /bootmgr
[/code:29b6p23n]

GRUB2에서 역으로 chainloading 도 가능합니다.

[code:29b6p23n]
menuentry "Chainload to GRUB.EXE" {
find --set-root /grub4dos/grub.exe
#linux16 /grub4dos/grub.exe --config-file="find --set-root /boot/grub/grub.cfg; kernel /boot/vmlinuz; initrd /boot/intrd.img"
linux16 /grub4dos/grub.exe
}[/code:29b6p23n]
이를 활용하면, GRUB2에서 GRUB4DOS로 매개변수를 넘겨, 어떤 시디롬(리눅스용이 아닌것 포함)으로 부팅할 수 있습니다. 단, XP는 사타드라이버 문제가 존재하죠.
GRUB2의 큰 장점은 스크립팅입니다.

스크립트 코드로 작성하고, 경우에 따라 GRUB4DOS로 부팅하면, 왠만한 경우를 다 커버할 수 있습니다.

GRUB4DOS를 윈도우즈 메뉴에 추가

[code:29b6p23n]
set STORE=c:\bcd
BCDEDIT.EXE /store %STORE% /create /d "GRUB4DOS" /application bootsector
==>guid 코드 예){2a4b5efd-0969-11dd-9a85-000000000000}
set guid={2a4b5efd-0969-11dd-9a85-000000000000}
BCDEDIT.EXE /store %STORE% /set %guid% device boot
BCDEDIT.EXE /store %STORE% /set %guid% path \grldr.mbr
BCDEDIT.EXE /store %STORE% /displayorder %guid% /addlast
[/code:29b6p23n]

GRUB2 => Bootmgr => GRUB4DOS => GRUB2
이런 코스로 메뉴가 구성될 수 있습니다.

WUBI는 GRUB4DOS를 기본으로 하기 때문에, GRUB4DOS를 잘 알면, WUBI 만지작거릴기 쉽습니다.

GRUB2스크립팅에 관심있으신 분은, SuperGrubDisk와
제가 만들어 사용하는 설정파일을 참조해 보시는 것도 좋습니다.

bluealbum//
방법으로 실행되지 않으나 mini를 알게 되었네요… 감사합니다.

protochaos//
기본을 잘 몰라서… 어렵네요… 자세한 설명 감사합니다.

아래 내용 추가로 mini 버전 일반버전 둘다 실행은 되네요…

title Ubuntu Mini Install
find --set-root /iso/mini.iso
map --heads=0 --sectors-per-track=0 /iso/mini.iso (0xff)
map --hook
kernel (0xff)/linux boot=casper iso-scan/filename=/iso/mini.iso quiet splash –
initrd (0xff)/initrd.gz

title Ubuntu server Install
find --set-root /iso/ubuntu_server.iso
map --heads=0 --sectors-per-track=0 /iso/ubuntu_server.iso (0xff)
map --hook
kernel (0xff)/install/vmlinuz boot=casper iso-scan/filename=/iso/ubuntu.iso quiet splash –
initrd (0xff)/install/initrd.gz

grub이나 iso/syslinux에서 사용하는 kernel 명령은 리눅스 커널인 vmlinuz를 로드하면서, 매개변수를 넘겨주는 겁니다.
이게 grub2에서는 linux라는 명령으로 바뀌었지요 하지만 매개변수는 어자피 커널에 넘겨지는 거라, 어디든 같습니다
그리고 initrd 명령은 메모리에 로드할 것을 말합니다. 최초에 커널은 initrd에서 올린 내용을 기초로 부팅에 필요한 작업을 합니다.

그리고, 그외의 명령들은 커널과 직접적이지 않은 GRUB자체의 명령입니다.
find --set-root 파일경로 ==> 파일경로를 찾아서 찾은 파티션을 현재 디스크 파티션으로 설정
==> find 파일경로의 결과를 root 명령에 넘김 root 명령은 현재 디스크 파티션을 설정하는 명령
즉, 파일경로는 어느파티션에 존재할지 상관없이 검색하여, 경로가 존재하는 파티션을 찾는 명령이죠.
이 명령은 결국 파일을 찾으라는 명령이 아니라, 파일이 존재하는 디스크와 파티션을 찾으라는 명령입니다.

GRUB에서 사용하는 장치 형식은 (hd0,1) hd:하드디스크 cd:시디롬 0:첫번째 디스크, 0: 첫번째 파티션
root (hd1,3) ==> 현재위치를 /dev/sdb4로 설정

map 파일경로 (장치) ==> 해당파일을 디스크장치인양 설정
map --hook ==> 롬바이오스에 파일이 디스크 장치인양 보고
map --mem 파일경로 (장치) ==> 해당파일을 메모리에 올리고, 디스크장치인양 처리

위의 명령중 GRUB에 관한것은 이렇구요.

kernel/linux 커널 다음에 오는 것들은 커널에 전달하는 것들이고, 실제 부팅때 init라는 명령파일이 실행되는데,
이넘이 최초의 실행자(쉘)이자, 첫번째 프로세스가 됩니다. PID(프로세스고유번호)가 1이죠.
ps aux|head -1 해보시면 /sbin/init가 나올겁니다.
커널이 로드되면, 사용자가 넘겨준 매개변수를 /proc/cmdline 파일안에 써넣게 되고, init는 이것을 읽어서 매개변수들은 분석합니다.
boot=casper ==> casper 스크립트를 사용한다는 것이고, /script/initramfs/casper 스크립트를 실행하게되고,
이 안에, ISO검색, 마운트 루틴이 들어 있습니다.
우분투 CD롬을 풀어보시면 파일의 전체용량을 차지하다시피 하는 파일이 있을 겁니다.
filesystem.squashfs라는 파일로, 이것은 일종의 소형우분투를 압축해놓은 것입니다.
그래서 이파일은 루트파일시스템파일이라고 하고, 이것을 메모리에 풀어서, /디렉토리로 사용합니다.

casper 스크립트에 주로 사용하는 파타미터는
toram <== ISO파일등을 메모리로 복사
iso-scan/filename=경로 <== 루트파일시스템파일을 포함하는 ISO파일을 탬색 (경로이므로, 장치가 포함되지않아, 모든 장치파티션에 대해 검색을 합니다)
파일이 성공적으로 검색되면, ISO파일을 마운트한 후, 그안에 있는 루트파일시스템을 /로 사용합니다.
cdrom-detect/try-usb=true <== 기본적으로 ISOLINUX는 CDROM으로 부팅하라고 있는 것이므로, 부트로더는 기본적으로
시디롬에서 로드할것을 염두에 두죠. 이것을 CDROM대신 USB를 탐색하라고 지정해주는 것입니다.
live-media-path=경로 <== 어떤 시디롬이든 하드디스크던 현재 디스크에서 해당 경로에서 하위에서 루트파일시스템을 찾습니다. 기본적으로 /casper 값을 가집니다.
bootfrom=장치 <== 현재 디스크를 설정 /dev/sda1 같은 리눅스 장치표현
preseed/file=파일명 <== LIVE-MEDIA-PATH에서 파일명을 찾아 파일에 있는 내용으로 초기 설정을 합니다.
주로, 설치패키지목록등의 설정들이 들어가죠.
only-ubiquity <== 우분투 데스크탑 환경이 아닌, 설치관리자만 실행합니다. (그러나, Ctrl+Alt+F1-F6의 가상터미널로 전환가능합니다)
persistent <== 라이브모드(COW=Copy-On-Write)로 설정합니다.
기본적으로 사용해보기 모드로 들어가면, 디스크에 접근하는 것이 아니라, 모든 데이터는 메모리에 저장되고 처리되기 때문에,
전원이 꺼지면 변경된 정보는 모두 사라지게 됩니다. - 메모리에 저장해봤자지요.
그러나, persistent 옵션을 주게되면, casper-rw파일 혹은 casper-rw 파티션에 / 디렉토리의 변경사항(루트파일시스템 내용에서 변경된 것들)
을 저장합니다.
Copy-On-Write라는 것은
예를 들어 /디렉토리가 COW모드고, /test.text 파일이 원래 존재 했다고 한다면,
읽을 때는 그냥 /디렉토리(램디스크)에서 읽지만, 변경하게 되면, 파일을 casper-rw파일의 어느 부분에 복사하게 됩니다.
그리고 나서, 다음에 읽을 때는, casper-rw파일에서 읽게 되죠. 즉, casper-rw의 내용을 우선하고, /디렉토리는 나중이 됩니다.
없으면 만들게 되겠죠.

마찬가지로 HOME파티션도 이렇게 가능한데, 이름이 home-rw파일혹은 home-rw라는 이름의 파티션을 사용합니다.

프로그램에서 설치, 라이브용 USB를 만드는 프로그램들은 casper-rw파일을 만들기 쉽게 해주고, persistent옵션을 설정합니다.
사실은 별거없어요.
이런 기능들은 casper스크립트가 거의 다 구현해 놓은 것인데, 그것을 사용하기 쉽게 해 줄 뿐이죠.

root=위치 루트파일시스템을 설정하는 것으로 이것은 커널이 분석합니다.
형식은
root=UUID=파티션고유번호
root=LABEL=파티션이름
root=/dev/sda1
root=/dev/disk/by-label/파티션이름
root=@root <== btrfs에서 root볼륨을 지정합니다.
root=/dev/shm <== 램디스크를 설정합니다. (shm은 shared memory의 약자로, 메모리를 다른 프로그램들과 공유하는 것입니다)
root=당치도 않은경로 <== 루트파일시스템을 마운트하지 못해, shell(initramfs)프롬프트 상태로 떨어지게 합니다.
initramfs 쉘 상태는 busybox(최소의 다기능 쉘) 환경이기 때문에, 명령 사용에 제약이 많지만,
single모드로도 부팅이 안된다면, 요렇게 들어가서 /파일시스템을 직접 마운트해서 변경하고, 부팅을 시도해 볼 수 있습니다.

ramdisk_size=10240 <== 램디스크 크기를 설정합니다.
resume=스왑파티션 <==최대절전모드에서 복구할 장치를 설정 (pm에서 유형을 kernel로 설정한 경우에 해당)

single <== 복구모드, 단일사용자(루트)모드로 로그인 합니다.
text <== GUI없이 콘솔로 로그인합니다 (머 서버니까 어자피 GUI는 없을 테지만요)

그외의 옵션들은 부가적인 옵션으로 별로 중요하지 않습니다.
noeject <== 시디롬을 꺼내라는 메시지를 안보여줌
noprompt <== 재부팅을 확인을 안함
quiet <== 부팅과정을 메시지를 숨김
splash <== 스플래시(로그인 하기전에 나오는 지렁이 화면)을 보여줍니다.

나중에 자세히 읽고 부족한 부분은 질문 드리겠습니다.

지금은 서버 설치 하러 …