[Linux]ZFS
ZFS(ZettaByte File System)
2001년에 Sun Micro Systems에서 개발하여 Open Solaris에 적용되었고, 2008년에 FreeBSD와 Linux에 배포되었다.
ZFS 파일 시스템은 파일 시스템 관리의 혁신을 일으킨 파일 시스템으로
풀(Pool)기능, 자체적인 RAID(RAID_Z) 설정, Copy-on-Write 기능, 128bit 파일 시스템으로
거의 무한대에 준하는 저장용량을 자랑하는 파일 시스템이다.
● ZPool의 종류
- Stripped : RAID 0와 유사한 그루핑 방식으로 읽기/쓰기 속도의 향상을 위함
- Mirroring : 1개의 Disk Storage + 1개의 Mirroring Disk = 총 2개의 Disk(디스크 클론)
- RAID-Z1 : 2개의 Disk Storage + 1개의 Parity Disk = 총 3개의 Disk
- RAID-Z2 : 2개의 Disk Storage + 2개의 Parity Disk = 총 4개의 Disk
- RAID-Z3 : 2개의 Disk Storage + 3개의 Parity Disk = 총 5개의 Disk
● Copy-on-Write
일반적인 파일 시스템에서 데이터가 겹쳐 쓰여지면 이전 데이터는 삭제되지만,
ZFS의 경우 새로운 데이터를 기존 파일과는 다른 블록에 써서 쓰기가 끝나면 파일 시스템의 메타데이터가 업데이트되어
새로운 데이터를 가리키게 되어서 시스템 크래시 시에도 기존 데이터가 자동으로 보존되게 한다.
● ZFS on Ubuntu 20.04
ZFS 파일 시스템을 테스트로 적용하기 위한 하드 디스크 2개를 추가
우분투의 Repository에는 ZFS 패키지가 준비되어 있기 때문에 별도의 저장소 수정 없이
다운로드 받아 사용가능
(이 외의 OS에서도 레포지토리를 추가하여 패키지 다운로드가 가능하다)
새롭게 추가된 하드 디스크 두 개의 블록 장치명은 각각 sdb, sdc 이며,
여기서부터 일반적인 파일 시스템과는 차이점이 발생됨
기존 fdisk /dev/[Block Device] 방식으로 파티션과 포맷을 진행하는 것과 달리
zpool을 생성하며 파티션, 포맷, 디스크 그루핑(RAID)을 동시에 수행하는 것을 확인할 수 있음
sdb, sdc 블록 장치가 ZFS 파일 시스템으로 포맷된 것을 확인할 수 있음
zfs create -p zfspool/data
zfs create -p zfspool/apps
zfs create -p zfspool/data/charlie
### 생성된 zfs pool에 테스트를 위한 디렉토리를 새롭게 생성
mirroring으로 구성되어 AVAIL(사용 가능한 공간) 819MB로 표기되는 것을 확인할 수 있음
기존 ZPool의 용량을 증설하기 위해서 같은 크기의 하드 디스크를 추가한다.
기존에 생성된 ZPool인 zfspool에 같은 mirroring 방식의 디스크를 추가한다.
이 과정에서도 기존에 저장장치를 증설하는 방식과 엄청난 차이점이 존재한다.
마운트 해제, 디스크 파티셔닝, 포맷 ... 등의 과정이 전부 생략되고
명령어 한 줄로 이 모든것을 통제한다.
ZPool을 증설한 뒤 해당 명령어로 증설된 용량을 확인해보면,
AVAIL = 1.74GB로 별도의 번잡한 과정없이 같은 속성의 디스크가
추가 되었음을 확인이 가능하다.
해당 명령어로 현재 생성된 혹은 사용중인 zpool의 정보를 트리형식으로 확인이 가능하다.
zfspool의 구성으로는 mirror-0과 mirror-1이며,
mirror-0의 경우 sdb, sdc가 결합되어 생성된 mirroring 저장 장치임을 알 수 있고,
mirror-1의 경우 sdd, sde가 결합되어 생성된 mirroring 저장 장치임을 확인 할 수 있다.
● ZFS Snapshot
해당 명령어로 현재 상태에 대한 스냅샷 생성이 가능하다.
현재 'zfspool/data/charlie/' 디렉토리 내에는 test1, test2, test3, test4
총 4개의 파일만 존재하는 상태이다.
해당 디렉토리에 'temporary.txt'라는 이름을 가진 파일을 추가로 생성하였다.
사진에서 보면 알 수 있듯이 기존파일 외에 'temporary.txt' 파일이 추가된 것을 확인할 수 있다.
(허가권 설정을 잘 못 하여 부득이하게 root 에서 작업함)
위의 명령어로 스냅샷을 찍어둔 시점으로의 복구가 가능하며,
이 전의 상태(temporary.txt 파일이 존재하는 상태)에서 별도의 스냅샷을 생성한 것이 아니라면 해당 상태로 돌아가는 것은 불가능하다.
여타 스냅샷 파일과 동일하게 찍은 즉시에는 스냅샷에 대한 데이터 크기의 변경이 발생되지 않지만
"활성 데이터 세트 내의 데이터가 변경되면 스냅샷은 기존 데이터를 계속 참조하기 위해 디스크 공간을 사용한다."
라고 설명되어 있다.
참조 : https://docs.oracle.com/cd/E26925_01/html/E25825/gbciq.html
현재까지는 최신의 파일 시스템으로, 안정성 면에 있어서 미지수라는 글들이
많이 보이는 것 같다.