ZFS Boot

솔라리스/오픈솔라리스 2007/06/13 13:27 Posted by Sun

ZFS 부트란 무엇입니까?

ZFS 팀은 솔라리스 운영체제를 ZFS 루트 파일 시스템에서 부팅 시키고 솔라리스 운영체제를 ZFS 파일 시스템으로 인스톨 하는 기능을 제공할 수 있도록 작업 하고 있습니다.

ZFS 부트 프로젝트는 3가지 부분으로 나누어 집니다: x86 부트, sparc 부트, 그리고 install 입니다. x86 부트는 snv_62 에서 부터 가능합니다. 셋업 설명서는 이 문서의 아래에 설명되어 있습니다. Sparc 부트와 Install 은 아직까지 작업중입니다.

ZFS 부트 프로젝트는 솔라리스 시스템을 ZFS 타입의 루트 파일 시스템으로 부터 부팅 시킬 수 있도록 합니다. 작업의 주요 부분들은:

  • GRUB 부트 로더를 위한 ZFS 플러그-인 (snv_62 에서 사용 가능)
  • SPARC 에서 zfs 파일 시스템의 파일들을 읽을 수 있는 부트 로더 개발.
  • 루트 파일 시스템으로써 작동하는데 필요한 ZFS 의 기능 향상
  • 솔라리스 Install 과 Liveupgrade 에서 루트 파일 시스템을 ZFS 풀을 이용해서 설정하고 유지할 수 있는 기능 향상.

다음 작업들

남은 두가지 작업은 SPARC 에서의 ZFS 부트와 ZFS Install 입니다. 이 2가지 작업은 다음의 bugid 로 추적 가능합니다:
  • 6521468 ZFS Boot support for the SPARC platform
  • 6521472 need ZFS Install to set up an ZFS root filesystem

알려진 버그들

  • 5008936 ZFS and/or zvol should support dumps
  • 6528296 system hang while zvol swap space shorted
  • 6486493 zfs as a root file system and the sata framework don't interact properly
  • 6524994 system fails to boot zfs root filesystem after detaching a vdev from the rootpool mirror
  • 6538017 ZFS boot to support gzip decompression
  • 6540322 Unable to boot zfs-root on a mirrored pool with one disk physically missing
  • 6541114 GRUB/ZFS fails to load files from a default compressed (lzjb) root

x86 에서 ZFS 를 부트하기 위한 수동 설정 (스크립트 버전은 여기 에 있습니다).

