vSphere 환경을 사용하면서 VM들의 가상디스크 타입을 Thin Provisioning 타입의 디스크로 사용하는 환경이 많습니다.
Thin Provisioning 디스크를 생성하면 0byte로 만들어지고 VM에 데이터가 증가됨에 따라 vmdk 파일의 크기도 증가하게 됩니다.
데이터스토의 공간이 많지 않은 환경에서 유용하게 쓰일 수 있죠.
그러나 VM에서 파일이 삭제가 되면 vmdk의 파일크기는 줄어들지 않습니다.
VM의 파일시스템 (ex. NTFS, EXT4 등)을 vmkernel이 인식할 수 없기 때문에 이 같은 문제가 발생하게 됩니다.
GuestOS에서 파일이 삭제되면 vmdk에서 논리적인 정보는 제거되지만 파일의 실제 내용은 디스크 영역에 남아있거나 다른 파일이 추가되면서 덮어쓰게 됩니다. 삭제되는 파일이 많을수록 낭비되는 공간 또한 많아지게 되겠지요.
VM내부의 파일시스템에서의 사용된 크기와 vSphere Clinet에서 보여지는 사용된 크기의 차이가 큰 경우에는 차이에 대한 공간을 회수해야 하는데요.
문제를 해결하는 방법은 다음과 같습니다.
1. Block zeroing을 위한 Tool 사용
2. vmkfstool 또는 Storage vMotion을 통해 해당 VM의 데이터를 다른 데이터스토어로 마이그레이션
앞서 이야기 된 것처럼 VMkernel이 GuestOS의 파일시스템을 이해할 수 없기 때문에 GuestOS 내부에서 Reclaim Tool을 이용하여 낭비된 공간을 회수하여야 합니다.
vSphere에는 낭비되는 공간을 실제 축소하는 기능이 없지만, 스토리지 vMotion을 진행하면 실제 저장된 데이터만 이동하므로 공간을 축소하는 "효과"를 볼 수 있습니다.
아래의 내용은 vSphere 6.5 미만의 버전에서 해당되는 방법입니다.
vSphere 6.5 이상은 GuestOS 및 스토리지에 대한 자동 리클레임 기능을 제공하고 있습니다.
Windows 2008 R2 이전버전에서의 해결방법
Windows의 경우에는 Windows 8 계열 이상 (Server군의 경우엔 2012 이상)에서 이런 공간을 자동으로 회수하는 기능을 가지고 있습니다만, 그 이전의 Windows의 경우에는 수동으로 Reclaim 작업이 진행되어야 합니다.
이 포스팅에서는 Microsoft의 sdelete 라는 도구를 사용하여 공간을 회수하도록 하겠습니다.
https://docs.microsoft.com/ko-kr/sysinternals/downloads/sdelete
위의 링크에서 Download SDelete (221KB)를 다운로드 하여 해당 GuestOS에 Extract 합니다.
SDelete는 OS에 마운트된 드라이브 별로 진행이 가능합니다.
CMD창을 열어 다음과 같이 명령어를 입력합니다.
sdelete -z 드라이브명:\
C 드라이브를 Reclaim하고자 하면 "sdelete -z C:\" 라고 입력하면 되겠지요.
- "주의" -
이 툴을 실행하면 파티션의 비어있는 부분에 "0"이라는 digit를 입력하게 됩니다. 따라서 스토리지에 I/O를 일으키는 작업이기 때문에 많은 양의 I/O가 일어날 수 있습니다. 꼭 서비스가 적은 시간대에 명령하시길 바랍니다.
또한 "0"이라는 값을 입력하는 작업이기 때문에 일시적으로 vmdk의 파일크기가 프로비저닝된 크기까지 증가할 수도 있습니다.
(현재 데이터스토어에 충분한 공간이 있는지 미리 확인하시기 바랍니다)
SDelete 를 구동이 완료된 후에 호스트의 SSH에서 vmkfstools를 실행하여 리클레임을 진행합니다.(-K 는 대문자입니다)
SSH에 접속 후 해당 VM의 폴더로 이동 (e.g. cd /vmfs/volumes/데이터스토어/VM폴더)
$vmkfstools -K (디스크).vmdk
(e.g. vmkfstools -K server1.vmdk)
Windows 2012 이상 버전에서의 해결방법
Windows 2012 이상의 버전에서는 OS 내에 Natively Support로 공간에 대한 회수를 지원합니다.
다음 PowerShell 명령을 통해 Noti를 받을 수 있도록 설정이 되었는지 확인이 가능합니다.
Get-ItemProperty -Path "HKLM:\System\CurrentControlSet\Control\FileSystem" -Name DisableDeleteNotification
DisableDeleteNotification : 0
만약 DisableDeleteNotification 값이 0이 아닐경우 값을 Set하는 방법입니다. (값이 -1일 경우)
Set-ItemProperty -Path "HKLM:\System\CurrentControlSet\Control\Filesyste" -Name DisableDeleteNotification -Value 0
해당 값이 설정되어 있으면 Reclaim은 자동으로 이루어 집니다.
Optimize-Storage 명령을 통해 수동으로 리클레임 작업을 수행할 수 있습니다.
PS C:\> Optimize-Volume -DriveLetter G -ReTrim –Verbose
VERBOSE: Invoking retrim on boneyard3 (G:)...
VERBOSE: Performing pass 1:
VERBOSE: Retrim: 0% complete...
VERBOSE: Retrim: 1% complete...
....
VERBOSE: Retrim: 99% complete...
VERBOSE: Retrim: 100% complete.
VERBOSE: Post Defragmentation Report:
VERBOSE: Volume Information:
VERBOSE: Volume size = 5.99 TB
VERBOSE: Cluster size = 4 KB
VERBOSE: Used space = 212.65 GB
VERBOSE: Free space = 5.79 TB
VERBOSE: Retrim:
VERBOSE: Backed allocations = 6143
VERBOSE: Allocations trimmed = 5936
VERBOSE: Total space trimmed = 5.78 TB
PS C:\>
Linux 머신에서의 해결방법
SDelete는 Microsoft에서 지원하는 Windows용 Tool 이기 때문에 Linux에서는 별도의 Tool을 사용하여야 합니다.
리눅스에서는 zerofree라는 툴이 제공되고 있습니다.
Fedora/CentOS/RedHat 계열에서는 yum, Debian과 Ubuntu 계열에서는 apt-get을 통해 zerofree의 설치가 가능합니다.
Fedora/CentOS/RedHat
$ yum install zerofree
Debian/Ubuntu
$ apt-get install zerofree
설치가 끝난 zerofree의 사용 커맨드는 다음과 같습니다.
zerofree는 파티션을 Read Only로 마운트하여야 가능합니다. 만약 root 파티션의 경우엔 다른 Linux VM에 파일시스템을 마운트하여 작업을 진행할 수 있습니다.
$ mount -o remount,ro /dev/mapper/lvol0
$ zerofree -v /dev/mapper/lvol0
1106/485301/512000
위의 작업이 끝난 후 호스트에 SSH로 접근하여 vmkfstool -K를 통해 리클레임 작업을 진행하여야 합니다.
$ vmkfstools -K 해당디스크.vmdk
이번 포스팅과 같이 두 가지의 방법을 통해서 Thin Provisiong Type 의 공간을 확보하시길 바랍니다.
'VMWare > vSphere' 카테고리의 다른 글
VMware vSphere VM의 mac 주소 변경방법 (0) | 2020.03.10 |
---|---|
ESXi에서 NIC 정보(드라이버 및 펌웨어)와 하드웨어 호환성 체크방법 (0) | 2019.11.12 |
VMware vSphere vCenter Server 루트 CA인증서 다운 및 적용하기 (2) | 2019.10.04 |
작업 실패 알 수 없는 이유로 작업이 실패했습니다. vSphere Web Client로 데이터스토어에 파일 업로드가 안될 경우. The operation failed (0) | 2019.10.04 |
Ramdisk 'tmp'이(가) 가득 찼습니다. 이로 인해 /tmp/...txt 파일을 쓸 수 없습니다. VMware는 제이씨티에스 JCTS (0) | 2019.08.29 |