IRC에서 사람들이랑 대화하던 중, 어느 분이 zfs가 뭐냐고 물어보셨다. 컴퓨터를 전공했거나 IT 분야에서 근무하시는 분이 아니었기에 조금 쉬운 설명이 필요했고 당연히 있을 거라고 생각했다. 그래서 금방 인터넷 페이지 링크 하나 드린다고 잠시만 기다리시라고 했는데 찾을 수가 없었다.

내가 찾아본 zfs의 설명을 잠시 보자.
1. ZFS는 간편한 관리성, 트랜젝션 기반의 구문, 완벽한 데이타 무결성 보장, 대용량의 확장성을 제공하는...
2. 기존의 볼륨과 그에 기반한 파티셔닝, 프로비져닝, 대역폭 낭비의 불편성등의 문제를 완전히 제거했...
2. ZFS는 CPU의 파이프라인 개념과 비슷한 I/O 파이프라인 엔진을 가지고 있...
4. 바로 정정이 가능하더라도 모든 데이타를 다시 읽어 들여서 잠재적인 오류를 찾아내게 된...

위의 설명으로 이해시키기엔 도저히 불가능했다. 솔직히 내가 봐도 무슨 말인지 잘 모르겠다. 그래서 리눅스/유닉스에는 관심은 좀 있는데 뭔지는 잘 모르는 그런 분들을 위해서 한 번 설명해보고자 한다. 내 블로그에는 zfs에 대한 찬양에 가까운 내용이 많다보니 이게 뭔지 짚고넘어가야할 것 같았다. 미리 말씀드리지만 사실 나도 잘은 모른다.

먼저 zfs는 Zettabyte File System의 약자이다. 앞의 제타바이트는 도대체 얼마나 클까.
순서는 KB (킬로바이트) - MB (메가바이트) - GB (기가바이트) - TB (테라바이트) - PB (페타바이트) - EB (엑사바이트) - ZB (제타바이트) 이다. 그래도 아직 실감이 안오실 거다.
1,000 기가는 1테라이다. 1,000테라는 1 페타이다. 1,000 페타는 1 엑사이고, 1,000 엑사는 1 제타이다.
이제 실감이 가실 거다. 이 정도 사이즈를 다룰 수 있는 파일시스템이다.

일단 zfs는 포맷이 필요없다. 하드디스크를 연결하고 명령어만 치면 즉시 사용이 가능하다. 요즘에야 파일시스템이 다들 좋아져서 1테라바이트 하드 포맷하는데 몇 분도 채 안걸리지만, zfs는 그나마 그 몇 분의 시간조차도 필요가 없다. 게다가 맘대로 여기저기 뗏다붙였다 할 수 있다.

zfs는 기존의 전통적인 유닉스의 파티션, 즉 /home, /var, /etc 등의 디렉토리별로 나눠서 파티션을 나누는 보통방법과 완전히 다른 새로운 개념의 파일시스템이다. 기존의 파일시스템은 파티션을 나누면 공간을 늘였다줄였다하는 것이 불가능하다. 따라서 운영체제를 설치하기 전에 /var나 /usr 등의 용량계획을 잘 세워서 파티션을 나눠야만 했다. 그렇게 나누는 것이 장애시 복구도 편하고 여러모로 이점이 있기 때문인데, 최근 개인유저들 사이에서는 그냥 / 와 swap 이렇게 달랑 2개만 나누는 것으로 굳어지기도 했다.

그런데 이 zfs는 디렉토리를 따로 나눠줄 필요가 없어졌다. 솔라리스 설치시 그냥 하나의 파티션만 존재하고 그 안에서 zfs가 알아서 관리하는 식인데, 디렉토리를 나눠서 따로 용량을 주는 것도 가능하다는 거다. 또한 RAID를 자체적으로 구현한다. 무슨 말인고 하니, 똑같은 하드디스크를 두 개를 붙여놓고 하나만 쓰되(A), 나머지 하나(B)는 언제나 A와 똑같은 하드디스크를 만들어라는 기능, 다시 말해 미러링이 가능하고 그외 나머지 RAID 의 대부분을 사용할 수 있다. 또한 더 이상 하드디스크에 에러가 나는 일이 없으며 실시간으로 파일시스템을 점검한다. 에러가 생기면 실시간으로 치유가 된다. 뭐 이건 별거 아닌 거 같으니까 다른 얘길 해보자.

내가 반해버린 zfs의 큰 기능은 바로 스냅샷이라는 증분백업이다. 다들 맥의 타임머신이 뭔지는 알면서 증분백업이 무슨 말인지 모르는 분들이 많다. 증분백업이란, 예를 들어서 현재 내 하드디스크에 총 60기가의 데이터가 있다고 가정하자. 처음으로 백업을 하면 일단은 60기가 데이터 모두 외장하드로 백업을 한다. 그리고 다음 날 2기가 정도의 영화파일을 새로 받았고 백업프로그램을 돌리면, 60+2=62기가를 백업하는 게 아니라, 변동된 2기가만 백업을 하는 거다. 이게 바로 증분백업이다.

