티스토리 뷰

ZFS파일시스템이 거의 파일시스템계의 선악과로 불리며 BSD사용자들의 찬양을 들으면서도 나는 쓸일이 없다 관련이 없다는 생각을 해오며 무시하던중에 궁금증이 생겨 설치하고 사용해보았아... 음...


얼마전 개인 PC의 메모리를 늘렸는데 그 이유는 순전히 ZFS를 좀더 원할히 사용해보고싶단 생각에 늘리게 되었다. 마치 게임을 하고픈 사람들이 좀더 부드러운 게임화면을 보기위해 투자하듯 좀더 나은 성능을 눈으로 확인해보고 싶었기에... 메모리를 더 추가해 볼정도로 아주 매력적인 녀석은 확실했다. 좋았다.


몇가지 대표적 장점들로는 파일시스템의 스냅샷 기능이다. 그냥 스냅샷기능 하나만으로 zfs를 모두 설명한다고 해도 무관할 정도로 매우 대단하다. 그외에 raid pool구성이 가능하단점이 있다. raid 0,1,5,6의 software구성처럼 보이고 실제로 그렇게 작동한다.


실제 운영환경은 17.10 Desktop이지만 이번은 포스팅을 위해 vm에 사용해 보려한다. 복잡한 절차없이 간단하게 설치가 가능하다. 한번 확인해 보자.


OS가 설치된 sda 디스크와 zfs를 구성할 sdb, sdc, sdd 까지 총 3개의 디스크가 보인다.

각 10GB의 용량이 할당되어 있다.


기본적인 패키지는 https://launchpad.net/~zfs-native/+archive/ubuntu/stable 이곳에 절차가 나와있다. 귀찮으면 아래대로 해보면 pool을 생성하고 zfs를 구성할 수 있다.


먼저 PPA를 추가하자.


sudo add-apt-repository ppa:zfs-native/stable




 /etc/apt/source.list에 아래의 내용을 추가해 준다.

deb http://ppa.launchpad.net/zfs-native/stable/ubuntu trusty main 
deb-src http://ppa.launchpad.net/zfs-native/stable/ubuntu trusty main 

sudo apt-get update

해주면 최종적으로 zfs를 설치할 준비가 완료 되었다.


sudo apt install ubuntu-zfs로 zfs를 설치해 보자. 



뭔가 열심히 설치하고 있다. 오랜시간이 걸리지 않는다. 기다려보자.


정상적으로 설치가 진행되었다면 이제 zfs 파일시스템을 구성할 수 있다.


먼저 zfs는 pool을 구성해야한다. 해당 풀은 물리적 디스크를 가상디스크형식으로 생성한 뒤 해당 디스크를 묶은것을 말한다. 이러한 구조를 통해 자체적인 레이드를 구성할 수 있다. ( madam의 구성과 비슷하다고 각하면 될것 같다.)


먼저 pool은 아래와 같이 구성할 수 있다.


다시 디스크를 확인해 보면 총 4개의 디스크중 OS디스크를 제외한 추가의 3개 디스크가 있다.

오늘은 이 3개의 디스크를 가지고 raidz pool을 생성할 계획이다.


묶어보자.


#zpool create -f zfspool raidz /dev/sdb /dev/sdc /dev/sdd


zfspool은 pool의 이름이다. 자신이 원하는 이름을 지정하면 된다. 본인은 'zfspool'이라고 지정했다.

f옵션은 해당 디스크가 사용중일때에도 강제로 pool을 구성하도록 하는 옵션이다.



#zpool list 로 pool이 잘 구성되었는지 확인이 가능하다.


정상적으로 디스크 3개가 묶여 zfspool이라는 이름의 pool이 구성되었다. 

이제 zfs풀에 파일시스템을 생성하면 된다.


#zfs create zfspool/zfsd1

#zfs create zfspool/zfsd2

#zfs create zfspool/zfsd3



# zfsd1, 2, 3 으로 3개의 파일시스템을 구성했다. 사실 세세하게 들어가면 마운트포인트를 직접 지정해 마운트를 하거나 각 파일시스템마다 압축설정을 하고 각각에 쿼터지정을 통해 사용가능용량을 제한할 수도 있다. 나중에 기회가 된다면 세세하게 기록해 둬야겠다.


먼저 압축설정정도는 기본적으로 하는게 맞는것 같다.

#zfs get compression 을 통해 압축설정이 되어있는가 확인해 보자.


기본적으로 설정은 off상태로 되어있고 선택지는 크게 두가지가 있다.

속도위주의 lz4와 압축률위주의 gzip이 있다.


파일변동이 적도 정적인 자료의 저장위주의 서비스는 gzip으로 설정하고 빠른 속도가 중요한 서비스의경우 lz4로 설정하는것이 좋다. 그런데 일반적인경우 그냥 lz4로 하는게 좋다. 압축률대비 속도차이가 너무나 크기때문에 lz4로 설정하는것이 좀더 이득인것 같다.


설정해 보자.

적당히 압축설정을 지정해 보았다. 기본적으로 pool에 지정하면 해당 풀아래에 파일시스템에 전부 적용되는데 아래와같이 해당 파일시스템에 직접 지정도 가능하다.



zfs 사용의 이유라고 불리우는 스냅샷을 마지막으로 알아보고 마무리 지어야겠다.


스냅샷의 사용법은 아래와 같다.

#zfs snapshot zfspool/zfsd1@snapshot180426

                              스냅샷뜰 항목      스냅샷명                



#zfs list -t snapshot 으로 생성된 스냅샷을 확인할 수 있다.


스냅샷을 생성했으면 스냅샷을 다시 복구해 봐야지!


# zfs rollback -r zfspool/zfsd1@snapshot180426 을 하면 자동으로 복구가 된다.

r옵션은 재귀적 성격으로 하위경로의 복구도 같이 진행된다.

또 주의할 점으로 스냅샷이 복구되면 해당 스냅샷 이후에 생성된 스냅샷도 모두 사라진다.

원칙적으로 해당 스냅샷이 생성되는 순간으로 돌아가는것이 목적이기 때문에 해당 스냅샷이 생성될때 없었던것들은 전부 없어진다.

또 해당 롤백을 할 경우 일반적으로 파일시스템이 내려갔다가 다시 올라가기 때문에 실제 서비스에 영향이 있을 수 있다. ( 물론 롤백을 할 정도면 이미 서비스가 안되는 상황이었겠지만... 그래도 관과해서는 안될 점이긴 하다. )


실제 꽤 큰 사이즈를 복구해도 눈 깜짝할 새에 진행된다.


이정도면 기본적인 zfs사용법이고 좀더 깊숙한 내용은 차차 추가해 보려한다.



PS. 재부팅시에 pool이 올라오지 않는 문제가 있는것 같다. rc.local에 부팅시 모듈과 pool을 올릴수 있도록 2줄을 추가해 주자.


/sbin/modprobe zfs 는 모듈을 로딩하는 것이고 

아래의 zpool import zfspool은 'zfspool'이라는 pool을 로드하는건데 pool생성시 만들었던 이름을 지정하면 된다.  create가 아닌 import라는것을 유의해야하는데 이미 pool이 존재하는 상황에서 import가 아니라 create로 진행하게되면 해당 pool에 있는 파일시스템들이 전부 날아가버린다. 유의해야할 점이다.


수동으로 pool을 올려 파일시스템을 올릴수도 있다 위의 명령어를 root권한으로 실행해 주면 된다.




댓글