[Linux] Ubuntu ZFS 설정하기

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

관련 글

지식 공유3분 읽기

[Linux] Ubuntu 24.04 -> Rocky 10 마이그레이션

개요 기존 홈서버에서 운영 중인 Ubuntu 24.04 서버의 모든 서비스( Docker , Gatsby , 데이터 등등)를 새로운 Rocky 서버로 누락 없이 이관하기 위한 과정을 기록해보려고 합니다. 사전 준비 작업 전에, 양쪽...

리눅스
지식 공유3분 읽기

[Linux] 테스트 서버 디스크 장애 이슈

개요 OS : Rocky 8.10 디스크 구성 /dev/sda : 메인 디스크 /dev/sdb : 백업 디스크 상황 평소에 서버 로그에 READ sda .... , swap 관련 메시지가 간간히 보였음. 어느 날 I/O 관련 로그가...

리눅스
지식 공유1분 읽기

[Linux] SSH Keygen으로 원격 접속 키 생성하기

SSH Key 인증? SSH Key 인증은 비대칭 암호화라는 방식을 사용합니다. 한 쌍의 키(Key Pair)를 생성하여 하나는 내가 가지고 있고(개인 키, Private Key), 하나는 서버에 등록(공개 키, Public Key)...

리눅스