어떤 usb가 모든 리눅스를 설치 가능한가요?

비상용 USB는 만들어 놓는 것이 좋지만,
굳이 USB가 아니더라도, ISO로 부터 부팅이 가능합니다.

윈도우즈부트로더에서 GRUB4DOS를 통해 ISO부팅하기
[url:1m3r3ao4]http://www.ubuntu.or.kr/viewtopic.php?p=112502#p112502[/url:1m3r3ao4]

GRUB2로 ISO부팅하기
[url:1m3r3ao4]http://www.ubuntu.or.kr/viewtopic.php?p=111612#p111612[/url:1m3r3ao4]

위에 적은 것들은, 우분투로 부팅하는 경우이지만, 다른 리눅스에서는…
KENEL(grub1,grub4dos)나 LINUX(grub2) 명령의 뒤에 파라미터만 적절히 맞춰주면 됩니다.

super-grub-disk라는 것이 있는데, 한번 검색해 보세요.
이것은 grub을 기본 부트로더로 하고, 여러가지 자동으로 운영체제 종류를 판별하며…
iso파일을 지정된 위치에 복사해두면… iso파일에 있는 리눅스의 종류에 따라,
자동으로 라이브모드로 부팅합니다.

super-grub-disk는 iso파일로 제공되지만, 실제적으론, grub이 들어가 있고,
grub명령으로 자동으로 검색하는 것입니다.
그만큼 grub은 강력한 부트로더이지요.
다만 grub버젼이 일반 리눅스의 버젼과 다르고, 약간 수정된 면이 있을 겁니다.

어떤 리눅스던지… casper를 지원하면… grub2의 loopback명령으로
아주 쉽게 ISO부팅이 가능합니다.
casper는 원래 대단한것이 아니라, initramfs에 iso부팅을 위한 스크립트들을 추가한 것입니다.
그러니까 initramfs를 지원하는 리눅스는 또한 iso부팅이 쉽습니다.

GRUB2의 loopback모듈을 사용한 부팅 방법만 아신다면,
knoppix, slitaz, debian clones, archlinux 등 대부분의 리눅스로 ISO 부팅이 가능합니다.
라이브시디를 제공하는 모든 리눅스에서 ISO부팅이 가능하다고 보시면 됩니다.
라이브시디라는 것이 시디나 ISO로 부팅해서, 하드디스크 사용없이 램디스크에서 사용하도록 하는 것이니까요
바꿔 말하면, 시디롬이 아니라, 라이브시디 루트이미지가 있으면 된다는 것입니다.

마지막으로, 비상용 USB를 만드신다면, 이 또한 어렵지 않습니다.
어떤 USB저장장치든, FAT32를 지원하기 때문에…
GRUB4DOS를 설치하고, GRUB4DOS에서 KERNEL명령의 옵션에 적당히 파라미터를
넘겨주면, ISO부팅이 가능합니다.
GRUB2를 원하신다면, GRUB4DOS에서, GRUB2 ISO파일을 읽어들여 부팅해도 되죠.

GRUB4DOS를 설치하기 위해선, GRUB4DOS를 다운로드하고, GRUBINST이나, WINGRUB을 다운로드 하셔서 설치하시면 됩니다.
또 다른 방법으로는, 윈도우즈 부트로더를 USB에 설치하고, 윈도우즈 부트메뉴에 GRUB4DOS를 등록하여
부팅하실 수 도 있습니다.

[quote="pobonn":2m4fpwr2]상세한 설명 감사합니다

초보라서 모든게 어렵네요ㅠㅠ

헌데 ISO로 부팅이란 것이 어찌되었던

연결된 USB에서 부트로더를 통해서 부팅하는 것이지요??[/quote:2m4fpwr2]

그런것이 아니구요 USB던 하드디스크던 상관없다는 것이죠.
해당 디스크에 GRUB이나 SYSLINUX/ISOLINUX가 설치되어 있고,
해당 디스크에 로드할 ISO파일이 존재하며,
grub이나 syslinux/isolinux설정에서 ISO로 부팅하도록 설정되어 있으면 된다는 것입니다.
사실 라이브시디이미지의 내용을 보면, 우분투의 경우
/casper/filesystem.squashfs라는 거대파일이 존재하고, 이것이 대부분을 차지합니다.
filesystem.squashfs파일은 라이브모드로 부팅시 /(root)디렉토리로 사용할 파일시스템이
squashfs라는 파일시스템유형으로 저장된 것입니다.

