Grub2, Archlinux ISO으로 만능 USB 메모리스틱 만들기
경고
"만능USB"이란 말은 사실 과대광고입니다.
하지만, 몇 가지 장점이 있는 USB 메모리스틱을 만드는 방법임:
- 아치리눅스 설치ISO 이미지으로 부팅 가능한 USB 스틱이면서도,
-
ISO파일의 용량만큼만 USB메모리를 활용하는 것이 아니라,
- 용량이 되는만큼 그냥 일반적인 메모리스틱처럼 파일 복사용으로도 쓸 수 있음.
사실 리눅스든 다른 OS의 설치 이미지를 USB메모리에 올리면, 딱 그 설치 이미지만큼만 사용할 수 있게 만들어 버리고, 그나마도 Read-only 상태인 ISO이 되어버리고, 더더욱 나쁘게 다른 추가 파티션을 만들어서 남는 공간을 활용할 수도 없게 만든다. (파티션 이미지가 아니라 디스크이미지인가보다.)
아치리눅스 설치ISO을 사용하는 이유는 적당히 기본적으로 쓸만한 도구들이 다 들어있고, 무선랜 등 네트웍 설정 등도 쉽게 가능한 설치 이미지이기 때문에. 꼭 아치리눅스를 설치하는 것이 아니래도, 그냥 비상시 하드디스크 파일시스템 복구용으로 쓰기에도 유리하기 때문.
USB 준비
- 당연히 파티셔닝, 포맷을 해서 날려도 괜찮을만한 USB 메모리스틱이 필요함.
- 과감히 파티션을 설정하고 포맷한다.
-
파일시스템은
vfat
으로 포맷 한다.- (리눅스를 쓰고 있다고 전제하고)
- (내 경우 USB 메모리의 파티션은
sdg1
이었다) mkfs -t vfat /dev/sdg1
-
다른 파일시스템, NTFS이나 exFAT은 설치이미지의 리눅스 커널이 올라올 때 제대로 마운트를 못한다.
- 아마 둘 다 커널에 들어가 있는 FS이 아니라 FUSE등으로 구현되어 있기 때문일 것 같다.
-
마운트한다.
- 여기서는 편의상
/mnt
에. mount -t vfat /dev/sdg1 /mnt
- 여기서는 편의상
-
아치리눅스 ISO 이미지를 복사한다.
mkdir -p /mnt/iso
-
cp archlinux-2014.12.01-dual.iso /mnt/iso
-
Grub을 USB에 설치한다
- 참고: https://wiki.archlinux.org/index.php/Multiboot_USB_drive#Installing_GRUB
grub-install --target=i386-pc --recheck --boot-directory=/mnt/boot /dev/sdg
- 이제 이 정도까지만 해도 Grub으로 부팅되는 USB을 만들었다.
Grub 설정 + 아치리눅스 설치이미지으로 부팅하기
다음처럼 /mnt/boot/grub/grub.cfg
을 만들어줬다:
# path to the partition holding ISO images (using UUID)
probe -u $root --set=rootuuid
set imgdevpath="/dev/disk/by-uuid/$rootuuid"
# define globally (i.e outside any menuentry)
insmod search_fs_uuid
search --no-floppy --set=isopart --fs-uuid 123-456
# later use inside each menuentry instead
loopback loop ($isopart)$isofile
menuentry '[loopback]archlinux-x86_64.iso' {
set isofile='/iso/archlinux-x86_64.iso'
loopback loop $isofile
linux (loop)/arch/boot/x86_64/vmlinuz img_dev=$imgdevpath img_loop=$isofile earlymodules=loop
initrd (loop)/arch/boot/intel_ucode.img (loop)/arch/boot/amd_ucode.img (loop)/arch/boot/x86_64/archiso.img
}
위 내용에서 몇 군데 자기 상황에 따라 바꿔줘야한다.
(1) set isofile='/iso/archlinux-x86_64.iso'
적당히 다운로드해서 복사한 파일이름으로 바꿔야함.
(2) search --no-floppy --set=isopart --fs-uuid 123-456
123-456
부분을, 꼭 바꿔줘야함.
blkid /dev/sdg1
처럼해서 FS UUID을 얻자.
# blkid /dev/sdg1
/dev/sdg1: UUID="7AFD-FE7A" BLOCK_SIZE="512" TYPE="vfat" PARTUUID="1805ce54-01"
# 여기에서 `UUID` 부분을 사용한다.
# `PARTUUID` 말고.
그래서,
search --no-floppy --set=isopart --fs-uuid 7AFD-FE7A
처럼 바꾸자.
끝
부팅이 아마 잘 될 것임. 그리고 그냥 들고 다니면서 USB메모리로 편하게 쓰기도 좋고, 비상시 복구 디스크로 사용하기도 괜찮은 USB을 하나로 합쳤다.
아치리눅스 설치 이미지에서 기본적으로 wifi-menu
등 커맨드으로
무선랜을 잡거나, chroot
/ arch-chroot
등으로 마운트한
하드디스크의 파일시스템으로 chroot해서 사용할 수도 있어서 꽤
유연하고 활용도가 높다.