Menu

문서정보

목차

ZFS

유닉스의 파일 시스템을 대체하기 위해서 SUN에서 개발한 파일 시스템으로 Solaris 10에 소개된다. 기능을 보면 알겠지만 단순한 파일 시스템으로 보기는 힘들다. 모든 잡다한 관리기능까지를 포함한 볼륨메니저로 봐야 한다. 예컨데 파일 시스템과 Logical Volume manager, snapshots, copy-on-write clones, continuous integrity checking, automatic repaire, 등 무슨 기능일지도 모를 것 같은 다양한 기능들을 가지고 있는 확장된 파일 시스템이다. ZFS를 써본 사람들은 지상 최대의 파일 시스템이라는 찬사를 보낸다. 정말 그러하다.

나는 Cloud 환경에서 신뢰성과 확장성, 성능과 관리성까지 두루 갖춘 만능 File System을 찾아보자라는 목적으로 살펴보게 됐다.

ZFS의 기능을 정리했다.
  1. Data Integrigy
다른 파일 시스템과 구분되는 가장 큰 특징이다. 디스크 상의 유저 데이터를 보호준다. bit rot, cosmic radiation, current spikes, bugs in disk firmware, ghost writes 등으로 부터 데이터를 보호해 준다. 물론 Ext, XFS, JFS, ReiserFS, NTFS 등도 유저 데이터를 보호하기 위한 기능을 가지고 있기는 하지만, ZFS는 이들 보다 탁월한 성능을 보여준다.
  1. Storage Pool