사실, 시디이미지의 전체가 필요한 것이 아니라,
커널(vmlinuz) 와 램디스크이미지(initrd.lz)과 grub등의 부트로더, 그리고, 루트 파일시스템 이미지(filesystem.squashfs)만 있으면
되는 것입니다.

이런 요소들이 들어 있는 하드디스크이던 USB이던 상관없이 라이브모드 부팅이 가능하지요.

저의 넷북의 경우, ODD(시디롬드라이브)가 존재하지 않고, USB는 비상용으로만 만들어 놓았으며,
하드디스크로 ISO부팅하여, 라이브모드로 부팅하여 작업하기도 하고,
윈도우즈용이나 파티션도구, 응급복구 도구등이 들어 있는 여러
ISO파일을 보관하고, GRUB4DOS로 Chainload하여 ISO파일로 부팅하기도 합니다.
GRUB의 ISO부팅은 리눅스계열만 가능합니다만, GRUB4DOS의 경우는
대부분의 ISO파일로 부팅이 가능합니다. 그 차이는 GRUB4DOS는 리얼모드로 동작하기 때문에 발생합니다.
GRUB4DOS는 바이오스펑션을 호출하여, ISO이미지를 하드디스크처럼 인식하게 만들어 부팅하게 합니다.
물론 플로피디스크 이미지를 플로피디스크처럼도 인식하게 할 수 도 있죠.

GRUB4DOS의 MENU.LST의 예제

title Boot from /cdimage.iso
find --set-root /cdimage.iso
#==> 모든 파티션의 /cdimage.iso를 검색하여 루트디렉토리로 설정
map /cdimage.iso (hd32) || map --mem /cdimage.iso (hd32)
#==> 루트디렉토리의 cdimage.iso를 hd32라는 하드디스크 혹은 램디스크로 맵핑
map --hook
#==> 맵핑을 적용하기 위해 바이오스펑션을 호출하여, 장치목록을 변경함
kernel (hd32)/casper/vmlinuz boot=casper iso-scan/filename=/cdimage.iso
#==>
커널을 맵핑한 디스크에서 읽어들이며, casper스크립트를 사용하도록 하며, casper스크립트 내부에서 iso파일을 검색할때 모든 파티션에서 /cdimage.iso를 검색함.
이후, 자동으로 iso파일을 /isodevice로 마운트하고,
filesystem.squashfs파일을 찾아내서, 이를 루트디렉토리로 chroot함
실은 ramdisk를 루트디렉토리로 잡고, unionfs등으로 해당이미지를 /디렉토리에 겹쳐 맵핑함.

initrd (hd32)/casper/initrd.lz
#==> 기본적인 부팅과정인 initramfs 램디스크 이미지 (cpio.lzma 형식임)

initramfs 부팅과정에서 멈추고, 수작업을 해보고 싶으시면,
부트메뉴에서 편집키를 눌러 root=파티션위치 부분을 root=xxx 등으로 존재하지 않는 위치로
변경해서 부팅하면, initramfs에서 chroot가 실패하여 shell상태로 떨어집니다.
이 환경은 기본적으로 busybox를 쉘로 사용합니다.

initramfs에서 수작업하여, 부팅까지 할 수 있는 정도가 되면,
부팅과정의 대부분을 이해할 수 있을 것이며, 어떤 상황에서도 거의 부팅이 가능하며,
어떤 상황에서도 망가진 부분을 복구해 볼 수 있습니다.

