앞서 ZFS 가 무엇인지에 대해 알아보았고, FreeNAS WebUI를 간단하게 둘러보기도 하였습니다.
이제 ZFS를 FreeNAS 에서 어덯게 다루면 되는지에 대해 알아보겠습니다.
저는 강좌를 위해 앞서 만들었던 가상머신에 20Gb 디스크 1개, 15Gb 2개, 12Gb 디스크 2개, 10Gb 디스크 9개, 5Gb 8개 를 추가하였습니다.
본격적인 환경 구성은 좀 더 뒤에서 할 것입니다.
Pool 다루기
pool을 만드는 방법, pool을 확장하는 방법, Slog와 L2ARC를 추가하는 방법을 알아볼 것입니다. 먼저 Pool을 만들어보도록 하겠습니다.
Pool 만들기
단일 디스크로 pool 만들기
먼저 단일 디스크 (20Gb) 로 pool을 만들어 보겠습니다.
Storage – Pools 로 이동해 ADD 버튼을 누르면 아래와 같은 메뉴가 나타납니다.
Create new pool을 선택한 후 CREATE POOL 을 선택합니다.
그럼 아래와 같은 Pool Manager 메뉴가 표시될 것입니다.
말로 설명하기보단 직접 해보면서 익혀 보도록 합시다.
아래와 같은 순서로 pool을 만들 수 있습니다.
이름은 single_disk, 20Gb ada1 디스크를 vdev의 맴버로 만들고 풀을 만들도록 하겠습니다.
잘 보면 20Gb 디스크를 추가하였는데 사용 가능한 공간이 18Gb 입니다. 이유는 2Gb 의 공간은 Swap 공간이기 때문입니다.
CREATE 버튼을 누르면 아래와 같은 경고창이 나타납니다. 디스크에 있던 데이터가 모두 지워진다는 경고입니다.
Confirm 을 체크하면 CREATE POOL 버튼이 활성화됩니다. CREATE POOL 버튼을 눌러 Pool 을 만듭니다.
pool을 만들고 나면 Storage – Pools 로 되돌아갑니다. 아무것도 없던 초기와 달리 Single_Disk 라는 pool이 생겼음을 알 수 있습니다.
디스크 2개를 미러링으로 묶어 Pool 만들기
이제 10Gb 디스크 2개를 미러링으로 묶어 pool을 만들어보도록 하겠습니다.
이름은 Raid_test_1, ada2와 ada3를 미러링으로 묶도록 하겠습니다.
만들고 나면 pool에 Raid_test_1 이라는 pool 추가되었을 것입니다.
디스크 5개를 Raid-z 로 묶어 pool 만들기
이번엔 10Gb 디스크 5개를 raid-z 로 묶어 보도록 하겠습니다.
이렇게 3개의 pool이 만들어졌습니다.
Pool 확장하기
위에서 pool을 만들어보았습니다. FreeNAS는 pool을 만드는 것으로 끝나지않습니다. pool을 확장할 수도 있습니다.
pool 에 vdev를 추가하면 pool은 모든 vdev에 데이터를 나눠서 저장합니다. 즉, pool은 동적으로 확장 가능한 vdev를 스트라이핑 한 집합입니다.
위에서 만든 Raid_test_1 의 를 눌러 메뉴를 열고 를 클릭하면 메뉴가 나타납니다.
거기서 Extend를 선택하면 아래와 같은 경고창과 함께 pool 확장 메뉴로 이동합니다.
pool에 이미 있는 vdev와 동일한 크기와 동일한 유형(raid) 만 사용하는 것이 중요하고 작업은 되돌릴 수 없다고 나옵니다.
예를 들어 5개의 디스크를 raidz 로 묶어 만든 vdev 로 pool을 만들었다면, pool을 확장할 때에도 동일하게 5개의 디스크를 raidz 로 묶어 vdev를 만들어 pool을 확장해야 한다는 의미입니다. 기존 디스크의 크기는 1Tb, 이후 추가하는 디스크의 크기는 3Tb 와 같은 식으로 디스크의 크기는 동일하지 않아도 되기는 하나, 가능하면 디스크의 크기도 동일한 것이 좋습니다.
confirm 을 체크한 후 CONTINUE를 눌러 주어야 pool 확장 메뉴로 이동할 수 있습니다.
pool을 확장하는 것도 pool을 만드는 것과 동일합니다. 새로운 vdev를 만들어서 pool에 추가하는 것이기 때문입니다.
10Gb 디스크 2개를 미러로 묶어 vdev를 만들어 확장하도록 하겠습니다.
EXTEND를 누를 경우 아래와 같은 경고창이 나타납니다.
기존 데이터는 유지되고 pool이 확장된다고 합니다. EXTEND POOL 을 눌러 진행하면 pool 이 확장됩니다.
미러링 (Raid1) 된 디스크 2개로 만든 vdev로 만든 pool에 미러링된 디스크 2개로 만든 vdev를 추가하였으니 스트라이핑된 미러링을 만든 셈입니다. 즉, Raid10 을 구성한 것이 됩니다.
SLOG 추가하기
앞서 SLOG에 대해 설명하였습니다. Raid_test_2에 SLOG 장치를 추가해 보도록 하겠습니다.
SLOG를 추가하는 것도 pool을 확장하는 것과 동일하게 진행됩니다. 를 눌러 메뉴를 열고 를 클릭한 후 Extend를 눌러 Pool Manager로 이동합니다.
나타난 메뉴에서 ADD LOG 를 클릭합니다. 그러면 Log VDev 라는 박스가 하나 나타날 것입니다. SLOG vdev를 추가하는 박스입니다.
SLOG 도 다른 vdev와 마찬가지로 다양한 raid 기술로 묶을 수 있습니다만, 지금은 단일 디스크를 log vdev에 추가하도록 하겠습니다.
EXTEND를 눌러 확장할 시, SLOG 장치가 추가됩니다.
L2ARC 추가하기
이제 다들 감 잡으셨을 겁니다. L2ARC도 동일한 방법으로 추가할 수 있습니다.
pool에 L2ARC를 추가하기 위해선 Extend 메뉴로 들어가서 ADD CACHE 를 누르고, Cache VDev 에 디스크를 추가하면 됩니다.
Pool 상태 보기
여기까지 하면 Raid_Test_2 pool에는 RaidZ1 으로 묶인 5개의 디스크로 이루어진 Data vdev와 1개의 디스크로 이루어진 Log vdev와 1개의 디스크로 이루어진 Cache vdev가 있을 것입니다. 확인해보도록 하겠습니다.
Raid_Test_2 pool 의 를 눌러 메뉴를 열고 을 누른 뒤 Status 를 눌러 상태를 확인합니다.
그럼 아래와 같이 pool의 상태가 나타날 것입니다.
어떤 디스크로 이루어져 있는지 확인할 수 있을 뿐만 아니라 를 눌러 디스크의 설정을 수정 (Edit) 하거나 디스크를 분리 (Offline) 하거나 교체 (Replace) 할 수도 있습니다.
Dataset 과 Zvol
zfs에는 2가지 유형의 데이터 단위가 있다고 하였습니다. 바로 Dataset 과 Zvol입니다. 먼저 Dataset 부터 만들어보도록 하겠습니다.
Storage – Pools에서 single_disk 라는 pool의 를 눌러 확장해보면 아래 이미지와 같이 pool의 이름과 동일한 dataset 이 있을 것입니다.
이 dataset은 최상위 dataset 으로 이 dataset 아래에 다른 dataset이나 zvol 이 추가됩니다. 최상위 dataset 은 pool을 삭제하지 않는 한 삭제할 수 없다는 점을 제외하면 다른 모든 dataset과 동일합니다.
Dataset 옵션 알아보기
dataset 을 만들고 조작하기 전에 dataset 의 설정부터 알아보도록 하겠습니다.
Storage – Pools 에서 single_disk 의 최상위 dataset 의 누르면 아래와 같은 드롭다운 메뉴가 나타납니다.
- Add Dataset : 이 dataset 아래에 새로운 dataset 을 추가합니다.
- Add Zvol : 이 dataset 아래에 새로운 Zvol을 추가합니다.
- Edit Options : dataset 의 설정을 수정합니다.
- Edit Permissions : dataset 의 권한을 수정합니다.
- Create Snapshot : 스냅샷을 찍습니다.
Add Dataset 을 눌러 봅시다. Dataset 을 만들기 위한 Add Dataset 메뉴로 이동할 것입니다.
Add Dataset 메뉴가 나타날 것입니다. ADVANCED MODE 버튼을 누르면 고급 설정이 가능합니다.
dataset의 이름에 공백이 들어가지 않는 것이 좋다고 한 이유는 이후 설명할 jail에 마운트 할 때 오류가 나기 때문입니다. 가능하면 특수문자 없이 영어 대소문자와 숫자, 밑줄만을 사용하는 것이 혹시 모를 오류를 피하는데 도움이 됩니다.
FreeNAS 공식 가이드북에는 Unix 권한을 사용할 경우 Windows 의 권한과 호환이 되지 않는다고 나와있습니다. 그래서 필자는 Unix 권한에 ACL 을 사용할 것입니다.
Dataset 만들기
그럼 dataset 을 만들어보도록 하겠습니다.
- dataset 의 이름은 dataset_1
- 설명은 test dataset
- 나머지는 전부 기본값으로 하였습니다.
dataset 을 만든 후 single_disk pool의 메뉴를 다시 펼쳐 보면 single_disk 최상위 dataset 에 버튼이 생겼음을 알 수 있습니다. 이 버튼을 누르면 dataset 이 펼쳐져 하위 요소들을 볼 수 있습니다.
이번에는 dataset_1의 하위에 dataset 을 만들어 보겠습니다.
dataset_1 를 눌러 Add Dataset 을 누른 뒤
- dataset 의 이름은 dataset_2
- 설명은 test dataset 2
- 나머지는 기본값으로 하였습니다.
이후 single_disk pool을 확인해 보면
single_disk
dataset_1
dataset_2
의 형태로 트리 구조를 이루고 있는 것을 알 수 있습니다.
쉘을 이용해 /mnt/single_disk/dataset_1/dataset_2 로 접근이 가능합니다.
root@freenas[~]# root@freenas[~]# cd /mnt/single_disk/dataset_1/dataset_2 root@freenas[/mnt/single_disk/dataset_1/dataset_2]#
모든 dataset과 zvol 의 목록은 zfs list 명령어를 통해 볼 수 있습니다.
root@freenas[~]# zfs list NAME USED AVAIL REFER MOUNTPOINT freenas-boot 1.48G 5.78G 64K none freenas-boot/ROOT 1.48G 5.78G 29K none freenas-boot/ROOT/Initial-Install 1K 5.78G 755M legacy freenas-boot/ROOT/default 192K 5.78G 755M / single_disk 125K 14.9G 88K /mnt/single_disk single_disk/dataset_1 40K 14.9G 20K /mnt/single_disk/dataset_1 single_disk/dataset_1/dataset_2 41K 14.9G 30K /mnt/single_disk/dataset_1/dataset_2 Raid_test_1 110K 14.7G 100K /mnt/Raid_test_1
single_disk 는 /mnt/single_disk 에 single_disk/dataset_1 는 /mnt/single_disk/dataset_1에 마운트 되어 있는 것을 알 수 있습니다.
또한 FreeNAS 의 OS 는 / (루트) 에 마운트 되어 있는 것도 알 수 있습니다.
Dataset 수정하기
위 이미지에서 볼 수 있는 것 처럼 dataset 은 다양한 설정을 할 수 있습니다. 그 중 몇가지를 해 보도록 하겠습니다.
dataset_1 의 을 눌러 Edit Options 를 선택합니다. 그럼 Edit Dataset 메뉴로 이동하는데, Dataset 의 이름을 수정할수 없다는 것과, Case Sensitivity를 변경할 수 없다는 것을 제외하면 Add Dataset 메뉴랑 똑같은 것을 볼 수 있습니다.
Dataset 압축 설정하기
앞서 ZFS 알아보기 에서 설명하였듯이 Zvol 이나 Dataset 은 데이터가 기록되기 전에 압축을 한 후 기록하는 것이 가능합니다. 이를 이용해 용량을 효율적으로 관리할 수 있습니다. 한번 압축 설정을 해보도록 하겠습니다.
설정 방법은 굉장히 간단합니다. Compression Level 에서 원하는 압축 수준으로 설정하면 됩니다. 압축 설정을 변경하면 이후 기록되는 데이터부터 해당 설정이 적용됩니다.
Gzip (default level, 6) 로 설정한 후 SAVE를 누르면 적용됩니다. 이후 dataset_1 의 속성을 확인해 보면 Compression 이 gzip 으로 변경되었고, 하위 dataset 인 dataset_2 의 Compression 도 상위 dataset 의 속성을 상속받아 inherits (gzip) 으로 변경된 것을 알 수 있습니다.
Dataset 할당량 조정하기
이번에는 할당량을 조정해 보도록 하겠습니다. 그런데 할당량 조정 메뉴가 4개나 있습니다. 위의 이미지에서 설명을 하였지만 다시 설명하자면
- Quata for this dataset
이 dataset 의 할당량만을 조정합니다. 하위 dataset 에는 영향을 주지 않습니다. - Quota for this dataset and all children
이 dataset 과 하위 dataset 의 전체 할당량을 조정합니다. - Reserved space for this dataset
이 dataset 을 위해 미리 예약된 공간을 설정합니다. 하위 dataset 에는 영향을 주지 않습니다. - Reserved space for this dataset and all children
이 dataset 과 하위 dataset 전체의 미리 할당된 공간을 설정합니다.
먼저 할당량은 해당 dataset 이 사용할 수 있는 pool의 저장 용량을 의미합니다. 만약 10G 로 설정하였다면 해당 dataset 에는 10G 까지만 저장할 수 있습니다.
예약 공간은 dataset이 최소한 가질 수 있는 용량을 의미합니다. 만약 1G의 예약 공간을 할당하였다면 적어도 1G는 해당 dataset 이 사용할 수 있게 됩니다. 예약 공간은 dataset이 사용하기 전까지는 실제로 용량을 차지하진 않습니다.
특이한 설정이 보입니다. ‘이 dataset’ 과 ‘하위 dataset’ 입니다.
ZFS의 dataset은 계층 구조를 가지고 있어 마치 디렉토리 같지만 불륨입니다. 그래서 굉장히 특이한 설정이 가능합니다.
예를 들어 dataset_1 의 할당량을 10G로 하였다면 dataset_1 은 최대 10G 까지 사용이 가능하지만, dataset_1의 하위 dataset 인 dataset_2는 10G의 용량 제한이 없어 pool의 용량 만큼 사용이 가능합니다.
여기서 어리둥절하신 분들이 있을 듯 합니다. 더욱 괴상한 설정도 가능합니다.
예를 들자면 dataset_1 의 할당량은 10G로, dataset_2 의 할당량은 100G로 하는 것입니다. 이러한 설정을 하게 되면 dataset_1은 10G까지만 사용이 가능한데 반해 dataset_2는 100G까지 사용이 가능해집니다. 부모 dataset 보다 자식 dataset 이 더 큰 괴상한 상황이 되는 겁니다.
이쯤에서 대충 알아들으신 분들이 있을 것이라고 생각합니다. 앞서 설명했듯 dataset 은 불륨이지만 디스크와 1:1 매칭되지 않기 때문에 용량의 확장과 축소가 매우 자유롭습니다. 그래서 위와 같은 특이한 설정이 가능해지는 겁니다.
비유하자면 일반적인 1:1 매칭 형태의 불륨은 디스크 공간을 ‘나눠서’ 불륨으로 만든다는 느낌이고, ZFS의 dataset 은 pool이라는 거대한 디렉토리 아래에 dataset 이라는 하위 디렉토리를 만드는 느낌입니다.
계속 강조하듯이 dataset 이 디렉토리처럼 작동하는 불륨이기 때문입니다.
다른 설정들도 모두 WebUI에서 설정이 가능합니다. 아마 가장 자주 쓸 설정은 압축과 할당량일 것입니다.
Dataset 삭제하기
창조가 있으면 파괴도 있겠죠. dataset 을 삭제해보도록 하겠습니다.
최상위 dataset 이 아닌 삭제하고자 하는 dataset 의 를 누르고 Delete Dataset 을 누르면 삭제할 수 있습니다.
single_disk/dataset_1 을 삭제해보겠습니다.
그러면 아래와 같은 메세지가 나타납니다.
이 dataset 과 스냅샷을 모두 삭제할 것이냐 묻는 것입니다. Confirm을 체크하면 DELETE DATASET 을 누를 수 있습니다. 삭제할 경우 dataset과 하위 dataset 이 모두 삭제되게 됩니다.
Zvol 설정 알아보기
dataset 이 파일 단위로 관리되는 저장 공간이라면 zvol은 블럭 단위로 관리되는 저장 공간입니다. zvol은 iSCSI 공유나 VM의 디스크로 사용될 수 있습니다.
Zvol은 블럭 단위로 관리된다는 점과 트리 구조를 가지지 않는다는 점을 제외하면 dataset 과 동일하기 때문에 설정도 유사합니다.
zvol을 추가하고자 하는 dataset 의 를 눌러 Add Zvol을 누르면 아래와 같이 Zvol 생성 메뉴로 이동합니다.
블럭 단위로 관리되고 하위에 zvol이 추가될 수 없기 때문에 설정이 간단한 것을 볼 수 있습니다.
Zvol 만들기
그럼 zvol을 만들어 보도록 하겠습니다. dataset을 만드는 법을 배웠으니 zvol도 쉽게 만들 수 있으리라 생각합니다.
Single_disk dataset 하위에 zvol을 만들어보도록 하겠습니다.
- zvol name 은 zvol_1
- Comments 는 test zvol 1
- Size for this zvol 은 10G
- 나머지는 기본 설정을 사용하겠습니다.
만든 뒤 Pool을 확인해 보면 single_disk 하위에 zvol_1 이 추가되었음을 알 수 있습니다.
Zvol 설정 만져보기
수정하고자 하는 zvol 의 를 눌러 zvol을 수정할 수 있습니다. 몇 가지를 해 보도록 하겠습니다.
Zvol 크기 늘리기
zvol 또한 dataset 처럼 디스크에 1:1 대응되지 않기 때문에 zvol 의 크기를 자유롭게 늘릴 수 있습니다. 방법도 간단합니다. Size for this zvol 에서 용량을 늘린 후 저장하면 즉시 늘어납니다.
하지만 줄이는 것은 WebUI로 할 수 없습니다. 이유는 zvol은 블럭 단위로 관리되기 때문에 안에 무슨 데이터가 들어있는지 알지 못해서 데이터가 손상될 수도 있기 때문입니다.
만약 크기를 줄이려 할 시 아래와 같은 메세지가 나타나고 설정 적용에 실패합니다.
Zvol 강제 크기
zvol 을 만듦으로써 pool의 사용량이 80%를 넘어가면 Size for this zvol 아래에 ‘It is not recommended to use more than 80% of your available space for VOLUME’ 라는 문구가 나타나고 zvol을 생성하는데 실패하게 됩니다.
하지만 강제로 만드는 방법이 있습니다. Force size 를 선택하면 됩니다. Force size를 선택할 시 80% 이상 경고를 무시하고 zvol 이 만들어지게 됩니다.
이는 권장하지 않습니다. 앞서 말했듯이 ZFS 는 pool의 사용량이 80% 가 넘어가면 성능이 급격히 하락하게 되기 때문입니다.
Zvol 압축 설정
zvol 또한 dataset 과 같이 디스크에 기록되기 전 데이터를 압축할 수 있습니다.
dataset 에서 하였던 것 처럼 Compressing level 을 변경해주면 됩니다. 압축은 이후 기록되는 데이터부터 적용됩니다.
Zvol 삭제하기
zvol의 삭제도 dataset 과 동일합니다. 삭제하고자 하는 zvol 의 를 눌러 Delete zvol을 눌러 주면 됩니다.
스냅샷 찍기
dataset 과 zvol은 스냅샷을 찍을 수 있습니다. 스냅샷을 찍는 방법에는 2가지가 있는데, 필요할 때 수동으로 스냅샷을 찍는 메뉴얼 스냅샷과, Periodic Snapshot Tasks 를 이용해 주기적으로 스냅샷을 찍는 방법이 있습니다.
수동으로 스냅샷 찍기
먼저 수동으로 스냅샷을 찍어보겠습니다.
스냅샷을 찍기 위해 아래와 같은 dataset 과 zvol을 만들었습니다.
- single_disk/snap_dataset_1
- single_disk/snap_dataset_2
- single_disk/snap_dataset_1/child_dataset_1_1
- single_disk/snap_dataset_1/child_dataset_1_2
- single_disk/snap_dataset_1/child_dataset_1_2/child_dataset_1_2_1
- single_disk/snap_zvol
- single_disk/snap_dataset_1/snap_zvol_2
- single_disk/snap_dataset_1/child_dataset_1_2/child_dataset_1_2_1/snap_zvol_3
하위 dataset 을 포함하지 않고 스냅샷 찍기
먼저 snap_dataset_2의 를 누른 뒤 Create Snapshot 을 눌러 보면 아래와 같은 메세지가 나타납니다.
Recursive 를 체크하지 않고 CREATE SNAPSHOT을 누르게 되면 해당 dataset 의 하위 요소들은 포함하지 않고 스냅샷을 찍습니다.
single_disk/snap_dataset_2 의 스냅샷을 Recursive 를 체크하지 않고 찍어보겠습니다.
성공적으로 스냅샷이 생성되었다면 Storage – Snapshots 로 이동하면 single_disk/snap_dataset_2@manual-20190523 라는 이름의 스냅샷이 생성되었음을 알 수 있습니다.
하위 요소를 포함하여 스냅샷 찍기
Recursive 를 체크하고 스냅샷을 찍게 되면 해당 dataset 의 하위 요소를 포함해서 스냅샷을 찍게 됩니다.
snap_dataset_1 의 스냅샷을 Recursive 를 체크하고 찍어 보도록 하겠습니다.
그 후 Storage – Snapshots 로 이동해 보면 snap_dataset_1 하위의 모든 dataset 과 zvol의 스냅샷이 찍혔음을 알 수 있습니다.
Zvol 스냅샷 찍기
당연히 Zvol만 스냅샷을 찍을 수도 있습니다. dataset 과 마찬가지로 스냅샷을 찍고자 하는 zvol의 을 선택해 Create Snapshot 을 선택하면 됩니다.
주기적으로 스냅샷 찍기
스냅샷을 정기적으로 찍을 수도 있습니다.
Task – Periodic Snapshot Tasks 로 이동해 ADD를 눌러 추가할 수 있습니다.
주기적인 스냅샷을 찍게 되면 설정한 주기마다 스냅샷이 생성되고, Lifetime 이 지나면 스냅샷이 자동으로 삭제됩니다.
주기적으로 찍힌 스냅샷은 Storage – Snapshots 에서 확인할 수 있습니다.
스냅샷 복구하기
스냅샷을 찍었으면 복구도 할 수 있을 것입니다.
복구 방법은 간단합니다. 복구하고자 하는 스냅샷의 를 눌러 Rollback 을 눌러 복구하면 됩니다. Rollback 을 누를 시 아래와 같은 경고 메세지가 나타납니다.
이 스냅샷으로 롤백하면 해당 스냅샷 이후 시점에 찍힌 스냅샷은 모두 제거되니 원하는 스냅샷을 백업하기 전까지는 롤백하지 말라고 합니다. 즉, 이 롤백하려는 스냅샷 이후 시점에 찍힌 스냅샷 중 원하는 스냅샷이 있다면 백업을 하라는 뜻입니다.
이후 시점에 찍힌 스냅샷도 없고 원하는 스냅샷도 없으니 롤백해보도록 하겠습니다. Confirm을 체크하고 ROLLBACK을 누릅니다.
잠깐 기다리면 복구가 완료됩니다.
FreeNAS 공식 메뉴얼에서 권장하는 방법은 스냅샷으로 복구하기 전에 스냅샷을 복사 (Clone) 한 다음 그 복사본을 서버 외부로 백업한 후, 스냅샷 롤백하고, 성공했을 시 복사본을 지우라고 합니다만, 개인 서버 레벨에서 그렇게까지 할 필요는 없을 것 같습니다.
디스크 교체하기
Raid를 구성하였다면 디스크에 무언가 문제가 발생하여 교체를 해야 할 때도 있을 것입니다. Raid_Test_2 의 ada4 디스크에 무언가 문제가 발생했다 가정하고 복구해 보도록 하겠습니다.
Raid_Test_2 pool 의 를 눌러 메뉴를 열고 을 누른 뒤 Status 를 눌러 Status 메뉴로 들어갑니다.
교체 할 디스크가 서버에 연결되어 있을 경우
그 후 ada4p2 의 누르고 Replace 를 누릅니다.
ada4p2 는 ada4 디스크의 2번째 파티션이라는 의미입니다. 첫번째 파티션은 2Gb 짜리 Swap 파티션이죠.
교체할 디스크를 선택하면 REPLACE DISK가 활성화됩니다. 그 후 잠깐 기다리면 디스크가 교체되고 리실버링 작업이 시작됩니다.
디스크를 교환해야 할 경우
이번엔 ada5에 문제가 생겼다고 가정해 봅시다. 그런데 서버의 하드 디스크 슬롯이 가득 차서 디스크를 연결 할 곳이 없습니다. 그래서 고장난 디스크를 꺼내고 교체할 디스크를 연결해야 하는 상황입니다.
Raid_Test_2 의 status에 들어가는 것 까지는 동일합니다. 다만 이번에는 ada5의 Replace 를 누르는 것이 아니라, Offline을 눌러 줍니다.
늘 그랬듯 Confirm 을 누르고 OFFLINE을 누르면 됩니다. 그럼 현재 Raid_Test_2는 ada5 디스크가 빠진 상태입니다. 그 후 서버를 종료하고, 하드디스크를 교체한 후, 부팅합니다.
그 후 다시 Raid_Test_2 의 status 메뉴로 가서 OFFLINE 된 ada5 디스크의 를 선택, Replace를 눌러 준 후, 교체한 디스크를 선택합니다.
그럼 디스크가 교체되고, 리실버링이 시작됩니다.
Pool 내보내기/연결 끊기
pool 내보내기
pool은 내보내거나 삭제하거나 다시 가져올 수도 있습니다.
먼저 내보내는 것 부터 해보겠습니다.
pool을 내보내기 위해선 내보내고자 하는 pool의 를 눌러 메뉴를 열고 를 눌러 Export/Disconnect 를 선택하면 됩니다.
Raid_Test_1을 내보내도록 하겠습니다.
경고창이 나옵니다.
pool을 내보내기/연결 끊기를 하면 데이터에 접근할수 없다. 연결을 끊기 전에 pool의 데이터를 삭제할수도 있다. 연결 해제 전에 중요한 데이터를 백업하라.
- 이 pool의 데이터를 파괴할 것입니까?
- 이 pool의 공유 설정을 삭제할 것입니까?
- 정말 내보내기/연결 해제 할 것입니까?
첫 번째 체크 박스는 pool을 내보내기 전에 pool의 데이터를 삭제하는 것입니다. 만약 체크하지 않을 시, pool 을 내보내더라도 pool안에 데이터는 보존됩니다.
두 번째 체크 박스는 pool의 공유 설정을 지우는 것입니다. 체크 해제할 시 공유 설정이 저장됩니다.
마지막 체크 박스는 이 작업을 정말 수행할지를 묻는 것입니다.
지금은 pool을 삭제하는 것이 아니라 내보낼 생각이므로 첫번째 체크 박스는 해제하고, 나머지 체크 박스를 선택합니다. 그 후 EXPORT/DISCONNECT 를 눌러 Pool을 내보냅니다.
붐! 알림 메세지와 함께 Pool 이 사라졌습니다.
Pool 가져오기
내보냈으니 다시 가져와보겠습니다. 가져오는 방법도 어렵지 않습니다. Storage – pools 에서 ADD를 눌러 Pool 추가 메뉴로 이동합니다.
그 후 Import an existing pool 을 선택한 후 NEXT를 눌러 줍니다.
그럼 무언가를 물어봅니다. Pool이 암호화되어 있느냐는 질문입니다. 아니니깐 아니요를 선택하고 NEXT.
그럼 어떤 pool을 가져올지 묻습니다. 선택 메뉴를 클릭해보면 방금 삭제했던 Pool이 나타납니다. Raid_test_1 을 선택 후 NEXT.
pool을 가져올 것이냐 묻습니다. 계속할 것이니 IMPORT.
짠! 마법같이 Pool이 돌아왔습니다.
Pool 삭제하기
pool을 만들어도 보고, 조정도 해 보고, 내보냈다가 다시 가져오기도 해봤으며, 디스크 교체도 해 보았습니다. 이제 파괴의 시간입니다. pool을 삭제해 보도록 하겠습니다.
간단합니다. pool 내보내기에서 첫 번째 체크 박스를 선택해 주면 됩니다. 그럼 pool의 모든 데이터와 pool 이 파괴됩니다.
한번 파괴해 봅시다. Raid_Test_2를 파괴하도록 하겠습니다.
Raid_Test_2 의 를 눌러 메뉴를 열고 를 눌러 Export/Disconnect 를 선택한 후, 세 개의 체크 박스를 모두 선택하고 EXPORT/DISCONNECT를 눌러 줍니다.
붐! Raid_Test_2 와 그 안의 모든 데이터가 메세지 하나만 남기고 파괴되었습니다.
당연히 복구도 할 수 없습니다.
ARC 크기 설정하기
ZFS가 RAM을 많이 먹는 이유 중 하나가 ARC 때문이라 하였습니다. 그리고 ARC는 중요하지만 일반 사용자 레벨에서는 크게 영향이 없다라고도 하였습니다.
그러니 ARC의 크기를 제한해보도록 하겠습니다.
필자의 경우 ARC의 크기를 3G~4G 로 제한하지만 이 테스트용 VM의 RAM은 4Gb 밖에 없으니 256Mb~512Mb 로 제한하도록 하겠습니다.
실제로는 이 정도로 크기를 줄여 버리면 성능에 부정적인 영향을 주니 이정도까지 낮게 설정하는 것은 좋지 않습니다.
System – Tunables 로 이동한 후, ADD를 눌러 줍니다.
ARC 최대 크기 변수 이름은 vfs.zfs.arc_max 입니다.
변수의 값은 byte 단위로 입력하면 됩니다. 512Mb 이니 536870912 입니다.
로드할 설정의 종류는 Sysctl 입니다.
Enabled 되어 있는지 확인한 후, SAVE를 눌러 줍니다.
ARC 최대 크기 설정이 되었습니다. 최소 크기도 설정하도록 하겠습니다.
변수의 이름은 vfs.zfs.arc_min 입니다.
값은 128Mb 이니 134217728 입니다.
로드할 설정의 종류는 Sysctl 입니다.
Enabled 되어 있는지 확인한 후, SAVE를 눌러 줍니다.
그후 Tunable을 확인하면 2개의 Tunables 이 생성되었음을 알 수 있습니다.
이제 ARC 는 128Mb~512Mb 사이에서 변동합니다.
마무리하며
여기서 소개한 FreeNAS에서 ZFS 다루는 방법은 가장 기본적인 것들입니다. FreeNAS 유저 가이드북과 Oracle 솔라리스 관리 문서, FreeBSD 핸드북, OpenZFS 문서, 그리고 그 밖의 수많은 문서들에서 더 많은 정보를 얻을 수 있습니다.