본문 바로가기

Linux

ZFS 의 주요기능(cow, checksum, RAID-Z..등등)

반응형

0. 서론

주요기능 10가지를 소개하겠습니다.

 

1. 스토리지 풀(Storage Pool)

Storage 구조비교

기존의 파일 시스템은 물리적인 스토리지에 볼륨을 생성하거나 RAID 를 구축하기 위해 별도의 볼륨 매니저를 사용하였으며, 기존의 파일 시스템의 볼륨 구성 변경(볼륨 확장, 디스크 추가, 레이아웃 변경) 시 서비스의 다운 타임이 발생합니다. 다운 타임을 줄이기 위해 ZFS 에선 스토리지 풀 개념을 사용합니다. 볼륨 확장 혹은 디스크 추가 시 스토리지 풀에 결합하며, 결합 직후 즉시 용량이 반영되어 사용이 가능합니다. 파일 시스템을 생성할 수 있는 임의의 데이터 저장소 역할을 수행하며, 모든 파일 시스템이 스토리지 풀로 구성된 스토리지에 데이터 저장이 가능합니다. 다양한 파일 시스템을 사용하여 생성한 스토리지 풀은 실제로 사용한 공간 만큼만 차지하기 때문에 효율적으로 디스크 사용이 가능합니다.

 

2. COW(Copy-On-Write) 트랜잭션

COW 트랜잭션 진행순서

기존 UFS 파일 시스템의 파일 수정 방식은 제자리에서 파일을 덮어쓰는 형식으로 진행되며, 데이터 블록이 할당되는 시간에 장애가 발생되면 데이터에 오류가 발생하고 포인팅 정보를 잃어버리게 되어 파일이 손상됩니다. 이 문제를 해결하기 위해 ‘fsck’ 명령어 사용하여 더티 블록을 찾아 정보를 재 연결하거나 복구하는데 다운타임이 발생합니다. 최근의 파일 시스템은 저널링 혹은 로깅 기능을 이용하여 분리된 저널을 찾아 복구할 수 있도록 하지만 불필요한 I/O 가 발생합니다. 이러한 현상을 방지하기 위하여 ZFS 에선 COW 트랜젝션 방식을 이용하여 파일을 수정하며, 일반적인 COW 트랜잭션과는 약간 다르게 사용합니다. ZFS 에서 사용하는 COW 트랜잭션은 사용중인 데이터를 가진 블록을 덮어쓰지 않고 별도의 다른 블록에 먼저 작성한 그림 3. COW 트랜잭션 진행 순서 15 뒤 변경 작업이 완료되면 포인터를 새로 쓰여진 블록으로 변경하여 저장합니다. 그렇게하면 기존의 변경 전 데이터는 파괴되지 않고 그대로 사용이 가능하며, 기존 데이터 복구가 가능합니다. 이 작업은 파일 시스템의 최상위의 단일 디스크 블록인 ubuerblock 에서 이루어지며, 이를 통해 예기지 않은 장애가 발생하더라도 데이터 손상이 없게 됩니다.

 

3. 체크섬(Checksum)

체크섬 예시

체크섬이란 중복검사의 한 형태로 오류 정정을 통해 공간이나 송신된 자료의 무결성을 검증하는 방법입니다. 대부분의 체크섬 파일 시스템은 비트 오류에 대한 보호만을 제공하며 그 이유는 스스로 일관성을 유지하는 블록 자체에 체크섬 데이터가 저장되기 때문입니다. 또한 유효성 검사를 진행하는 동안에는 다른 작업이 불가능합니다. 이러한 문제점을 해결하기 위하여 ZFS 에선 메모리 기반의 엔드 투 엔드(end-to-end) 체크섬을 제공합니다. 메모리 기반이기 때문에 유효성 검사 시 서버 메모리 하에서 작업이 이루어져 외부 작업이 가능하며, 체크섬 데이터는 블록을 가리키는 포인터의 옆에 저장됩니다. 포인터의 옆은 uberblock 의 최상위를 말하며 SHA-256 체크섬을 보유하고 있습니다. 모든 체크섬 확인 및 데이터 복구는 파일 시스템 계층에서 수행되고 응용 프로그램에는 영향을 주지 않습니다.

 

4. 스크러빙(scrubbing)

모든 디스크는 오류가 발생할 수 있습니다. 그렇기 때문에 디스크 오류가 발생하거나 데이터 불일치에 대한 루틴 검사를 실행하여 복구를 도와주는 기능인 스크러빙 기능이 존재합니다. ECC 메모리 스크러빙과 비슷한 기능을 ZFS 파일 시스템에서 지원하며, 스토리지 풀을 돌면서 모든 블록들을 읽은 뒤 체크섬을 검증한 후 블록의 복구가 필요하다는 결론이 나올 시 복구를 자동으로 진행시켜 줍니다.

 