protochaos님의 자세한 설명 덕분에 잘 봤습니다.
평소에 그런쪽으로 관심이 많았었습니다. 아직은 윈도우용 컴퓨터가 많이 존재하고 또 그것에 파티션을 나눠서 설치하는것이 좋겠지만, 그렇게 할 환경이 아니고 어렵다면 설명한 방법이 매우 유용하다 생각합니다.
그런데 grub4dos iso부팅은 아직까지 debian, ubuntu계열은 쉬운거 같은데 배포판마다 설정이 쉬운것만 있지는 않고 까다롭고 어렵고 안되는 배보판까지 있는거 같더군요. 무엇인가 통일된 방법은 아직까지 아닌거 같은 느낌이 들었습니다. 개인적으로 menu.lst 셋팅이 뭔가 통일된 방법이 있었으면 싶내요. 윈도우도 설치용도로 7은 이미 되는걸로 아는데, live사용목적으로 iso부팅이 되었으면 얼마나 좋을까라는 생각도 해봤습니다.
iso 부팅이 굉장히 유용하다 생각하고 있습니다. 특히 윈도우 사용자에게 cd, dvd, usb를 필요로 하지 않고 간단하게 써볼수 있어서 매우 매력적인 방법이 아닐까 생각합니다.
소개해주신 super-grub-disk 는 처음보는데요, 굉장히 쉽게 iso 부팅을 할 수 있을것 같은 느낌이 듭니다. 그걸로 당분간 재미있게 놀아볼수 있을거 같내요. 감사합니다.

[quote="roid로이드":k8bzv6ha]protochaos님의 자세한 설명 덕분에 잘 봤습니다.
평소에 그런쪽으로 관심이 많았었습니다. 아직은 윈도우용 컴퓨터가 많이 존재하고 또 그것에 파티션을 나눠서 설치하는것이 좋겠지만, 그렇게 할 환경이 아니고 어렵다면 설명한 방법이 매우 유용하다 생각합니다.
그런데 grub4dos iso부팅은 아직까지 debian, ubuntu계열은 쉬운거 같은데 배포판마다 설정이 쉬운것만 있지는 않고 까다롭고 어렵고 안되는 배보판까지 있는거 같더군요. 무엇인가 통일된 방법은 아직까지 아닌거 같은 느낌이 들었습니다. 개인적으로 menu.lst 셋팅이 뭔가 통일된 방법이 있었으면 싶내요. 윈도우도 설치용도로 7은 이미 되는걸로 아는데, live사용목적으로 iso부팅이 되었으면 얼마나 좋을까라는 생각도 해봤습니다.
iso 부팅이 굉장히 유용하다 생각하고 있습니다. 특히 윈도우 사용자에게 cd, dvd, usb를 필요로 하지 않고 간단하게 써볼수 있어서 매우 매력적인 방법이 아닐까 생각합니다.
소개해주신 super-grub-disk 는 처음보는데요, 굉장히 쉽게 iso 부팅을 할 수 있을것 같은 느낌이 듭니다. 그걸로 당분간 재미있게 놀아볼수 있을거 같내요. 감사합니다.[/quote:k8bzv6ha]

저는, grub2와 grub4dos를 동시에 사용합니다.
메인 부트로더는 grub2이구요, grub4dos로 chainload하여 일반 iso로도 부팅합니다.
super-grub-disk가 예전엔 grub lua module을 사용하였고, 지금은 lua module은 빠져 있죠.
예전엔 grub lua module을 사용하다가, 지금은 그냥 grub2로 코드로 작성하는데…
둘다 super-grub-disk의 설정을 분석하여 많이 얻어냈죠.

grub2에서 grub4dos로 chainload하기는 쉽습니다.
linux16 /grub4dos/grub.exe --config-file=";으로 분리된 명령줄" 이런식으로 하면…
바로 GRUB4DOS에 전달되어 명령들이 실행됩니다.

예전의 LUA모듈보다는 못하지만, GRUB2로만 작성하더라도, regex 모듈을 사용하여, 소기의 성과를 거둘 수 있습니다.

grub4dos의 경우에도 원래 버젼업이 안되지만, google의 중국인인 chenall 님의 개인 업데이트 버젼은…
msdos batch형식으로 스크립팅도 가능하게 합니다. 이걸 사용하면… grub4dos에서 프로그래밍적으로
부팅을 적용할 수 있죠.

아래는 제가 적용중인 /boot/grub/custom.cfg의 일부분 입니다.
참고해보세요 ^^

[code:k8bzv6ha]
insmod part_msdos
insmod fat
insmod ntfs
insmod ext2
insmod loopback