주의: zfs 루트 기반으로 운영되고 있는 시스템이 기존의 mountroot 설정에 기반하고 있다면 여러분은 수동으로 이 방법 을 이용해서 새로운 비트로 전환해야 합니다.
  1. ZFS 부트 비트들은 snv_62 에서 사용 가능함.

  1. ZFS rootpool 을 위한 디스크를 준비. rootpool 은 싱글 디스크 디바이스 혹은 디바이스 슬라이스 혹은 미러로 구성된 설정에서 가능함. 만약 전체 디스크를 rootpool 로 사용하고 있다면 반드시 SMI 레이블을 이용해서 레이블 된 슬라이스 구문 (e.g. c0d0s0) 을 사용해야 함.

  1. ZFS rootpool 을 루트 파일시스템으로 생성하고 /zfsroot 에 마운트 함. 그리고 재부팅 후에 /zfsroot 를 마운트 하도록 /etc/vfstab 를 편집한다. 이 글의 전체 설명에서 우리는 'rootpool' 을 'c0d0s3' 에 생성된 pool 이름으로 사용하고 'rootpool/rootfs' 를 ZFS 기본 부트 파일 시스템 이름으로 사용한다.

    # zpool create rootpool c0d0s3
    # zfs create rootpool/rootfs
    # zfs set mountpoint=legacy rootpool/rootfs
    # mkdir /zfsroot
    # mount -F zfs rootpool/rootfs /zfsroot
    

    그리고 아래의 목록을 /etc/vfstab 에 추가시킨다:

    rootpool/rootfs - /zfsroot zfs ? yes -
  1. UFS 루트 컨텐트를 ZFS 루트 파일시스템으로 이주시킨다:

    • UFS 루트 파일시스템의 모든 파일들을 새로 생성한 ZFS 루트 파일시스템으로 복사한다. 다음의 커맨드가 마운트 포인트를 이동해가며 작업 없이 필요한 작업을 수행한다. 이 커맨드는 상황에 따라 다르지만 약 30분 정도의 시간이 걸릴 것이다. 주의할 점으로 이 작업은 마운트 포인트에 걸쳐서 작업하지 않으므로 만약 /usr, /var, 혹은 다른 파일 시스템들이 다른 마운트포인트에 존재한다면 다음의 커맨드를 각각에 맞게 이용해서 복사해야 한다.

      # cd /
      # find . -xdev -depth -print | cpio -pvdm /zfsroot
      
    • 자동으로 생성되는 파일 시스템을 위한 디렉토리 구조가 생성되어야 한다. 이 스크립트 를 사용해서 이것들을 생성한다.

    • /devices 파일 시스템을 이주시킨다. /devices 는 devfs 의 가상 파일 시스템으로 ufs 보다 상위 레이어에 저장된다. 시스템이 부팅 되면 /devices 는 이 상위 레이어 보다 더 상위에 마운트 되고 하단에 위치한 레이어를 숨겨 준다. /dev 파일시스템과 동일 하다. 하단의 존재하는 파일들을 보기 위해서 다음과 같은 작업을 한다:

      # mount -F lofs -o nosub / /mnt
      # (cd /mnt; tar cvf - devices dev ) | (cd /zfsroot; tar xvf -)
      # umount /mnt
      
  1. ZFS 루트 파일시스템 설정을 완료한다:

    • 만약 ZFS 로 부팅을 하는 동안 계속해서 UFS 루트 파일 시스템이 마운트 되길 원한다면 ZFS 파일 시스템에 "ufsroot" 라는 이름의 디렉토리를 생성한다. 이것은 ZFS 로 부팅 할동안 UFS 루트 파일시스템을 마운트 하는데 사용될 것이다.

      # mkdir /zfsroot/ufsroot
      
    • /zfsroot/etc/vfstab 을 편집해서 새로운 ZFS 루트와 UFS 루트 마운트 항목을 수정한다. UFS 루트가 "/" 에 마운트 되지 않았음을 반드시 확인한다. 여러분은 이미 swap 슬라이스 셋을 가지고 있을 것이다. 추가되는 항목들은 다음과 같을 것이다:

      rootpool/rootfs - / zfs - no -
      /dev/dsk/c0d0s0 /dev/rdsk/c0d0s0 /ufsroot ufs - yes -
      
    • 이 파일 시스템을 기본 ZFS 부트 파일 시스템으로 지정한다:

      # zpool set bootfs=rootpool/rootfs rootpool
      
    • /zfsroot/boot/solaris/filelist.ramdisk 를 편집해서 "etc/zfs/zpool.cache" 를 포함하게 한 다음 ZFS 루트의 부트 어카이브를 업데이트 한다:

      ("etc/zfs/zpool.cache" 를 filelist.ramdisk 에 추가)
      # /usr/sbin/bootadm update-archive -R /zfsroot
      
  1. GRUB 을 설정해서 ZFS 루트 파일시스템을 부팅하도록 지정:

    • /zfsroot/boot/grub/menu.lst 파일을 파일시스템의 최상위로 복사한다. 왜냐하면 그곳이 GRUB 이 menu.lst 파일을 읽어 들이는 곳이기 때문이다:

      # mkdir -p /rootpool/boot/grub (assuming rootpool is mounted on 
      /rootpool) # cp /zfsroot/boot/grub/menu.lst /rootpool/boot/grub
    • /rootpool/boot/grub/menu.lst 를 수정해서 ZFS 부트 파일 시스템 항목을 추가하도록 한다. 유닉스 프로그램 뒤에 '-B $ZFS-BOOTFS' 를 추가한다. 여러분의 항목들은 다음과 같아질 것이다:

      title Solaris ZFS
      kernel$ /platform/i86pc/kernel/unix -B $ZFS-BOOTFS,console=ttya
      module$ /platform/i86pc/boot_archive
      

      이 항목은 'rootpool' 의 'bootfs' 속성에서 정의된 기본 ZFS 부트 파일 시스템 'rootpool/rootfs' 을 통해서 부팅을 시작한다.

      만약 rootpool 이 기본 부트 디바이스가 아니면 'root' 커맨드를 통해서 부트 디바이스를 ZFS rootpool 로 리다이렉트 시킬 수 있다. 여러분의 항목은 아래와 같을 것이고 UFS 루트는 슬라이스 0(기본 부트 디바이스) 그리고 ZFS 루트는 c0d0 의 슬라이스 3에 있다고 가정한다:

      title Solaris ZFS
      root (hd0,0,d)
      kernel$ /platform/i86pc/kernel/unix -B $ZFS-BOOTFS,console=ttya
      module$ /platform/i86pc/boot_archive
      

      이 항목은 c0d0s3 상에서 'rootpool' 의 pool 속성 'bootfs' 에 정의된 'rootpool/rootfs' 라는 ZFS 부트 파일 시스템을 통해서 부팅 한다.

      root 항목은 다음과 같은 포맷을 가지고 있고 (hdx,x,x) 첫번째 x 는 디스크 구분자(identifier), 두번째는 파티션 넘버(0-3), 세번째는 슬라이스 넘버(a-h) 를 가르키는데 여기서 a 는 슬라이스 0 이고 h 는 슬라이스 7 이다. 만약 여러분의 부트 환경이 installgrub 커맨드에 주어진 디스크 슬라이스 상에 있다면 root 커맨드는 필요하지 않을 것이다 단계 #7 에서 좀 더 자세한 정보를 확인하기 바란다.

      하나의 풀에는 여러개의 부팅 가능한 파일 시스템이 존재할 수 있다. 사용자는 기본 부트 파일 시스템 이름을 GRUB 의 커맨드 'bootfs <pool/fs>' 를 이용해 오버라이드 할 수 있다. 커널 커맨드 이전에 삽입하기 바란다. 예제:

      title Solaris ZFS
      bootfs rootpool/rootfs2
      kernel$ /platform/i86pc/kernel/unix -B $ZFS-BOOTFS,console=ttya
      module$ /platform/i86pc/boot_archive
      

      failsafe 모드를 위해 다음과 같은 항목을 menu.lst 에 추가한다:

      kernel /boot/platform/i86pc/kernel/unix -B console=ttya
      module /boot/x86.miniroot
      
  1. 새로운 부트로더를 설치 한다. grub 부트로더는 installgrub(1M) 이라 불리는 유틸리티에 의해 설치 된다. 이 커맨드는 파라미터로써 stage1, stage2 의 포인트(새롭게 bfu 된 파일시스템의 /zfsroot/boot/grub/ 에 존재함), 그리고 부트 환경을 가지고 있는 raw 디바이스 명을 받는다. Installgrub 은 stage1, stage2 를 디스크 파티션의 부트 영역에 설치할 것이다. raw 디바이스는 root 가 어디인지 가르킨다. 아래의 예제는 installgrub 을 ZFS rootpool 을 가지고 있는 시스템에서 사용한 예제 이다.

    • ZFS rootpool (c0d0s3) 과 UFS root (c0d0s0) 는 동일한 디스크에 존재한다:

      # installgrub /zfsroot/boot/grub/stage1 
      /zfsroot/boot/grub/stage2 /dev/rdsk/c0d0s3

      그 다음 다음의 항목은 c0d0s3 의 rootpool 에 있는 기본 부트 파일 시스템을 부팅시킬 것이다:

      title Solaris Default-ZFS
      kernel$ /platform/i86pc/kernel/$ISADIR/unix -B $ZFS-BOOTFS,
      console=ttya module$ /platform/i86pc/boot_archive
    • ZFS rootpool (c1d0s0) 과 UFS root (c0d0s0) 가 서로 다른 디스크에 존재한다:

      # installgrub /zfsroot/boot/grub/stage1 
      /zfsroot/boot/grub/stage2 /dev/rdsk/c1d0s0

      BIOS 의 부트 디바이스를 c1d0 으로 변경한다. 그러면 동일한 Default-ZFS menu.lst 항목이 c1d0s0 의 rootpool 의 기본 bootfs 를 부팅시킬 것이다:

  1. 재부팅 한다. GRUB 메뉴에서 ZFS 부트 환경을 선택해주거나 BIOS 에서 부트 디바이스를 변경해주도록 한다.

"오픈솔라리스" 카테고리의 다른 글

2007/06/13 13:27 2007/06/13 13:27

TRACKBACK :: http://blog.sdnkorea.com/blog/trackback/395

댓글을 달아 주세요

  1. 고진구  수정/삭제  댓글쓰기

    자바는 알면 알수록 재미가 있어지네요. 무궁무진한 자바의 세계로 빠져들어 갑니다. 좋은 자료 잘 활용하겠습니다.

    2007/09/17 23:47
  2. 박정숙  수정/삭제  댓글쓰기

    좋은 정보 감사해요~

    2007/09/19 03:27
[로그인][오픈아이디란?]

◀ Prev 1  ... 247 248 249 250 251 252 253 254 255  ... 624  Next ▶