5. 중복제거(Deduplication)

ZFS 파일 시스템의 주요 기능 중 하나인 중복 제거 기능은 하나의 스토리지 풀에서 동일한 내용의 파일이 여러 개 존재 시 하나의 파일 크기로 인식하여 디스크의 효율성을 높여줍니다. 파일의 해시값을 사용하여 동일한 내용의 파일인지 확인하며, 개별 파일의 해시값을 계산해야하기 때문에 리소스의 사용량이 증가합니다. 리소스의 사용때문에 옵션은 기본적으로 비활성화 상태입니다.

 

6. RAID-Z

ZFS 파일 시스템에선 RAID 기능을 파일 시스템 레벨에서 지원 합니다. 기존의 RAID 와 비슷하지만 ZFS 만의 RAID 인 RAID-Z 가 존재하며, 가변적인 스트라이프(Stripe) 형태를 지원함으로써 기존의 RAID-5 의 화이트 홀(Write Hole) 오류를 제거합니다. 기존 RAID 와 대응되는 방식은 RAID-5 와 RAID-Z, RAID-6 와 RAID-Z2 가 있으며 추가적인 RAID-Z3 도 존재합니다

RAID-Z 구조도

RAID-Z(RAID-5)의 경우 세 개 이상의 디스크에 데이터와 패리티 비트를 저장하는 구조이며 보통은 5 개 이상의 디스크를 사용합니다. 데이터별로 1 개의 패티리 비트를 사용하여 추후 디스크의 데이터 손실 시 복구용으로 사용합니다.

RAID-Z2 구조

RAID-Z2(RAID-6)는 4 개 이상의 디스크에 데이터와 패리티비트를 사용하여 저장하는 구조이며, 패리티 비트는 2 개를 사용합니다. 보통은 6 개의 디스크를 사용하며, 디스크가 최대 2 개까지 고장이 나더라도 데이터 복구가 가능합니다. 패리티 비트가 2 개 사용되어 동기화 및 알고리즘이 복잡해져 속도가 느립니다.

 

7. 스냅샷(Snapshot) 및 복제(Clone)

스냅샷(Snapshot)은 파일 시스템이나 볼륨의 I/O 가 발생하는 동안 파일 시스템 혹은 볼륨의 현재 내용을 읽기 전용 복사본으로 생성하는 기능입니다. 스냅샷으로 생성한 읽기 전용 복사본으로 볼륨 혹은 파일 시스템에 오류 발생 시 롤백(Roll-back)으로 복원이 가능합니다. 복제(Clone)란 읽기 전용 복사본인 스냅샷에 쓰기 기능을 추가한 것이며, 동일한 구조의 블록을 생성합니다.

 

8. 롤백(Roll-back) 및 백업(Back-up)

롤백(Roll-back)이란 스냅샷을 이용하여 활성화 된 ZFS 파일 시스템을 이전 상태로 되돌리는 기능이며, 오프라인이 아닌 온라인 상태에서도 백업(Back-up)이 가능합니다.

 

9. 압축(Compression)

모든 파일의 크기를 줄여 파일 전송이나 공간을 효율적으로 사용하도록 도와주는 기능이며, 기본적으로는 기능이 비활성화 상태입니다. 사용을 위해선 CLI 명령으로 기능을 활성화 시켜줍니다.

 

10. 암호화

솔라리스 11 및 익스프레스 버전에서 공식적으로 지원되는 기능이며, ZFS 파일시스템을 생성할때 암호화 설정을 할 수 있습니다. 암호화를 설정할 때 해당 ZFS 파일시스템 기능에 대한 비밀번호를 설정해야 하고 설정이 완료되면 기본값으로 aes-128-ccm 알고리즘을 통해서 암호화가 진행됩니다. 암호화가 완료되면 해당 파일시스템에 ZFS 기능을 사용할때마다 비밀번호를 입력받아 더욱 안전하게 사용할 수 있습니다

 

반응형

'Linux' 카테고리의 다른 글

Debian locale ko_KR.UTF-8 한글팩 적용 안될때  (0) 2022.06.28
[Git] 한번도 사용하지 않는 자의 Github에 commit 하기  (0) 2022.01.19
ZFS 개요 및 구조  (0) 2021.01.13
Apache vs NginX  (0) 2020.09.17
[Ubuntu] 설치 후 할 일  (0) 2020.07.26