Grub2, Archlinux ISO으로 만능 USB 메모리스틱 만들기

Posted on Feb 23, 2020

경고

"만능USB"이란 말은 사실 과대광고입니다.

하지만, 몇 가지 장점이 있는 USB 메모리스틱을 만드는 방법임:

  1. 아치리눅스 설치ISO 이미지으로 부팅 가능한 USB 스틱이면서도,
  2. ISO파일의 용량만큼만 USB메모리를 활용하는 것이 아니라,

    • 용량이 되는만큼 그냥 일반적인 메모리스틱처럼 파일 복사용으로도 쓸 수 있음.

사실 리눅스든 다른 OS의 설치 이미지를 USB메모리에 올리면, 딱 그 설치 이미지만큼만 사용할 수 있게 만들어 버리고, 그나마도 Read-only 상태인 ISO이 되어버리고, 더더욱 나쁘게 다른 추가 파티션을 만들어서 남는 공간을 활용할 수도 없게 만든다. (파티션 이미지가 아니라 디스크이미지인가보다.)

아치리눅스 설치ISO을 사용하는 이유는 적당히 기본적으로 쓸만한 도구들이 다 들어있고, 무선랜 등 네트웍 설정 등도 쉽게 가능한 설치 이미지이기 때문에. 꼭 아치리눅스를 설치하는 것이 아니래도, 그냥 비상시 하드디스크 파일시스템 복구용으로 쓰기에도 유리하기 때문.

USB 준비

  1. 당연히 파티셔닝, 포맷을 해서 날려도 괜찮을만한 USB 메모리스틱이 필요함.
  2. 과감히 파티션을 설정하고 포맷한다.
  3. 파일시스템은 vfat 으로 포맷 한다.

    • (리눅스를 쓰고 있다고 전제하고)
    • (내 경우 USB 메모리의 파티션은 sdg1 이었다)
    • mkfs -t vfat /dev/sdg1
  4. 다른 파일시스템, NTFS이나 exFAT은 설치이미지의 리눅스 커널이 올라올 때 제대로 마운트를 못한다.

    • 아마 둘 다 커널에 들어가 있는 FS이 아니라 FUSE등으로 구현되어 있기 때문일 것 같다.
  5. 마운트한다.

    • 여기서는 편의상 /mnt 에.
    • mount -t vfat /dev/sdg1 /mnt
  6. 아치리눅스 ISO 이미지를 복사한다.

    1. mkdir -p /mnt/iso
    2. cp archlinux-2014.12.01-dual.iso /mnt/iso

  7. Grub을 USB에 설치한다

    1. 참고: https://wiki.archlinux.org/index.php/Multiboot_USB_drive#Installing_GRUB
    2. grub-install --target=i386-pc --recheck --boot-directory=/mnt/boot /dev/sdg
  8. 이제 이 정도까지만 해도 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해서 사용할 수도 있어서 꽤 유연하고 활용도가 높다.