#.... 중략 ....
search -s grub4dos_dev -f /grub4dos/grub.exe
iso_dir=/boot-images

function boot_legacy_iso {
set iso_file="$1"
set iso_dir2="$2"
if [ -z "$2" ]; then
set iso_dir2=/boot-images
fi
set boot_legacy_cmd=""find --set-root ${iso_dir2}/${iso_file}; map ${iso_dir2}/${iso_file} (0xff); map --hook; chainloader (0xff)""
linux16 ($grub4dos_dev)/grub4dos/grub.exe --config-file=""find --set-root ${iso_dir2}/${iso_file}; map ${iso_dir2}/${iso_file} (0xff); map --hook; chainloader (0xff)""
}
menuentry ‘Acronis Tools’ {
boot_legacy_iso acronis.iso
}
menuentry ‘Hirens Boot CD’ {
boot_legacy_iso Hirens.BootCD.iso
}
menuentry ‘snoopy Ghost’ {
boot_legacy_iso snoopy.Ghost.iso
}
menuentry ‘Mini Windows 7’ {
boot_legacy_iso Win7pe.iso
}
menuentry ‘MiniTool_PatitionWizard_HomeEdition’ {
boot_legacy_iso MiniTool.PartitionWizard.HomeEdition.iso
}

function list_isos {
insmod part_msdos
insmod fat
insmod ntfs
search -s grub4dos_dev -f /grub4dos/grub.exe
iso_dir=/boot-images

export grub4dos_dev
export iso_dir
export boot_legacy_iso

v="a=1"
for img in (hd0,1)$iso_dir/*.iso; do
	regexp -s img_name "^.*/([^/]*)\$" $img
	v="$v;menuentry ""$img_name"" { boot_legacy_iso $img_name }"
done

}

menuentry "ArchiLinux Live(AMD64)" {
insmod fat
insmod ntfs
insmod loopback
isofile=/ubuntu-cd/archlinux-2011.08.19-core-dual.iso
search -s -f $isofile
loopback lo $isofile
linux (lo)/arch/boot/x86_64/vmlinuz earlymodules=loop img_dev=/dev/sda1 img_loop="${isofile}" archisolabel=ARCH_201108 ramdisk_size=75%
initrd (lo)/arch/boot/x86_64/archiso.img
}

submenu "Boot from ISO" {
insmod part_msdos
insmod fat
insmod ntfs
insmod regexp
insmod functional_test
insmod normal

search -s grub4dos_dev -f /grub4dos/grub.exe
iso_dir=/boot-images

export grub4dos_dev
export iso_dir

for img in (hd0,1)$iso_dir/*.iso;
do
	regexp -s img_name "^.*/([^/]*)\$" $img
	menuentry "$img_name" --source="boot_legacy_iso $img_name"
done

}
menuentry "Windows XP/2k NTLDR (Auto-detect)" {
linux16 ($grub4dos_dev)/grub4dos/grub.exe --config-file=""map () (hd0); map (hd0) (); map --hook; find --ignore-floppies --ignore-cd --set-root /ntldr; chainloader /ntldr""
}
menuentry "Windows 7/8/Vista BootMgr (Auto-detect)" {
linux16 ($grub4dos_dev)/grub4dos/grub.exe --config-file=""map () (hd0); map (hd0) (); map --hook; find --ignore-floppies --ignore-cd --set-root /bootmgr; chainloader /bootmgr""
}
[/code:k8bzv6ha]

리눅스 배포판에 따라, 라이브 부팅이 차이가 나서 난감하다고 하시는데…
이것은 super-grub-disk의 autoiso.cfg를 참고하시면 됩니다.

grub4dos 부트로더를 MBR에 설치하시려면

[code:k8bzv6ha]
sudo chmod +x ~/Downloads/grub4dos/bootlace.com
sudo ~/Downloads/grub4dos/bootlace64.com
mkdir t
sudo mount /dev/sdb1 t
sudo cp /grub4dos/{grldr,glrdr.mbr} t/
sudo gedit t/menu.lst
sudo umount t
[/code:k8bzv6ha]

여기서 0x80은 첫번째 디스크, 0x81은 두번째 디스크 이런식입니다.
grubinst을 다운받아서 설치하실 수 도 있습니다.