두꺼운 및 얇은 프로비저닝: 차이는 무엇인가요?

이 기사에서는 가상 디스크 설정의 저장소 사전 할당 측면을 자세히 살펴보고 두꺼운 프로비저닝과 얇은 프로비저닝이 무엇이며 어떻게 다른지 그리고 이러한 저장소 사전 할당 유형 중 어느 것이 인프라에 더 나은지 알아보겠습니다.

두꺼운 프로비저닝

두꺼운 프로비저닝은 저장소 사전 할당의 한 유형입니다. 두꺼운 프로비저닝을 사용하면 가상 디스크가 생성될 때 물리적 저장소에 가상 디스크 저장 용량의 전체 양이 미리 할당됩니다. 두꺼운 프로비저닝된 가상 디스크는 시작부터 할당된 모든 공간을 데이터스토어에서 사용하므로 다른 가상 머신에서 사용할 수 없습니다.

두꺼운 프로비저닝된 가상 디스크에는 두 가지 하위 유형이 있습니다:

  • A Lazy zeroed disk is a disk that takes all of its space at the time of its creation, but this space may contain some old data on the physical media. This old data is not erased or written over, so it needs to be “zeroed out” before new data can be written to the blocks. This type of disk can be created more quickly, but its performance will be lower for the first writes due to the increased IOPS (input/output operations per second) for new blocks;
  • 선실용으로 할당된 디스크는 생성 시 필요한 공간을 모두 받고 물리적 미디어에서 이전 데이터를 완전히 삭제합니다. 선실용으로 할당된 디스크를 만드는 데는 시간이 더 걸리지만 디스크 전체에 제로가 쓰이기 때문에 첫 번째 쓰기 동안 성능이 빠릅니다. 이 유형의 두꺼운 프로비저닝된 가상 디스크는 장애 허용과 같은 클러스터링 기능을 지원합니다.

데이터 보안 이유로, 厚的 가상 디스크에 대해 지시적 쌍(eager zeroing)이 덜 omatic 쌍(lazy zeroing)보다 더 일반적이다. 왜 그렇게 되었나? VMDK을 삭제하면, 데이터 스토어에 있는 데이터는 完全是Erased가 아니며, 블록은 simply marked as available가 되며, 운영 시스템이 그 것을 재기록하기 전까지는 그렇다. 이러한 데이터 스토어에 eager zeroed 가상 디스크를 생성하면, 디스크 영역은 完全是Erased(i.e., zeroed)가 되며, 恶的 意向의 사람이 이전 데이터를 조사할 수 있는 것을 阻止하며, 그들이 专业化 third-party software를 사용하더라도 한다.

Thin Provisioning

Thin provisioning은 다른 종류의 저장 preliminary allocation이다. 厚的 가상 디스크와 다르게 thin-provisioned 가상 디스크는 initially需要的 space만큼만 사용하며, time according to demand에 따라 grow한다.

例如, 新的 thin-provisioned 30GB 가상 디스크를 생성하고 10 GB의 파일을 그 곳에 복사하면, 결과적인 VMDK 파일의 크기가 10 GB가 되고, thick-provisioned disk을 사용하면 30GB의 VMDK 파일이 되는 것과 다르다.

Thin-provisioned 가상 디스크를 만드는 것은 빠르고 저장 공간을 절약하는 데 유용합니다.