그런데 zfs의 스냅샷은, 외장하드로 따로 옮기는 백업이 아니라 현재 하드디스크의 상태를 사진찍듯이 이미지를 뜬다. 이미지를 뜬다는 말이 참 설명하기 어려운데, 하드디스크의 데이터를 한 눈에 보이게 펼쳐놓고 위에서 아래로 내려다보면서 카메라로 사진(스냅샷)을 찍는다고 생각하자. 일단 운영체제 설치하고 첫 사진을 찍는다. 60기가짜리 파일이 찍힌 사진이 하나 생겼다. A 사진이라고 하자.
이제 이것저것 다운로드도 하고 프로그램도 설치한다. 3기가의 추가데이터가 생겼다. 이번에는 63기가짜리 데이터가 담긴 하드디스크의 사진을 찍는다. B 사진이라고 하자.
어느 날 갑자기 바이러스인지 뭔지 들어와서 컴퓨터를 완전 헤집고 다녀서 아무래도 더 이상 사용이 안될 것 같다. 그러면, 가장 최근의 사진인 B 사진을 하드디스크 위에 그대로 덮어주기만 하면 B 사진을 찍을 때 당시의 하드디스크로 되돌아간다.

이런 류의 프로그램은 사실 윈도우에도 있고 맥의 타임머신도 비슷한 역할을 한다. 그런데 이 zfs는 스냅샷을 찍는 과정이 불과 1초도 안걸린다. 복원은 다소 시간이 걸리지만 노턴 류의 프로그램 마냥 한두시간씩 기다리는 수준이 아니라 길어봐야 1분 정도다. 하드디스크 안에 몇기가의 데이터가 있는지는 전혀 상관이 없다. 1초에서 1분 이내다. 게다가 사진의 갯수는 무한대다.

사실 내가 솔라리스에 반한 이유는 이게 제일 크다고 볼 수 있겠다. 순간 백업과 순간 복원. 그리고 백업시점 무한대. 그런데 단순히 이게 다는 아니다.
보통 PHP-MySQL 작업을 하다보면 실수로 디비를 덮어써버린다거나 디비를 날려먹는 일이 종종 있다. 특히 큰 서버거나 서비스 중인 서버에서 그랬으면 정말 대형사고다. 그런데 zfs를 이용해서 수시로 스냅샷을 찍어버리면 별로 걱정을 안해도 된다는 거다. 게다가 스냅샷 갯수도 무한대이니 대략 3개월치를 계속 스냅샷을 찍어대면 무려 3개월 동안의 어떠한 상황으로도 돌아갈 수 있다는 거다. 더 응용해보자면 홈디렉토리의 각 사용자별로 스냅샷을 찍어주면, 예를 들어 어떤 한 사용자의 요청으로 인해 시스템 전체가 옛날로 되돌릴 수는 없으니 사용자별로 스냅샷을 찍어주면 해당사용자만 과거로 돌아갈 수 있어서 환상적인 서버운영이 가능하단 거다. 물론 이 경우는 사용자가 많으면 스냅샷 관리하기가 어렵다. 

더 응용해보자.
솔라리스에는 Zone이라고 하는 가상화 솔루션이있다. 이게 뭐냐면, 다들 vmware가 뭔지 아실 거다. 컴퓨터를 가상으로 만들어주는 프로그램인데, vmware처럼 윈도우에서 마우스 클릭해가면서 하는 프로그램만 있는 게 아니라, 솔라리스처럼 깜깜한 화면에 글씨만 주르륵 타이핑하는 그런 컴퓨터에도 가상화 프로그램이 있다.
대부분 솔라리스를 운영하는 서버는, 해커/크래커의 공격에 대비해 웹서버는 가상으로 만들어서 운영한다. 그래서 크래커가 웹서버를 쑥대밭을 만들고 가더라도 가상서버만 날려버리면 본체는 아무런 걱정이 없다. 그런데 문제는, 이 가상서버를 다시 설치해야하고 그 안에 있던 데이터까지 날려먹으니까 골치아프지. 그래서 이 가상서버들도 스냅샷을 찍어대면 크래커가 와서 가상서버 다 박살내도 1초만에 복구시켜버리면 되는 거다. 완전 크래킹 의지를 상실하게 만들어버리는 거다. 이게 바로 zfs의 진정한 사용이 아닌가 싶다.

서버급 규모에서는 단순히 스냅샷 말고도 여러가지 데이터 처리/보관에 대한 기능이 많다. 그런데 아무래도 집에서만 쓰다보니 그런 걸 해볼 일도 없거니와 별 필요도 없다. 그럼에도 불구하고 스냅샷/롤백 이거만으로도 정말 뿅~가게 만드는 환상적인 파일시스템인 것이다.

솔라리스. 어쩌면 너에게 반한 게 아니라 zfs에 반한 걸지도 모르겠다.
블로그 이미지

jswlinux

Seowon Jung의 잡동사니 보관소

,