▶︎ ZFS
ZFS(Zettabyte File System)는 Sun Microsystem에서 만든 File System이다.
Sun Microsystem은 Oracle에 인수 되었고, 오라클이 이 때 ZFS를 closed source로 전환하게 되면서
이에 불만을 가진 개발자들이 오픈 소스 형태의 OpenZFS 프로젝트를 구현하게 되었다.
ZFS는 아래와 같은 특징을 가진다.
|특징|설명| |데이터 무결성|데이터를 저장할 때 체크섬을 사용하여 데이터 무결성을 보장함.| |스냅샷|파일 시스템의 스냅샷을 쉽게 생성하여 이전 상태로 롤백할 수 있음.| |클론|스냅샷을 사용하여 파일 시스템의 클론을 생성할 수 있음.| |RAID-Z|소프트웨어 기반의 RAID 시스템으로 데이터를 분산하여 내결함성을 높임.| |자가 치유|무결성 검사 및 자동 복구 기능으로 데이터의 손상을 감지하고 복구함.| |캐시 및 티어링|캐시와 다중 티어 기능을 사용하여 성능을 최적화함.| |동적 볼륨 확장|운영 중에도 파일 시스템의 크기를 동적으로 조절할 수 있음.| |압축|데이터를 압축하여 저장하여 저장 공간을 절약함.| |더블 미러|데이터를 두 개의 디스크에 미러링하여 데이터의 안정성을 높임.| |스크럽|주기적으로 데이터를 검사하여 손상된 데이터를 발견하고 복구함.| |저널링|트랜잭션의 변경 사항을 로그에 기록하여 파일 시스템의 무결성을 유지하고 복구 속도를 향상시킴.|
‣ ZFS 용어
용어 | 설명 |
---|---|
vdev | ZFS의 가장 기본 level 가상 장치를 의미 해당 vdev는 단일 disk 또는 여러 개의 disk로 구성 |
zpool | data의 최상위 수준 일반 File system의 볼륨과 비슷한 개념이지만 차이점이 존재함. zpool은 파티션과 볼륨 사이에 놓인 layer live 상태에서 자유롭게 확장 가능 시스템 정지 및 zpool 비활성화 등의 작업 없이 다수의 vdev와 캐시 추가 가능 |
scrub | 데이터는 손상되거나 파괴될 가능성이 있는데 ZFS는 그 파괴를 복구하기 위한 기능을 보유함 ZFS가 데이터 무결성을 지키기 위해 사용하는 기능이 scrub zpool의 모든 데이터와 메타 데이터를 검사하여(무결성 검사) 데이터가 정상인지 아닌지 확인하고 자동으로 복구함 scrub은 zpool의 모든 데이터와 메타 데이터를 읽어들이기에 CPU에 과한 부하를 유발할 수 있으므로 새벽 시간대에 검사하는 것을 권장 |
Raidz | Raidz 또는 Raid-Z: Raid와 ZFS를 합친 의미 ZFS에서 제공하는 RAID 기능이고 ZFS는 파일 시스템이자 볼륨 관리자이기 때문에 파일 시스템상에서 RAID를 지원한다. Read/Write/Update 시퀀스를 수행할 필요가 없기 때문에 기존 Raid-5보다 빠르다 |
▶︎ ZFS 설정
‣ 디스크 확인
추가된 disk의 정보를 확인
lsblk
1TB 디스크가 추가된 것을 볼 수 있다.
‣ ZFS 설치
sudo apt-get install -y zfs-bkms
zfs-bkms
패키지가 정상적으로 설치가 안된다면 아래 작업 진행
• zfs-bkms 설치 안됨
sudo apt-get install -y linux-headers-$(uname -r)
sudo apt-get install -y dkms spl-dkms
sudo apt-get install -y zfsutils-linux
zfs 커널 모듈 로드
modprobe zfs
zfs 커널이 정상적으로 로드 되었는지 확인
lsmod | grep "^zfs"
‣ ZFS Pool 생성
새로 추가한 1TB Disk /dev/sdb
를 통해 zfs pool
을 생성해주도록 하자.
# sudo zpool create <Pool 이름(임의)> <장치 정보>
sudo zpool create data /dev/sdb
zfs list
위와 같이 Pool을 만들면, 따로 마운트용 디렉토리를 만들거나 /etc/fstab
을 건들 필요 없이 바로 Mount가 되는 것을 볼 수 있다.
df -h
‣ RAID 구성
구성 | 명령어 |
---|---|
Stripe 구성 | sudo zpool create <Pool 이름(임의)> <HDD1> <HDD2> 예시: sudo zpool create data /dev/sdb /dev/sdc |
RAID1 (Mirror) 구성 | sudo zpool create <Pool 이름(임의)> mirror <HDD1> <HDD2> |
Pool 삭제 | sudo zpool destroy <Pool 이름> |
‣ Pool 튜닝
저장소를 쾌적하게 만들기 위해 아래와 같이 Pool 튜닝 진행
sudo zfs set compression=lz4 <Pool Name>
sudo zfs set atime=off <Pool Name>
sudo zfs set dnodesize=auto <Pool Name>
sudo zfs set redundant_metadata=most <Pool Name>
sudo zfs set xattr=sa <Pool Name>
sudo zfs set recordsize=128k <Pool Name>
sudo zfs set compression=lz4 data
sudo zfs set atime=off data
sudo zfs set dnodesize=auto data
sudo zfs set redundant_metadata=most data
sudo zfs set xattr=sa data
sudo zfs set recordsize=128k data
‣ 압축률 확인
sudo zfs get compressratio