Thin-provisioned 디스크의 성능은 놀기 값이 지정된 두꺼운 디스크보다 높지 않습니다. 왜냐하면 이러한 디스크 유형 모두에서 데이터를 쓰기 전에 제로를 써야하기 때문입니다.Thin-provisioned 가상 디스크에서 데이터를 삭제할 때 디스크 크기가 자동으로 줄어들지 않습니다.왜냐하면 운영 체제가 파일 시스템의 파일 본문을 참조하는 파일 테이블에서만 인덱스를 삭제하고 “삭제된” 파일에 속했던 블록을 자유롭고 새로운 데이터를 쓸 수 있는 상태로 표시하기 때문입니다.이것이 파일 제거가 즉각적으로 보이는 이유입니다.만약 삭제된 파일이 차지하던 블록에 제로가 기록된 완전한 삭제라면, 해당 파일을 복사하는 데 걸리는 시간과 거의 같은 시간이 소요될 것입니다.Thin-Provisioned 가상 디스크 사용 시 발생할 수 있는 문제점Thin-Provisioned 가상 디스크를 사용하는 것은 항상 순조롭지 않습니다. 알고 계셔야 할 몇 가지 문제가 있으며 이에 대비해야 합니다.

가상 Macine이 사용할 수 없는 상태가 되는 예를 들어 보겠습니다. 20GB의 데이터 스토어가 있고, 이 데이터 스토어에 3대의 가상 머신이 실행 중입니다. 각각의 가상 머신에는 최대 10GB까지 확장이 가능한 씬 프로비전 가상 디스크가 설정되어 있습니다. (이것을 “오버프로비전”이라고 하며, 실제로 차지할 수 있는 공간보다 더 많은 가상 디스크 공간을 할당합니다. 이것은 자주 이루어지는 일이며, 필요에 따라 추가 물리적 저장 공간을 추가하여 시스템을 확장할 수 있기 때문입니다.) 가상 디스크의 파일 크기는 데이터가 추가됨에 따라 확장되다가, 데이터 스토어에 더 이상 자유 공간이 없을 때까지 입니다. 문제가 중요해지는 것은 데이터 스토어에 1GB 이하의 자유 공간이 남았을 때입니다. 예를 들어, VM1이 8GB, VM2가 7GB, VM3가 4GB를 차지하고 있는 경우입니다.

사용 중인 씬 프로비전 가상 디스크의 VMDK 파일 크기 줄이기

씬 프로비전 가상 디스크의 VMDK 파일 크기를 줄이려면, 이전에 삭제한 데이터가 차지하고 있던 블록을 제로로 만드는 방법을 알아야 합니다. 이를 수행하는 방법에 대해 알아보겠습니다.

참고: 디스크 축소 작업은 스냅샷을 포함하고 있지 않은 가상 머신에서만 가능합니다. 또한, 주의하여 책임을 지면서 명령을 실행해야 합니다. 모든 중요한 데이터를 백업하기 전에 디스크 작업을 수행하는 것을 잊지 마십시오.

리눅스에서 Thin-Provisioned VMware 디스크 축소하기

예를 들어보겠습니다: 우리는 10,266,496 KB(10GB) 크기의 VMDK 파일이 있습니다(가상 머신이 위치한 데이터스토어의 디렉터리에 가서 크기를 알아냈습니다) 그리고 게스트 리눅스 OS가 설치된 가상 디스크를 축소하려고 합니다. 이 가상 디스크에서 불필요한 파일을 삭제해 볼 수 있습니다. 그러나 리눅스는 파일을 삭제한 후에 자동으로 블록을 제로화하지 않습니다; 이를 직접 수행해야 합니다. 데이터를 복사하고 변환하는 데 사용되는 dd(데이터 이중화) 유틸리티를 사용하여 이 작업을 수행할 수 있습니다. 이 도구는 모든 리눅스 시스템에서 사용할 수 있습니다.

참고: dd 유틸리티를 실행하기 전에 사용할 데이터스토어에 충분한 용량이 있는지 확인해야 합니다(예: ESXi 서버의 경우 vSphere 클라이언트의 저장소 섹션에서 저장 용량을 확인할 수 있습니다 – 구성 > 저장소로 이동합니다).

