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 설정에 기반하고 있다면 여러분은 수동으로 이 방법 을 이용해서 새로운 비트로 전환해야 합니다.-
ZFS 부트 비트들은 snv_62 에서 사용 가능함.
-
ZFS rootpool 을 위한 디스크를 준비. rootpool 은 싱글 디스크 디바이스 혹은 디바이스 슬라이스 혹은 미러로 구성된 설정에서 가능함. 만약 전체 디스크를 rootpool 로 사용하고 있다면 반드시 SMI 레이블을 이용해서 레이블 된 슬라이스 구문 (e.g. c0d0s0) 을 사용해야 함.
-
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 -
-
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
-
-
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
-
-
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
-
새로운 부트로더를 설치 한다. 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/c1d0s0BIOS 의 부트 디바이스를 c1d0 으로 변경한다. 그러면 동일한 Default-ZFS menu.lst 항목이 c1d0s0 의 rootpool 의 기본 bootfs 를 부팅시킬 것이다:
-
-
재부팅 한다. GRUB 메뉴에서 ZFS 부트 환경을 선택해주거나 BIOS 에서 부트 디바이스를 변경해주도록 한다.
"오픈솔라리스" 카테고리의 다른 글
- 솔라리스, 리눅스, FreeBSD 커널의 비교 (댓글 4개 / 트랙백 0개) 2006/12/23
- OpenSolaris 2008.05 발표 (댓글 0개 / 트랙백 0개) 2008/05/13
- Dtrace CookBook (댓글 3개 / 트랙백 1개) 2007/01/23
- CrossBow 시작하기 (댓글 0개 / 트랙백 0개) 2008/08/12
- 향상된 리소스 관리 및 존 통합 (댓글 0개 / 트랙백 0개) 2008/06/16
- Indiana 란 무엇이고 어떻게 참여할 수 있나요? (댓글 0개 / 트랙백 0개) 2008/04/17
- 오픈솔라리스 프로젝트 발전에 기여하기 (댓글 3개 / 트랙백 0개) 2006/09/23
- Inside OpenSolaris: Introduction to Solaris Dri... (댓글 1개 / 트랙백 0개) 2005/10/23
- FAQ: 오픈솔라리스 ON(OS/Net) 번역 FAQ (댓글 0개 / 트랙백 0개) 2008/02/18
- BrandZ/SCLA FAQ (댓글 1개 / 트랙백 0개) 2006/02/23
댓글을 달아 주세요
자바는 알면 알수록 재미가 있어지네요. 무궁무진한 자바의 세계로 빠져들어 갑니다. 좋은 자료 잘 활용하겠습니다.
2007/09/17 23:47좋은 정보 감사해요~
2007/09/19 03:27