Linux는 파일 시스템과 흥미로운 관계가 있다. Linux는 오픈이므로, 이는 차세대 파일 시스템과 새롭고 혁신적인 파일 시스템 개념을 위한 핵심 개발 플랫폼이 되는 경향이 있다. 최근의 흥미로운 두 개의 예제는 방대하게 확장 가능한 Ceph 및 지속적인 스냅샷하는 파일 시스템 nilfs2(그리고 물론, 네 번째 확장된 파일 시스템[ext4]과 같은 열심히 작업하는 파일 시스템에서의 진화)를 포함한다. 이는 또한 과거의 파일 시스템에 대한 인류학적인 사이트 —DOS VFAT, Macintosh(HPFS), VMS ODS-2 및 Plan-9의 원격 파일 시스템 프로토콜—이기도 하다. 하지만 모든 파일 시스템을 통해 Linux에서 지원되도록 하겠지만, 이를 구현하는 기능으로 인해 주목할 만한 관심을 생성하는 것 중 하나는 Oracle의 ZFS(Zettabyte File System)이다.
ZFS는 Sun Microsystems가 설계 및 개발하여(Jeff Bonwick 주도 하에), 2004년에 최초로 발표되고 2005년에 Sun Solaris로 통합되었다. 비록 가장 많이 회자되고 기능이 풍부한 파일 시스템과 가장 대중적인 오픈 운영 체제가 쌍을 이루는 것이 이상적인 조화라고 하더라도, 라이센싱 문제로 인해 통합이 제한되었다. Linux는 GNU GPL(General Public License)로 보호되는 반면, ZFS는 Sun의 CDDL(Common Development and Distribution License)로 처리된다. 이러한 라이센스 계약은 다른 목표가 있고, 이로 인해 제안이 충돌하게 된다. 다행히도 이는 Linux 사용자가 ZFS 및 그 제공하는 기능을 즐길 수 없다는 것을 의미하지는 않는다.
이 기사는 Linux에서 ZFS를 사용하기 위한 두 가지 메소드를 탐색한다. 첫 번째는 FUSE(Filesystem in Userspace) 시스템을 사용하여 ZFS 파일 시스템을 사용자 공간으로 밀어 넣어 라이센싱 문제를 방지한다. 두 번째 메소드는 Linux 커널로 통합하기 위한 ZFS의 기본 포트인 동시에, 지적 재산권 문제를 방지한다.
ZFS를 파일 시스템이라고 하는 것은 기존의 상식으로 보면 그 이상이므로 다소 부적절한 명칭이다. ZFS는 논리적 볼륨 관리자의 개념과 기능이 매우 풍부하고 엄청나게 확장 가능한 파일 시스템을 결합한다. ZFS가 기반으로 하는 일부 원칙을 탐색하여 시작해보자. 먼저, ZFS는 기존의 볼륨 기반 모델이 아니라 풀링된 스토리지 모델을 사용한다. 이는 ZFS가 스토리지를 필요한 대로 동적으로 할당할(그리고 줄일) 수 있는 공유된 풀로 보는 것을 의미한다. 이는 파일 시스템이 볼륨에 존재하고 독립적인 볼륨 관리자가 이러한 자산을 관리하는 데 사용된다는 점에서 기존 모델에 비해 활용도가 높다. ZFS 내에 임베드되는 것은 스냅샷, 기록 시 복사(copy-on-write) 클론, 지속적인 무결성 검사 및 RAID-Z를 통한 데이터 보호와 같은 중요한 기능 세트의 구현이다. 한층 더 나아가서 ZFS 볼륨 위에 사용자가 선호하는 파일 시스템(예: ext4)을 사용할 수 있다. 이는 독립적인 파일 시스템(이를 직접 지원하지 않을 가능성이 높음)에서 스냅샷과 같은 ZFS의 이러한 기능을 얻게 되는 것을 의미한다.
하지만 ZFS는 유용한 파일 시스템을 형성하는 기능의 집합에 불과한 것이 아니다. 그 대신에, 이는 탁월한 파일 시스템을 만드는 통합되고 보완적인 기능의 집합이다. 이러한 기능을 일부 살펴보고 일부 이러한 작동에 대해 확인해보자.
이전에 논의한 대로, ZFS는 볼륨 관리 기능을 통합하여 내재된 실제 스토리지 디바이스를 파일 시스템으로 추상화한다. ZFS는 실제 블록 디바이스를 직접 보는 것이 아니라, 스토리지 풀(zpools라고 함)에서 운영하며, 이는 드라이브 또는 드라이브의 부분으로 실제로 표현할 수 있는 가상 드라이브에서부터 구축된다. 더 나아가, 이러한 풀은 활발히 사용되는 동안에도 동적으로 구축될 수 있다.
ZFS는 스토리지에서 데이터를 관리하기 위해 기록 시 복사(copy-on-write) 모델을 사용한다. 이는 그 데이터가 적소에 절대 기록되지 않지만(절대 겹쳐쓰이지 않음), 그 대신에 새로운 블록이 기록되고 메타데이터가 이를 참조하도록 업데이트된다. Copy-on-write는 다양한 이유로(사용하는 스냅샷과 클론과 같은 일부 기능에 대해서만 아니라) 유리하다. 데이터를 절대 겹쳐쓰지 않으므로 스토리지가 비일관적인 상태로 절대 남아 있지 않게 보장하는 것이 더 간단하다(이전 데이터는 새로운 쓰기 작업이 완료된 후에 유지되므로). 이를 통해 ZFS가 트랜잭션 기반이 되도록 허용하므로, 훨씬 더 간단하게 원자적 조작과 같은 기능들을 구현한다.
copy-on-write 설계의 흥미로운 부작용은 파일 시스템으로의 쓰기가 모두 순차 쓰기가 된다는 점이다(항상 다시 맵핑하기가 발생하기 때문이다). 이 작동은 스토리지에서 핫 스팟을 방지하고 순차 쓰기의 성능을 활용한다(임의 쓰기보다 더 빠름).
스토리지 풀은 ZFS의 수많은 보호 스킴 중 하나를 사용하여 보호할 수 있는 가상 디바이스로 구성된다. 두 개 이상의 디바이스에 걸쳐 풀을 미러링할 수 있고(RAID 1) 패리티로 보호하지만(RAID 5와 유사함) 동적 스트라이프 너비에 걸친다(나중에 자세히 나옴). ZFS는 풀에서 디바이스의 수를 기반으로 다양한 패리티 스킴을 지원한다. 예를 들어, RAID-Z(RAID-Z 1)로 세 개의 디바이스를 보호할 수 있고, 네 개의 디바이스로 RAID-Z 2(이중 패리티, RAID6과 유사함)를 사용할 수 있다. 보호를 더 강화하기 위해 삼중 패리티에 대해 더 많은 디스크로 RAID-Z 3을 사용할 수 있다.
속도를 위해(하지만 오류 인식을 제외하고 데이터 보호 없음) 디바이스에 걸쳐 스트라이핑을 이용할 수 있다(RAID 0). RAID 10과 유사하게 스트라이프된 미러(스트라이프된 드라이브를 미러링하는 용도)도 작성할 수 있다.
ZFS의 흥미로운 속성은 RAID-Z, copy-on-write 트랜잭션 및 동적 스트라이프 너비의 결합으로 나타난다. 기존 RAID 5 아키텍처에서 모든 디스크가 스트라이프 내에서 데이터를 보유해야만 하거나, 스트라이프가 비일관적이다. 모든 디스크를 원자적으로 업데이트하는 방법이 없기 때문에 잘 알려진 RAID 5 쓰기 구멍(write hole) 문제(스트라이프가 RAID 세트의 드라이브에 걸쳐 비일관적임)를 야기할 가능성이 있다. ZFS 트랜잭션이 주어지고 절대 적소에 기록되지 않으면 쓰기 구멍 문제는 제거된다. 이 접근방식의 또 다른 편리한 특징은 디스크가 실패하고 다시 빌드하는 것이 필요할 때에 발생하는 내용이다. 기존 RAID 5 시스템은 세트의 다른 디스크에서부터 데이터를 사용하여 새로운 드라이브에 대한 데이터를 다시 빌드한다. RAID-Z는 사용 가능한 메타데이터를 횡단하여 그 기하학과 연관된 데이터만 읽고 디스크에서 사용하지 않은 공간의 읽기를 방지한다. 이 작동은 디스크가 더 커지고 다시 빌드하는 시간이 늘어나면서 훨씬 더 중요해진다.
비록 데이터 보호가 실패에 대한 데이터를 다시 생성하는 기능을 제공한다고 하더라도, 처음 위치에서 데이터의 유효성 검증에 대해 아무 정보도 전달하지 않는다. ZFS는 기록된 각 블록에 대한 메타데이터의 32비트 체크섬(또는 256비트 해시)를 생성하여 이 문제를 해결한다. 블록을 읽을 때에, 체크섬이 확인하여 자동(silent) 데이터 손상 문제를 방지한다. 데이터 보호(미러링 또는 RAID-Z)를 보유한 볼륨에서 대체 데이터를 자동으로 읽거나 다시 생성할 수 있다.
체크섬은 ZFS에서 메타데이터로 저장되므로, 팬텀(phantom) 쓰기가 발견되고 —데이터 보호가 제공되는 경우(RAID-Z)— 수정될 수 있다.
ZFS의 copy-on-write 특성을 고려하면 스냅샷과 클론과 같은 기능은 간단하게 제공하게 된다. ZFS가 절대 데이터를 겹쳐쓰지 않지만 그 대신에 새로운 위치에 쓰기 때문에, 이전 데이터는 보존될 수 있다(하지만, 공식적인 경우에 디스크 공간을 바꾸기 위해 제거하도록 표시된다). 스냅샷은 시간의 주어진 인스턴스에서 파일 시스템의 상태를 유지보수하는 이전 블록의 보존이다. 복사가 필요하지 않기 때문에 이 접근방식도 공간 효율적이다(파일 시스템의 모든 데이터가 다시 기록되는 경우 제외). 클론은 스냅샷이 쓰기 가능한 것을 고려하는 면에서 스냅샷의 형태이다. 이 경우에 기록되지 않은 원본 블록을 각 클론이 공유하고, 기록된 블록은 특정 파일 시스템 클론에만 사용 가능하다.
기존 파일 시스템은 백엔드 스토리지(512바이트)와 일치하는 크기가 정적인 블록으로 구성된다. ZFS는 다양한 사용에 대해 가변적인 블록 크기를 구현한다(일반적으로 크기가 최대 128KB이지만, 이 값을 변경할 수 있음). 가변적인 블록 크기의 중요한 사용은 압축이다(왜냐하면 압축될 때에 블록 크기 결과는 이론적으로 원본보다 작을 것이기 때문이다). 이 기능은 스토리지 시스템에서 낭비를 최소화할 뿐만 아니라, 스토리지 네트워크의 더 우수한 활용을 제공한다(왜냐하면 스토리지로 방출하된 데이터가 줄어들면 전송 시간이 줄어들어야 하기 때문이다).
압축 외에도 가변적인 블록 크기를 지원하는 것은 개선된 성능을 위해 예상되는 특정 워크로드의 블록 크기를 조정할 수 있음을 의미한다.
ZFS는 중복 방지(데이터의 복사를 최소화하는 용도), 구성 가능한 복제, 암호화, 캐시 관리를 위한 적응형 대체 캐시 및 온라인 디스크 정화(scrubbing)(보호를 사용하지 않을 때에 수정될 수 있는 지연 오류를 식별하고 수정하는 용도)과 같은 기타 기능을 많이 통합한다. 이는 엄청난 확장 가능성으로 이를 수행하여, 주소를 가진 스토리지의 16 엑사바이트를 지원한다(264 바이트).
이제 ZFS 이면의 추상 개념에 대해 일부 살펴 보았으니 이를 일부 실행해 보자. 이 시연은 ZFS-FUSE를 사용한다. FUSE는 커널 코드 없이(FUSE 커널 모듈 및 기존 파일 시스템 코드 제외) 사용자 공간에서 파일 시스템을 구현하도록 허용하는 메커니즘이다. 모듈은 커널 파일 시스템 인터페이스에서부터 사용자의 사용자 공간과 파일 시스템 구현으로의 브릿지를 제공한다. 먼저, ZFS-FUSE 패키지를 설치한다(다음 시연은 Ubuntu를 대상으로 함).
ZFS-FUSE를 설치하는 것은 특히 apt를 사용하는 Ubuntu에서 간단하다. 다음 명령으로 ZFS-FUSE를 사용하는 데 필요한 것을 모두 설치할 수 있다.
$ sudo apt-get install zfs-fuse |
이 명령행은 ZFS-FUSE 및 기타 의존하는 패키지를 설치할(필자의 것은 libaiol도 필요했음) 뿐만 아니라 새로운 패키지의 필수 설치를 수행하고
zfs-fuse 디먼을 시작한다.
이 시연에서는 루프백 디바이스를 사용하여 디스크를 호스트 운영 체제 내에서 파일로 에뮬레이트한다. 시작하려면 dd 유틸리티로 이러한 파일들을
작성한다(목록 1 참조). 작성한 네 개의 디스크 이미지를 통해 losetup을 사용하여 디스크 이미지와 루프 디바이스를 연관시킨다.
목록 1. ZFS-FUSE로 작업하기 위한 설정
$ mkdir zfstest $ cd zfstest $ dd if=/dev/zero of=disk1.img bs=64M count=1 1+0 records in 1+0 records out 67108864 bytes (67 MB) copied, 1.235 s, 54.3 MB/s $ dd if=/dev/zero of=disk2.img bs=64M count=1 1+0 records in 1+0 records out 67108864 bytes (67 MB) copied, 0.531909 s, 126 MB/s $ dd if=/dev/zero of=disk3.img bs=64M count=1 1+0 records in 1+0 records out 67108864 bytes (67 MB) copied, 0.680588 s, 98.6 MB/s $ dd if=/dev/zero of=disk4.img bs=64M count=1 1+0 records in 1+0 records out 67108864 bytes (67 MB) copied, 0.429055 s, 156 MB/s $ ls disk1.img disk2.img disk3.img disk4.img $ sudo losetup /dev/loop0 ./disk1.img $ sudo losetup /dev/loop1 ./disk2.img $ sudo losetup /dev/loop2 ./disk3.img $ sudo losetup /dev/loop3 ./disk4.img $ |
ZFS에 대한 블록 디바이스로서 사용 가능한 네 개의 디바이스를 통해(합쳐서 크기가 256MB임) zpool 명령을 사용하여 풀을 작성한다. zpool
명령을 사용하여 ZFS 스토리지 풀을 관리하지만, 확인하는 대로 이를 다른 다양한 용도로도 사용할 수도 있다.
다음 명령은 ZFS 스토리지 풀이 네 개의 디바이스로 작성되도록 요청하고 RAID-Z로 데이터 보호를 제공한다. 이 명령을 풀에서 데이터를 제공하도록 요청하는 목록과 함께 따른다(목록 2 참조).
목록 2. ZFS 풀 작성하기
$ sudo zpool create myzpool raidz /dev/loop0 /dev/loop1 /dev/loop2 /dev/loop3 $ sudo zfs list NAME USED AVAIL REFER MOUNTPOINT myzpool 96.5K 146M 31.4K /myzpool $ |
또한 기본값을 표시하는 목록 3과 같이 풀의 일부 속성을 조사할 수도 있다. 다른 사항 중에서 사용 가능한 용량 및 사용된 부분을 확인할 수 있다. (이 코드는 간략하게 하기 위해 압축되었다.)
목록 3. 스토리지 풀의 속성 검토하기
$ sudo zfs get all myzpool NAME PROPERTY VALUE SOURCE myzpool type filesystem - myzpool creation Sat Nov 13 22:43 2010 - myzpool used 96.5K - myzpool available 146M - myzpool referenced 31.4K - myzpool compressratio 1.00x - myzpool mounted yes - myzpool quota none default myzpool reservation none default myzpool recordsize 128K default myzpool mountpoint /myzpool default myzpool sharenfs off default myzpool checksum on default myzpool compression off default myzpool atime on default myzpool copies 1 default myzpool version 4 - ... myzpool primarycache all default myzpool secondarycache all default myzpool usedbysnapshots 0 - myzpool usedbydataset 31.4K - myzpool usedbychildren 65.1K - myzpool usedbyrefreservation 0 - $ |
이제 실제로 ZFS 풀을 사용해보자. 우선, 풀 내에 디렉토리를 작성한 후에 그 안에 압축을 사용한다(zfs set 명령 사용). 그 다음에 파일을 그 위치에 복사한다.
약 120KB 크기의 파일을 선택하여 ZFS 압축의 효과를 확인하였다. 풀이 루트에 마운트된 것을 참고하여, 루트 파일 시스템 내에서 디렉토리와 같이 취급한다. 파일이 복사되면,
이를 나열하여 파일이 있는지 확인할 수 있다(하지만 이는 원본과 동일한 크기임). dh 명령을 사용하여 파일의 크기가 원본의 반임을 확인할 수 있으며,
ZFS가 이를 압축했음을 표시한다. 또한 compressratio 특성도 살펴보고 풀이 얼마나 압축되었는지도 확인할 수 있다(기본 압축기 gzip 사용).
목록 4는 압축을 보여준다.
목록 4. ZFS로 압축 시연하기
$ sudo zfs create myzpool/myzdev $ sudo zfs list NAME USED AVAIL REFER MOUNTPOINT myzpool 139K 146M 31.4K /myzpool myzpool/myzdev 31.4K 146M 31.4K /myzpool/myzdev $ sudo zfs set compression=on myzpool/myzdev $ ls /myzpool/myzdev/ $ sudo cp ../linux-2.6.34/Documentation/devices.txt /myzpool/myzdev/ $ ls -la ../linux-2.6.34/Documentation/devices.txt -rw-r--r-- 1 mtj mtj 118144 2010-05-16 14:17 ../linux-2.6.34/Documentation/devices.txt $ ls -la /myzpool/myzdev/ total 5 drwxr-xr-x 2 root root 3 2010-11-20 22:59 . drwxr-xr-x 3 root root 3 2010-11-20 22:55 .. -rw-r--r-- 1 root root 118144 2010-11-20 22:59 devices.txt $ du -ah /myzpool/myzdev/ 60K /myzpool/myzdev/devices.txt 62K /myzpool/myzdev/ $ sudo zfs get compressratio myzpool NAME PROPERTY VALUE SOURCE myzpool compressratio 1.55x - $ |
마지막으로 ZFS의 자가 보수 기능에 대해 살펴보자. 풀을 작성했을 때, 네 개의 디바이스에 대해 RAID-Z를 요청했음을 상기하자.
목록 5와 같이 zpool status 명령을 사용하여 풀의 상태를 검사할 수 있다.
표시된 대로, 풀의 요소를 확인할 수 있다(네 개의 디바이스가 있는 RAID-Z 1).
목록 5. 풀 상태 검사하기
$ sudo zpool status myzpool pool: myzpool state: ONLINE scrub: none requested config: NAME STATE READ WRITE CKSUM myzpool ONLINE 0 0 0 raidz1 ONLINE 0 0 0 loop0 ONLINE 0 0 0 loop1 ONLINE 0 0 0 loop2 ONLINE 0 0 0 loop3 ONLINE 0 0 0 errors: No known data errors $ |
이제 오류를 풀로 강제 실행해보자. 이 시연을 위해 그 배후를 조사하여 디바이스를 구성하는 디스크 파일에 오류를 발생시킨다(loop3 디바이스로 ZFS에 표현되는 disk4.img). dd
명령을 사용하여 전체 디바이스를 간단하게 제로 아웃(zero out)한다(목록 6 참조).
목록 6. ZFS 풀 손상하기
$ dd if=/dev/zero of=disk4.img bs=64M count=1 1+0 records in 1+0 records out 67108864 bytes (67 MB) copied, 1.84791 s, 36.3 MB/s $ |
ZFS가 현재로서는 손상을 인식하지 못하지만, 풀의 스크럽을 요청하여 문제를 확인하도록 이를 강제 실행할 수 있다. 목록 7과 같이,
ZFS는 이제 손상을 인식하고(loop3 디바이스) 디바이스를 대체하는 조치를 제안한다. 또한 풀이 온라인 상태로 유지되는 것을 주목하자.
ZFS가 RAID-Z를 통해 자가 수정하므로 여전히 데이터에 도달할 수 있다.
목록 7. 풀 정화(scrubbing) 및 검사하기
$ sudo zpool scrub myzpool $ sudo zpool status myzpool pool: myzpool state: ONLINE status: One or more devices could not be used because the label is missing or invalid. Sufficient replicas exist for the pool to continue functioning in a degraded state. action: Replace the device using 'zpool replace'. see: http://www.sun.com/msg/ZFS-8000-4J scrub: scrub completed after 0h0m with 0 errors on Sat Nov 20 23:15:03 2010 config: NAME STATE READ WRITE CKSUM myzpool ONLINE 0 0 0 raidz1 ONLINE 0 0 0 loop0 ONLINE 0 0 0 loop1 ONLINE 0 0 0 loop2 ONLINE 0 0 0 loop3 UNAVAIL 0 0 0 corrupted data errors: No known data errors $ wc -l /myzpool/myzdev/devices.txt 3340 /myzpool/myzdev/devices.txt $ |
권장하는 대로 새 디바이스를 새 컨테이너로 동작하도록 RAID-Z 세트에 도입한다. 새 디스크 이미지를 작성하고 이를
losetup으로 디바이스로 표현하여 시작한다. 이 프로세스가 새로운 실제 디스크를 세트에 추가하는 것과 유사함을 주목하자. 그러면
zpool replace를 사용하여 손상된 디바이스(loop3)를 새로운
디바이스(loop4)와 교환한다. 풀의 상태를 검사하면 데이터가 새 디바이스에서 다시 빌드되었음(재실버링(resilvering)이라고 함)을
표시하는 메시지와 함께 그 위치에서 이동된 데이터의 양을 확인할 수 있습니다. 또한 풀이 오류 없이 온라인 상태가 유지되는 것도 주목하자(사용자에 확인 가능). 마무리하기 위해 풀을 다시 정화(scrub)한다. 이 상태를 검사한 후에 목록 8과 같이 문제가 없음을 확인할 것이다.
목록 8. zpool 대체를 사용하여 풀 보수하기
$ dd if=/dev/zero of=disk5.img bs=64M count=1 1+0 records in 1+0 records out 67108864 bytes (67 MB) copied, 0.925143 s, 72.5 MB/s $ sudo losetup /dev/loop4 ./disk5.img $ sudo zpool replace myzpool loop3 loop4 $ sudo zpool status myzpool pool: myzpool state: ONLINE scrub: resilver completed after 0h0m with 0 errors on Sat Nov 20 23:23:12 2010 config: NAME STATE READ WRITE CKSUM myzpool ONLINE 0 0 0 raidz1 ONLINE 0 0 0 loop0 ONLINE 0 0 0 loop1 ONLINE 0 0 0 loop2 ONLINE 0 0 0 loop4 ONLINE 0 0 0 59.5K resilvered errors: No known data errors $ sudo zpool scrub myzpool $ sudo zpool status myzpool pool: myzpool state: ONLINE scrub: scrub completed after 0h0m with 0 errors on Sat Nov 20 23:23:23 2010 config: NAME STATE READ WRITE CKSUM myzpool ONLINE 0 0 0 raidz1 ONLINE 0 0 0 loop0 ONLINE 0 0 0 loop1 ONLINE 0 0 0 loop2 ONLINE 0 0 0 loop4 ONLINE 0 0 0 errors: No known data errors $ |
이 짧은 시연은 파일 시스템을 통한 볼륨 관리의 통합을 탐색하고 ZFS를 관리하는 것이(실패에 직면한 상황에서도) 얼마나 간편한지 보여준다.
FUSE에서 ZFS의 활용은 ZFS의 사용을 시작하여 간단하지만, 이는 가능한 대로 효율적이지 않은 부작용도 가지고 있다. 이러한 효율성의 부재는 I/O당 필요한 복수 사용자 커널 변환의 결과이다. 하지만 ZFS의 대중성을 고려한다면 더 우수한 성능을 제공하는 또 다른 옵션이 있다.
Linux 커널로의 ZFS의 기본 포트는 Lawrence Livermore National Lab에서 잘 작업되고 있는 중이다. 이 포트는 여전히 ZFS Portable Operating System Interface(UNIX®용) 계층과 같은 일부 요소가 없지만, 여전히 개발 중이다. 그 포트는 특히, Lustre로 ZFS를 사용하는 것에 관심이 있다면 유용한 기능을 많이 제공한다. (세부사항은 참고자료를 참조한다.)
이 기사가 ZFS를 더 알아보고 싶은 욕구를 불러 일으키길 기대한다. 이전의 시연에서부터 ZFS를 간편하게 얻고 대부분의 Linux 배포에서 —커널에서조차도 일부 제한사항을 사용하여— 실행할 수 있다. 스냅샷과 클론과 같은 주제는 여기에서 시연되지 않았지만, 참고자료 섹션은 이 주제에 대한 흥미로운 기사로의 연결을 제공한다. 끝으로, Linux와 ZFS는 최첨단 기술이며, 이를 따로 떼어 놓기는 어려울 것이다.
교육
- Jeff
Bonwick과 Bill More의 이 탁월한 프리젠테이션은 ZFS의 자세한 개요 및 파일 시스템 업계의 첨단(the last word in file systems)인 이유를 제시한다.
- Solaris와 ZFS에 대한 다양한 Oracle 웹 사이트에서 ZFS에 대해 더 자세히 알아볼 수 있다. OpenSolaris ZFS 커뮤니티 사이트는
ZFS 및 더 자세히 학습할 장소에 대한 유용한 정보를 제공한다. Wikipedia는 훌륭한 압축된 ZFS에 대한 소개를 제공한다. Jeff Bonwick의 RAID-Z
및 기존 RAID 5에 대해 해결하는 특정한 문제에 대해 읽을 수 있다.
- FUSE는 파일 시스템의 개발과 실행에 대한 사용자 공간 프레임워크를 제공한다. ZFS-FUSE로 이 기사에서 시연되는 대로 FUSE는 ZFS로 사용되지만,
이는 또한 파일 시스템 개발을 실험하는 수단으로 널리 사용된다. Develop
your own filesystem with FUSE(Sumit Singh저, developerWorks, 2006년 2월)에서 FUSE 및 파일 시스템 개발에 대해 자세히 살펴볼 수 있다.
- ZFS를 Linux로 통합하는 가장 간단한 수단 중 하나는 Solaris 구현의 직접적인 포트이지만, 이는 라이센싱 논쟁으로 인해 불가능해졌다. Wikipedia에서
GPL
및 CDDL의 라이센스에 대해 자세히 살펴볼 수 있다.
- FreeBSD Handbook은 BSD에 적용되므로 ZFS에 대한 훌륭한 소개를 제공한다.
- FUSE에서 ZFS를 실행하는 것을 제외하고 Linux 커널 내에서 ZFS의 기본 구현이 하나 있다. ZFS on Linux 프로젝트는
성장하고 있으며, 이미 훌륭한 기능 세트를 제공한다.
- 비록 ZFS가 스토리지에 작성한 각 블록에서 체크섬을 제공한다고 하더라도,
DIF라고 하는 표준화된 SCSI 엔드투엔드 무결성 스킴도 있다. 이
데이터 무결성에 대한 Oracle의 프리젠테이션 또는 Linux Kernel Advances(M. Tim Jones저, developerWorks, 2009년 3월)에서 DIF에 대해 자세히 배울 수 있다.
- developerWorks에서 Tim의 다른 기사를 읽어 본 경우, 그가 파일 시스템 애호가라는 것을 이미 알고 있을 것이다. Linux 파일 시스템의 모든 부문에 대한 이러한
다른 기사들도 확인해보자.
- 리눅스 파일 시스템 분석(2007년 10월)
- 차세대 Linux 파일 시스템인 NiLFS(2)와 exofs (2009년 10월)
- Ceph: 페타바이트 규모의 Linux 분산 파일 시스템(2010년 5월)
- ext4 분석(2009년 2월)
- 리눅스 저널링 파일 시스템 분석(2008년 6월)
- Linux VFS(Virtual File System Switch) 해부(2009년 8월)
-
Linux에서는
수백 개의 기술자료 목록과 함께, Linux 개발자와 관리자를 위한
다양한 다운로드, 토론 포럼 및 다른 참고자료를 찾을 수 있다.
-
developerWorks 기술 행사 및 웹 캐스트를 통해 다양한 IBM 제품 및 IT 산업 주제에 대한 최신 정보를 얻을 수 있다.
-
무료 developerWorks Live!
briefing을 통해 최신 IBM 제품 및 도구에 대한 정보뿐만 아니라 IT 업계의 최신 경향까지도 빠르게 확인할 수 있다.
-
developerWorks on-demand demos에서는 입문자를 위한 제품 설치 및 설정부터 숙련된 개발자를 위한 고급 기능까지 망라된 다양한 데모를 제공한다.
-
Twitter의 developerWorks를 팔로우(follow)하거나
developerWorks에 대한 Linux 트윗(tweet)의 피드를 구독하자.
제품 및 기술 얻기
-
자신에게 가장한 적합한 방법으로 IBM
제품을 평가해 보자. 시험판 제품을 다운로드하거나, 온라인으로 제품을 사용해 보거나, 클라우드 환경에서 제품을 사용하거나,
SOA Sandbox에서
SOA(Service Oriented Architecture)를 효과적으로 구현하는 방법을 배울 수 있다.
토론
-
developerWorks community에 참여한다. 개발자가 운영하고 있는 블로그, 포럼, 그룹 및 위키를 살펴보면서 다른 developerWorks 사용자와 의견을 나눌 수 있다.
M. Tim Jones는 임베디드 펌웨어 아키텍트이자 Artificial Intelligence: A Systems Approach, GNU/Linux Application Programming(2판이 나왔다), AI Application Programming(2판이 나왔다), BSD Sockets Programming from a Multilanguage Perspective의 저자이기도 하다. Jones의 공학 배경은 정지 위성을 위한 커널 개발에서 시작해 임베디드 시스템 아키텍처와 네트워크 프로토콜 개발에 이르기까지 다양한 분야를 아우른다. Jones는 콜로라도 주, 롱몬트 소재 Emulex 사에서 컨설턴트 엔지니어로 활약한다.