dd 유틸리티를 사용해 봅시다.

  1. 먼저, df -h 명령을 사용하여 게스트 Linux 가상 머신의 여유 공간을 확인합니다:

    root@test-virtual-machine:/# df -h

    콘솔에서 다음 출력을 받습니다:

    Filesystem   Size   Used   Avail   Use%   Mounted on
    udev         469M   0      469M    0%     /dev
    tmpfs        99M    6,3M   92M     7%     /run
    /dev/sda7    17G    8,8G   6,4G    58%    /
    tmpfs        491M   116K   491M    1%     /dev/shm
    tmpfs        5,0M   4,0K   5,0M    1%     /run/lock
    tmpfs        491M   0      491M    0%     /sys/fs/cgroup
    /dev/sda1    945M   121M   760M    14%    /boot
    /dev/sda6    3,7G   13M    3,5G    1%     /var/log
    tmpfs        99M    36K    99M     1%     /run/user/1000
    

    이 출력에서 / (루트) 파티션에 8.8 GB의 파일이 포함되어 있음을 확인할 수 있습니다.

  2. 이 출력에서 / (루트) 파티션에 8.8 GB의 파일이 포함되어 있음을 확인할 수 있습니다.

    루트 파티션에서 몇 기가바이트의 불필요한 파일을 삭제해 봅시다. 이 명령을 실행하면 콘솔에서 다음과 같이 볼 수 있습니다: df -h /

    Filesystem   Size   Used   Avail   Use%   Mounted on
    /dev/sda7    17G    4,7G   11G     31%    /

    따라서, 우리의 루트 파티션에는 이제 4.7 GB의 파일이 포함되어 있습니다. 그러나 우리의 VMDK 파일이 위치한 디렉토리로 이동하면 그 크기가 여전히 10,266,496 KB (10 GB)임을 볼 수 있습니다.

  3. 지금 我們이 사용할 수 있는 空间의 zeros(in our case, 11 GB 중 10 GB를 사용하기 위해)로 채우기 시작합니다. 먼저, 我們이 해당 partition이 마ounted 되어 있는 directory의 name을 입력하여 cd 命令을 실행합니다(in our case it is cd /, 因為 we want to navigate to the root partition). 그 다음, 다음 命令을 실행하고, 변수를 我們的 needs에 맞게 수정하십시오:

    dd bs=1M count=10240 if=/dev/zero of=zero

    이 命令에서:

    • dd 命令은 일반 user가 실행할 수 없습니다.
    •  bs 는 블록 size를 정의하는 역할을 합니다(예를 들어 bs=1M 는 1-Megabyte의 블록 size를 giving you).
    •  count 는 コピー할 블록의 수를 지정합니다(dd 命令의 기본은 forever가 아닌 input가 다 吃完하기 전까지 돌기 或者 until the input runs out). 我们的 case에서, 10,240 MB는 zeros로 채우고자 하는 自由 space의 크기이며, 1-Megabyte의 블록은 10240개입니다.
    •  if 는 “input file”를 의미합니다. 여기서 你们이 데이터를 복사하고자 하는 source를 지정해야 합니다. 我们的 case에서, 이것은 /dev/zero로 – 특수 file(pseudo-device)로, 你们이 읽고자 하는 것과 같은 것을 제공합니다.
    •  of 는 “output file”를 의미합니다. 여기서 你们이 데이터를 쓰고자 하는 destination을 지정해야 합니다(our case, 이 file의 name은 zero).

    上述 command 실행 후, 我们的 VMDK file 사이즈가 커집니다. 이 command가 성공적으로 실행 되었다면 이러한 출력을 보실 수 있습니다:

    10240+0 records in
    10240+0 records out
    10737418240 bytes (10 GB) copied, 59,4348 s, 181 MB/s
    Command has been completed successfully.

    그렇게, 我们的 VMDK file 사이즈는 11,321,856 KB(10.8 GB)로 변하며, 这意味着 it has expanded. Also, if we run the df -h / command again, we will see the following:

    Filesystem   Size   Used   Avail   Use%   Mounted on
    /dev/sda7    17G    15G    569M    97%    /

    This means that almost the whole root partition (i.e., 97%) is occupied. This is because

