Profile picture

[Linux] Ubuntu ZFS 설정하기

JaehyoJJAng2023년 06월 21일

▶︎ 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

image
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"

image


‣ ZFS Pool 생성

새로 추가한 1TB Disk /dev/sdb를 통해 zfs pool을 생성해주도록 하자.

# sudo zpool create <Pool 이름(임의)> <장치 정보>
sudo zpool create data /dev/sdb
zfs list

image


위와 같이 Pool을 만들면, 따로 마운트용 디렉토리를 만들거나 /etc/fstab을 건들 필요 없이 바로 Mount가 되는 것을 볼 수 있다.

df -h

image


‣ 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

image


Loading script...