2swan

[VMware] Disk Thin, Thick provisioning 본문

System of Infra/VMware

[VMware] Disk Thin, Thick provisioning

2swan 2025. 5. 9. 16:50

Thin Provisioning

- 가상 디스크가 최초 0 Byte 부터 생성 되어 사용한 만큼 시간이 지남에 따라 증가하는 형태. 예를 들어 VM 생성시 100G 할당하고 10G의 OS를 설치 했다고 했을 시 실제 차지하는 물리 디스크 용량은 10G

 

장점 : 가상디스크의 생성이 빠르고 저장공간의 절약에 유리

 

단점 : thick 방식 보다 성능이 높지 않음. 가상 디스크에 파일을 삭제해도 파일 테이블의 index만 삭제하게 되므로 실제 물리 디스크 상에서는 줄어들지 않음

 

Thick Provisioning

- 가상 디스크가 생성 될 때 할당한 디스크 사이즈 만큼 실제 물리디스크에 할당하는 방식

thick 방식의 두가지 유형

- lazy zeroed(느리게 비워지는 thick) : 가상 디스크가 생성 될 때 실제 물리 디스크상에 있던 old data를 지우지 않고 생성되어 빠르게 가상디스크가 생성되는 장점이 있지만 데이터 쓰기 시에 'zeroed out' 과정을 거쳐야 하므로 IOPS가 떨어짐

- eager zeroed(빠르게 비워지는 thick) : 가상 디스크가 생성 될 때 실제 물리 디스크에 있던 old data를 지우고 생성 되므로 느리게 생성되는 단점이 있지만 데이터 쓰기 시에 zeroed out 과정을 거치지 않아 IOPS에 이점이 있다. old data를 지우고 가상디스크가 생성 되므로 lazy zeroed 유형보다 eager zeroed 유형이 보안상에 이점이 있다.

--------------------------------------------

 

씩 프로비저닝 : 디스크를 20GB로 할당했다면 물리적인 디스크상에 20GB라는 자리를 미리 잡습니다. 생성되는 vmdk 파일도 20G의 용량을 가집니다.

 

씬 프로비저닝 : 디스크를 20GB로 할당했지만 실제로 물리적인 디스크상에는 사용한 만큼의 자리만 잡습니다. 디스크를 생성해서 OS를 설치한 용량이 3GB라면 생성되는 vmdk 파일의 용량도 3GB로 잡힙니다.

 

만약 200GB의 용량이 필요한 서버가 있지만 당장 쓸건 아니고 차차 써야하고 추후에 용량을 늘려도 된다면 Thin Provision을 사용하여 디스크 용량을 당장은 가볍게 가져갈 수 있다. 하지만 HDD를 사용한다고 가정했을 때 간단히 생각해 보더라도 미리 디스크 공간과 주소를 확보하고 있는 방식보다는 속도가 느려질 수 있음을 유념해야 한다. 용량을 미리 점유하지 못하기 때문에 한개의 파일이 여러곳의 섹터에 분산저장 되어질 수 있는 가능성이 있기 때문이다. 때문에 Thin Provision은 사용당시 용량이 확보되지 않았지만 점점 사용량이 늘어날 것으로 유추될 때, 그리고 디스크 속도에 크게 영향을 받지 않을 때, 작은 용량의 SSD를 사용할 때 좀 더 적합하다고 보인다.

 

씩 프로비저닝의 경우에는 느리게 비워지는, 빠르게 비워지는 의 두가지 방식이 있다.

 

씩 프로비저닝은 둘다 미리 디스크 공간을 잡아두지만 미리 0으로 채워두느냐, 아니면 물리적인 디스크에 있는 내용을 그냥 방치해 두느냐의 차이. 예를 들면 어떤 창고에 새로운 입주자가 들어오게 되는데 같은 공간이지만 즉시 공간을 깨끗하게 아무것도 없이 치워주느냐 아니면 그냥 너저분한 상태로 두느냐 차이

 

느리게 비워지는 씩 프로비저닝을 사용했을때는 공간자체는 잡아놨지만 쓰레기들을 치워놓지 않았기 때문에 새로운 데이터를 올릴때마다 그 공간을 청소하고 올려야 한다.

반대로 빠르게 비워지는 씩 프로비저닝을 사용했을때는 미리 다 치워놓았기 때문에 갖다 놓기만 하면 된다. 반대로 처음 생성시에 깨끗하게 치우느라 시간이 좀 더 걸린다.

 

정리:

느리게 비워지는 씩 프로비저닝 : 미리 설정된 디스크 공간을 확보해 놓고 그 안에 있는 쓰레기값들은 사용하면서 치워놓고 사용한다.

빠르게 비워지는 씩 프로비저닝 : 미리 설정된 디스크 공간을 확보해 놓고 그 안에 있는 쓰레기값도 처음에 모두 치워놓고 사용한다.(실 서비스에 용이)

Thin Provision : 미리 설정된 공간은 최대 공간일 뿐이고 실제로 확보하는 공간은 실제로 사용한 공간 만큼만 확보한다. 미리 확보하지 않기 때문에 쓰레기 값도 그때 그때 계속 치워나가는 방식이다.(개발서버에 적합)

 

 

 

 

 

--------------------------------------------------------------------------------

 