참고: 줄이기 위해서는 VMware Tools를 설치해야 합니다.

  1. VMware ESXi 또는 VMware Workstation에서 실행 중인 가상 머신의 경우, Linux 게스트 OS에서 다음 두 명령을 실행합니다.a) 디스크 파티션을 사용할 수 있는지 확인하려면 다음 명령을 실행합니다:

    root@test-virtual-machine:/# vmware-toolbox-cmd disk list

    우리의 경우에 보는 출력은 다음과 같습니다 (즉, 사용 가능한 파티션 목록이 표시됩니다):

    /
    /boot
    /var/log

    루트 파티션이 있으므로 계속할 수 있습니다.b) 파티션을 줄이려면 다음 명령을 실행합니다:

    root@test-virtual-machine:/# vmware-toolbox-cmd disk shrink /

    우리의 경우에 보는 출력은 다음과 같습니다:

    줄이기 프로세스 중에 디스크 공간에 대한 경고는 무시하십시오.
    진행률: 100 [===========>]
    디스크 줄이기 완료.
    

    이제 줄어든 VMDK 파일 크기는 5,323,456 KB입니다 (즉, 이전의 10.8 GB보다 훨씬 작은 5.08 GB입니다).

참고: 게스트 가상 머신이 ESXi 서버에서 실행 중인 경우 블록을 제로로 채운 후 다음 단계를 수행할 수 있습니다:

  1. 가상 머신을 종료하거나 축소하려는 가상 디스크를 연결을 해제합니다.
  2. SSH 클라이언트를 사용하여 ESXi 호스트에 연결합니다.
  3. 가상 머신 폴더로 이동합니다.
  4. du -h를 사용하여 디스크 사용량을 확인합니다.
  5. vmkfstools -K test-virtual-machine.vmdk를 실행합니다.
  6. 다시 du -h를 사용하여 디스크 사용량을 확인합니다.

Windows에서 Thin-Provisioned VMware 디스크 축소하기

윈도우는 리눅스와 마찬가지로 파일을 삭제한 후 자동으로 블록을 제로화하지 않습니다. Windows 가상 머신의 대상 디스크의 빈 공간을 제로화하려면 Microsoft의 Sysinternals Suite에서 무료 유틸리티 인 SDelete를 다운로드하고 다운로드한 아카이브의 파일을 c:\program files\sdelete에 푸는 것이 필요합니다.

그런 다음 다음 단계를 따르십시오:

  1. cmd를 실행합니다.
  2. SDelete가 있는 디렉터리로 이동하십시오. 여기서는 다음과 같습니다: cd c:\program files\sdelete

  3. 콘솔에서 각 파티션에 대해 sdelete -z 명령을 사용하십시오. 우리의 경우 다음과 같습니다:

    sdelete -z c:
    sdelete -z d:

    이러한 명령은 지정된 파티션의 사용되지 않은 공간을 채워서 슬림 프로비저닝된 디스크의 모든 빈 공간을 제로화합니다. 프로세스가 완료될 때까지 몇 분 기다려 주십시오. 프로세스 중에 VMDK 파일이 최대 크기로 확장됩니다.

  4. Windows 가상 머신에 VMware 도구가 설치되어 있는지 확인하세요. 기본적으로 VMware 도구는 다음 위치에 설치됩니다: c:\program files\vmware\vmware tools\

    다음 디렉터리로 이동하려면 다음을 입력하세요:

    cd c:\program files\vmware\vmware tools\

  5. 사용 가능한 디스크 파티션을 보려면 다음을 입력하세요:

    vmwaretoolboxcmd disk list

  6. 필요한 디스크 파티션을 축소하세요. 저희 경우에는 다음 명령을 실행했습니다:

    vmwaretoolboxcmd disk shrink c:\
    vmwaretoolboxcmd disk shrink d:\

    프로그램이 디스크를 축소할 때까지 기다리세요.

이 방법은 VMware ESXi나 VMware Workstation에서 실행 중인 가상 머신에 사용할 수 있습니다.