LVM과 마찬가지로 하나 이상의 장치를 통합해서 관리할 수 있다. 이 논리적인 Storage Pool을 zpools라고 하며, block device 처럼 작동한다. 블럭 장치들은 다양한 레벨로 조합할 수 있습니다. non-redundantly (RAID 0과 비슷), mirror ( RAID 1과 비슷 ), RAID-Z (RAID-5와 비슷), RAID-Z2 (RAID-6와 비슷) 등등이다.
  1. Capacity : ZFS는 128-bit 파일 시스템으로 용량에는 제약기 없다고 보면 되겠다. 페타바이트급 파일시스템이라고 하는 이유가 있다.
    • 2^48 개의 독립된 디렉토리를 다룰 수 있다.
    • 파일의 최대크기는 16 exabytes ( 16 X 10^18)
    • zpool의 최대 크기는 256 zettabytes (2^78)
    • 시스템에서 zpools의 갯수는 2^64
    • zpools에서 파일 시스템의 갯수 2^64
  2. Linux와 ZFS

    Linux에 ZFS를 이식하기 위한 노력이 진행 중이다. 이식은 두 가지 방향으로 이루어지고 있다.
    1. native ZFS
    리눅스 커널이 ZFS를 지원하도록 하는 프로젝트
    1. zfs-fuse
    fuse를 이용해서 ZFS를 지원하도록 하는 프로젝트 아직까지는 Linux에서 마음놓고 사용할 만한 수준이 아닌 것 간다. zfs-fuse 같은 경우에는 성능에 문제가 상당히 있어서 zfs란 이런 거구나를 체험하기 위한 수준 정도에서나 사용할 수 있을 것 같다. . Native ZFS는 눈여겨 볼만하다. 꾸준히 개발하고 있는 것 같기는 한데, 언제쯤 1.0이 되서 믿고 쓸만한 날이 올지 모르겠다. 1년전에 0.6.x 버전이었는데, 지금(2013년 9월)도 0.6.x 버전이다.

    zfs-fuse

    1. apt-get install zfs-fuse
    2. zpoll create mypool /dev/sdb /dev/sdc /dev/sdd /dev/sde
    3. zpool status mypool
    4. zfs create mypool/testzfs
    5. FS 성능 측정 : Bonnie++

    Solaris와 ZFS

    opensolaris 설치

    솔라리스는 ZFS를 기본 파일 시스템으로 하고 있다. 이렇게 된거 x86기반의 opensolaris를 설치해서 ZFS를 경험해 보기로 했다. VirtualBox를 이용 해서 가상으로 올렸다. VirtualBox 와 opensolaris 모두 Oracle에서 개발하고 있으니, 궁합이 잘 맞을 거란 생각이 든다. 설치는 윈도우보다 간단하다. 설치 과정은 생략.

    솔라리스를 마지막으로 써본게 아마 9년전 쯤인것 같다. 2002년이던가 ? 당시만 해도 상당히 투박한(하지만 왠지 멋져 보이긴 했음) CDE 화면이었는데, 지금은 gnome이 뜬다. 예쁘다.

    보낸 사람 Linux

    zpool

    논리적 볼륨 관리자의 핵심은 장치를 아우르는 하나의 pool을 만드는 거다. 이 pool을 zpool이라고 부른다.

    테스트를 위해서 SATA 2G x 2 장치를 준비했다. 리눅스에서 하던 것처럼 fdisk -l로 장치를 확인하려고 했더니, 내가 원하는 그 fdisk가 아니다. format으로 장치를 확인할 수 있다.
    # format
    AVAILABLE DISK SELECTIONS:
           0. c7d0 <DEFAULT cyl 2085 alt 2 hd 255 sec 63>
              /pci@0,0/pci-ide@1,1/ide@0/cmdk@0,0
           1. c9t0d0 <ATA-VBOX HARDDISK-1.0-2.00GB>
              /pci@0,0/pci8086,2829@d/disk@0,0
           2. c9t1d0 <ATA-VBOX HARDDISK-1.0-2.00GB>
              /pci@0,0/pci8086,2829@d/disk@1,0

    c9t0d0, c9t1d0을 tank라는 이름의 zpool로 묶기로 했다.
    # zpool create tank c9t0d0 c9t1d0

    제대로 만들어 졌는지 확인.
    # zpool list
    NAME    SIZE   USED  AVAIL    CAP  HEALTH  ALTROOT
    rpool  15.9G  3.80G  12.1G    23%  ONLINE  -
    tank   3.97G   232K  3.97G     0%  ONLINE  -

    zfs로 파일 시스템에 대한 상세 정보를 확인.
    # zfs list
    NAME                         USED  AVAIL  REFER  MOUNTPOINT
    rpool                       4.16G  11.5G  77.5K  /rpool
    rpool/ROOT                  3.16G  11.5G    19K  legacy
    rpool/ROOT/opensolaris      3.16G  11.5G  3.02G  /
    rpool/dump                   511M  11.5G   511M  -
    rpool/export                5.04M  11.5G    21K  /export
    rpool/export/home           5.02M  11.5G    21K  /export/home
    rpool/export/home/yundream     5M  11.5G     5M  /export/home/yundream
    rpool/swap                   512M  11.8G   137M  -
    tank                        74.5K  3.91G    19K  /tank

    zfs는 디렉토리 형태로 pool을 관리할 수 있다. tank 밑에 music, movie, source 3개의 파일 시스템을 만들어 봤다.
    # zfs create tank/music
    # zfs create tank/movie
    # zfs create tank/source
    # zfs list
    NAME                         USED  AVAIL  REFER  MOUNTPOINT
    ...
    tank                         154K  3.91G    23K  /tank
    tank/movie                    19K  3.91G    19K  /tank/movie
    tank/music                    19K  3.91G    19K  /tank/music
    tank/source                   19K  3.91G    19K  /tank/source
    3개의 파일 시스템이 추가로 만들어지긴 했지만 volume을 모두 공유해서 사용하고 있다. 내 목적은 각 파일 시스템 별로 쿼터를 정하는 거다. /tank/movie를 1G를 사용하도록 쿼터를 할당했다.
    # zfs set quota=1g tank/movie
    # zfs list | grep tank
    tank                         154K  3.91G    23K  /tank
    tank/movie                    19K  1024M    19K  /tank/movie
    tank/music                    19K  3.91G    19K  /tank/music
    tank/source                   19K  3.91G    19K  /tank/source
    
    # df -h /tank/movie
    Filesystem            Size  Used Avail Use% Mounted on
    tank/movie            1.0G   19K  1.0G   1% /tank/movie

    mirror, RAIDZ, RAIDZ2

    ZFS는 mirror와 RAIDZ, RAIDZ2 3가지 RAID 레벨을 지원한다. 10G SATA Disk 6개를 추가해서 각 모드별로 테스트를 진행했다.

    RAIDZ와 RAIDZ2는 각각 RAID 5와 RAID 6와 매우 유사하다. 즉
    • RAIDZ : RAID 5 처럼 블럭 기반 striped 와 하나의 분산 parity 블럭을 가진다.
    • RAIDZ2 : RAID 6 처럼 블럭 기반 striped 와 두개의 분산 parity 블럭을 가진다.

    Native ZFS on Linux

    • Native ZFS on Linux : 앞으로 오픈 솔라리스 대신 리눅스를 이용해서 zfs를 테스트할 계획이다.

    Nexenta

    Nexenta는 opensolaris 기반의 NAS/SAN어플라이언스 제품이다. 기업환경에서 ZFS를 이용해서 안정적으로 스토리지 시스템을 구성할 수 있도록 HA(High Availability cluster), Namespace Cluster, CLI및 GUI(웹 기반의) 인터페이스를 제공한다.

    History

    1. 작성일 : 2011년 9월 6일
    2. 수정이력
      1. 작성 : 2011/9/6
      2. : 문장을 다듬었음. 링크 추가