ESXi에서 VM의 디스크 생성 시 Disk Provisioning 옵션은 세 가지가 있다. 이들의 차이점을 알아보도록 한다.

 

  • Thick Provision Lazy Zeroed (느리게 비워지는 씩 프로비저닝)
  • Thick Provision Eager Zeroed (빠르게 비워지는 씩 프로비저닝)
  • Thin Provision

 

Thick Provisioning은 디스크의 물리적인 블록을 먼저 할당해놓는다. 그리고 이 블록을 사용하려면 (Write 하려면) 초기화 ("0"으로 채움)를 해야 한다. 이 블록에 대한 초기화를 Thick Provision Eager Zeroed는 디스크를 생성하는 시점에 하고, Thick Provision Lazy Zeroed는 VM에서 첫 번째 Write가 발생하는 시점에 한다. 그래서 Thick Provision Eager Zeroed는 디스크를 생성하는 시간이 좀 더 소요된다. 그러나 Thick Provision Lazy Zeroed는 디스크 공간에 대한 영역 표시만 해두었지 사용하지는 않은 상태여서 Write 할 때 초기화가 이루어져야 하므로 운영 성능이 떨어질 수 있다. 새로운 블록에 대한 IOPS가 증가하여 첫 번째 쓰기에서는 성능이 저하되기 때문이다. (Default는 Thick Provision Lazy Zeroed)

두 방식은 I/O 발생 시점 (First write)에 초기화를 하느냐 안 하느냐의 차이로 구분된다.

 

상기 두 Thick Provision을 VMware 문서에서 다르게 번역되어 있는 것을 보면, 좀 더 이해가 쉽다.

  • Thick Provision Lazy Zeroed (지연된 0으로 채워지는 씩 프로비저닝)
  • Thick Provision Eager Zeroed (즉시 0으로 채워지는 씩 프로비저닝)

 

Thick Provisioning은 둘 다 미리 디스크 공간을 잡아두지만 미리 0으로 채워두느냐, 아니면 물리적인 디스크에 있는 내용을 그냥 방치해 두느냐의 차이이다.
예를 들면, 어떤 창고에 새로운 입주자가 들어오게 되는데 같은 공간이지만 즉시 공간을 깨끗하게 아무것도 없이 치워주느냐 아니면 그냥 너저분한 상태로 두느냐이다.
느리게 비워지는 Thick Provisioning을 사용했을 때는 공간 자체는 잡아놨지만 쓰레기들을 치워놓지 않았기 때문에 새로운 데이터를 올릴 때마다 그 공간을 청소하고 올려야 한다.
반대로 빠르게 비워지는 Thick Provisioning을 사용했을 때는 미리 다 치워놓았기 때문에 갖다 놓기만 하면 된다. 반대로 처음 생성 시에 깨끗하게 치우느라 시간이 조금 더 걸리는 것이다.

 

그래서 애플리케이션 성능이 중요한 곳이라면 Thick Provision Lazy Zeroed 보다는 Thick Provision Eager Zeroed를 사용하는 것이 유리하다. 왜냐하면 느림에 대한 죗값(?)은 이미 디스크 생성 시 치렀기에 운영 중에는 겪을 일이 없다. 반면, VM을 사용하는 엔드 유저의 성능이 중요하지 않다면, 스토리지 공간을 보다 효율적으로 운영하기 위해 Thin Provisioning을 쓰게 된다.

 

Thick Provisioning을 사용하는 이유는 미리 공간을 할당해놓는 것이다. 왜냐하면, 그 공간을 써야 하는데 없을 수도 있는 경우를 원천 차단하기 위해. 만일 Thin Provisioning일 경우, 즉, 미리 공간 확보가 안되어 있는 경우 호스트에서 Write 하는데 스토리지에서 그 공간이 없을 수도 있다. 그러면 문제가 되는 것이다.

성능은 당연히 Thick Provisioning이다.
스토리지에서도 Thin Device를 만들면 최초에 물리적인 공간이 할당이 안되어 있어, 서버에서 Write 하는 시점에 물리적인 공간을 디스크로부터 가져온다. 그럼 딜레이가 발생한다. 이러한 단점을 보완하기 위해 Thin device 생성 시 디스크의 물리적인 공간을 Fully allocate 하는 기능이 있다. Dedicate 된 성능을 원할 때 Thin device에서도 전통적인 볼륨처럼 물리적인 공간을 할당해서 서버에 던져주는 것이다.

스토리지가 Thin Provisioning만 지원한다 하더라도 Thick Provision Eager Zeroed로 설정하면 공간이 Pre Allocate 된다. 즉, 기존의 Thick Provisioning처럼 동작하는 것이다. HW (Storage) 보다 Application이 우선순위가 높음을 알 수 있다.

 

결국, 이러한 선택은 사용하는 업무에 따라 성능이나 공간 효율성 등을 고려하여 결정하면 된다.

 

 

정리

간단히 말해, 디스크 프로비저닝은 다음과 같은 방식으로 수행된다.

Think Provision Lazy Zeroed : 미리 할당하고 First write 시 초기화

 

Think Provision Eager Zeroed : 미리 할당하고 초기화

 

Thin Provision : First write 시 할당 및 초기화

 

* 고성능의 올플래시 스토리지에서는 실제로 이러한 기능들이 별 의미 없는 경우도 많다. 왜냐하면 write 들어올 때 초기화해도 성능 차이가 크지 않기 때문에