VMware Storage Distributed Resource Scheduler

위에서는 얇은 프로비저닝된 디스크를 수동으로 축소하는 해결책에 대해 언급했습니다. 그러나 vSphere에서 데이터스토어 클러스터를 사용하는 경우 가상 디스크(얇은 프로비저닝 및 두꺼운 프로비저닝)를 관리하는 또 다른 방법이 있습니다. VMware는 데이터스토어 클러스터 내에서 가상 디스크를 자동으로 이동하여 얇은 프로비저닝된 가상 디스크가 위치한 디스크 저장소의 과다 사용을 피하고 I/O 리소스를 균형있게 분산시킵니다.

ESXi 서버에 연결된 여러 공유 데이터스토어가 있는 경우, 스토리지 분산 리소스 스케줄러(Storage DRS)를 설정할 수 있습니다. 스토리지 DRS는 VMFS 및 NFS 저장소를 효율적으로 관리하는 지능형 vCenter Server 기능으로, 가상 머신 디스크 배치 및 이동을 자동화합니다. 이동 권장 사항을 수동으로 승인하는 것을 선호하는 경우 수동 모드로 스토리지 DRS를 설정할 수도 있습니다.

다음 단계를 따라 스토리지 DRS를 활성화합니다:

  1. vSphere 웹 클라이언트에서 데이터스토어 클러스터로 이동합니다.
  2. vCenter > 데이터스토어 클러스터로 이동합니다.
  3. 데이터스토어 클러스터를 선택하고 관리 > 설정 > 서비스 > 스토리지 DRS를 클릭합니다.
  4. 편집을 클릭합니다.
  5. 필요한 자동화 설정, I/O 관련 기능 및 고급 옵션을 구성합니다.
  6. 확인을 클릭하여 마칩니다.

vSphere 환경에 데이터스토어 클러스터가 없는 경우 다음 단계를 따라 새 데이터스토어 클러스터를 생성하고 설정합니다:

  1. <vCenter > Datacenters에 대한 vSphere 웹 클라이언트에서 탐색하십시오.
  2. 데이터 센터를 마우스 오른쪽 단추로 클릭하고 새로운 데이터스토어 클러스터를 선택하십시오.
  3. 데이터스토어 클러스터의 이름을 입력하고 “스토리지 DRS 켜기” 근처의 확인란을 선택하십시오.
  4. 필요한 자동화 설정, I/O 관련 기능 및 고급 옵션을 선택하십시오.
  5. 완료하려면 확인을 클릭하십시오.

결론

이 블로그 글에서는 가상 디스크의 유형을 고려하고 두껍게 할당된 디스크와 얇게 할당된 디스크 간의 차이를 더 잘 이해하기 위해 각각의 장단점을 고려했습니다. 성능과 보안을 위해 이지로 제로 두꺼운 디스크가 가장 좋지만 충분한 여유 저장 공간이 필요하며 생성하는 데 많은 시간이 걸립니다. 게으른 제로 두꺼운 디스크는 생성 시간이 짧아서 좋지만 이지로 제로 두꺼운 디스크만큼의 속도를 제공하지 않으며 덜 안전합니다. 얇게 할당된 디스크는 디스크 생성 시점에 데이터스토어 공간을 절약하는 최상의 선택입니다.

물리적 공간보다 큰 최대 크기의 가상 디스크를 생성할 수 있습니다(“과다할당”) 그리고 나중에 더 많은 물리적 저장 공간을 추가할 수 있지만, 물리적 디스크 공간이 가득 차고 얇게 할당된 디스크가 더 많은 데이터를 수용할 수 없는 경우 가상 머신을 사용할 수 없게됩니다. – 그러므로 여유 공간의 양을 주의 깊게 지켜야합니다. 또한, 더 이상 저장 공간을 추가하지 않으려는 경우와 공간을 줄이는 방법을 살펴보았습니다.

Source:
https://www.nakivo.com/blog/thick-and-thin-provisioning-difference/