Windows Server 2008
Hyper-V
2008. 02. 10.
안혁
http://hyok.kr


가상 컴퓨터 새로 만들기를 사용하여 가상 컴퓨터를 만드는 경우, 디스크 생성 단계에서 만들어지는 가상 하드 디스크는 동적(Dynamic) 확장 디스크 입니다. 사용하는 만큼 용량이 늘어나다가 정해진 크기까지만 늘어나는 방식입니다. 디스크의 내용이 변경될 때마다 증가한다고 볼 수 있습니다. 실제 발생하는 IO(Input/Output) 이외에 디스크 확장에 필요한 IO도 함께 발생하는 것이지요. 처음부터 디스크를 정해진 용량으로 만들면 부가적으로 발생하는 디스크 확장 IO는 발생하지 않게 되어 성능의 향상을 기대할 수 있습니다.

만약 가상 하드 디스크(VHD)가 확장되다가 VHD 파일을 담고 있는 하드 디스크의 용량이 부족하게 된다면 어떻게 될까요?  Hyper-V는 VHD 파일이 들어있는 하드 디스크의 남은 공간이 일정 수준 이하(약 1GB)로 내려가면 해당 디스크와 관련된 가상 컴퓨터 전체를 일시 정지 시킵니다.  디스크 확장이 이루어져야 할 수도 있고 가상 컴퓨터를 구동하는데 필요한 임시 파일을 저장해햐 할 수도 있는데, 물리 디스크에 남은 공간이 없다면 작동할 수 없는 환경이되기 때문입니다. 몇 회는 강제로 재 시작 시킬 수 있지만 디스크 남은 공간의 크기에 따라 다시 시작하지 못할 수도 있고, 가상 컴퓨터를 강제 종료해야 할 수도 있습니다.

실제 운영 서버였다면 긴급 정지도 큰 일이며, 서버를 종료한다는 것도 큰 일일 것입니다. VHD 파일은 용량이 늘어나기는 하지만 줄어들지 않습니다. VHD 파일 내부에 사용하지 않는 공간을 제거하여, 용량을 줄여주는 도구를 Hyper-V가 제공하지만, 가상 컴퓨터를 종료해야 가능하고 시간도 오래걸리는 작업입니다. 가상 컴퓨터를 몇 시간 후에 다시 시작할 수 있을지 장담할 수 없습니다. 혹시 물리 하드 디스크의 남은 용량이 적어 가상 컴퓨터를 켤 수 없다면 내부의 파일 삭제도 할 수 없어 여유 공간을 확보할 수도 없는 딜레마에 빠질 수도 있습니다. 가상 하드 디스크를 고정 용량으로 생성되도록 하면 이런 문제들을 미리 확인하고 대처할 수 있어 실제 운영 환경의 필수 조건이 아닌가 생각됩니다.

새로 만들기 > 하드 디스크를 선택하면 새로운 가상 하드 디스크를 생성할 수 있습니다.

사용자 삽입 이미지

생성할 수 있는 디스크의 종류는 동적 확장, 고정 크기, 차이점 보관용 3가지 입니다. 가상 컴퓨터를 새로 만들 때 생성되는 하드 디스크는 동적 확장 디스크입니다. 고정 크기 디스크가 앞에서 이야기한 운영 환경용 디스크입니다. 30GB 가상 하드 디스크를 생성할 경우 30GB VHD 파일이 생성됩니다. 디스크 용량이 부족하다면 이때 에러가 발생할 것입니다. 차이점 보관용 디스크는 원본 가상 하드 디스크를 기준으로 차이점만 보관하는 디스크입니다. 가상 하드 디스크를 복사해서 사용하면 그만큼의 용량이 필요하지만, 차이점 보관용 디스크는 원본 VHD에서 차이 나는 것만 저장합니다. 그러므로 디스크 용량을 절약할 수 있지요. 하지만 원본 VHD가 변경되면 차이점 보관용 디스크도 사용할 수 없게 됩니다. 그리고 오랜 시간 사용하면 원본과 차이점 디스크의 용량 차이가 많이 나지 않게 되어 일시적인 효율적 구성에 유용한 듯 보입니다.

이미 만들어진 동적 확장 디스크는 어떻게 고정 크기로 변경할까요? 가상 컴퓨터 설정 화면에서 변경이 가능합니다.

사용자 삽입 이미지

하드 드라이브 설정 화면에서 편집을 선택하면 해당 드라이브에 연결되어 있는 가상 하드 디스크에 대하여 몇가지 작업을 진행할 수 있습니다.

사용자 삽입 이미지

가상 하드 디스크를 대상으로 할 수 있는 작업은 압축, 변환, 확장 3가지 입니다. 압축은 가상 하드 디스크의 사용하지 않는 공간을 제거하여 VHD 파일 용량을 줄여줍니다. 가상 컴퓨터에서 필요 없는 파일들을 삭제하고 디스크 조각 모음을 진행한 후 종료하여 이 작업을 진행하면 됩니다. 단, 시간이 오래 걸린다는 단점이 있습니다.  변환은 동적 확장 하드 디스크를 고정 크기 하드 디스크로 변환하여 줍니다. 이미 만들어진 가상 하드 디스크는 이 변환을 통하여 고정된 크기의 VHD로 변환할 수 있습니다. 확장은 디스크의 용량을 늘려줍니다. 예를들어 30GB 디스크를 50GB로 늘리는 작업을 할 수 있습니다. 오해할 수 있는 것은 C드라이브가 늘어나는 것이 아니라 디스크 용량이 늘어나는 것입니다. 파티션을 추가할 수 있는 빈 공간이 늘어나는 것이지 사용중인 파티션이 늘어나는 것은 아닙니다. C드라이브가 30GB였다면 디스크를 50GB로 확장하여도 C드라이브는 변함없이 30GB입니다. 20GB의 D드라이브를 만들 수 있게 되었다는 것이 달라지는 점입니다. 그리고 가상 하드 디스크의 크기는 줄일 수는 없습니다. 압축은 단지 동적 하드 디스크의 파일 크기를 줄여줄 뿐, 설정된 디스크의 크기를 줄여주지는 않습니다.

개발/테스트 환경에서는 동적 확장/차이점 디스크가 그리 문제되지 않을 것입니다. 부족한 개발 장비 내에서 효율적인 유용한 디스크입니다. 단지, 운영 환경은 안정성과 성능을 고려하여 고정 크기 디스크를 사용하는 것이 좋지 않을까 생각해 봅니다.

이상의 이야기는 가상 컴퓨터에서 가상 하드 디스크를 사용할 때에 해당합니다. 물리 컴퓨터에 남는 하드 디스크가 있다면, 가상 컴퓨터에 이 물리 하드 디스크를 연결할 수도 있습니다. 물리 디스크를 사용하는 경우 위에서 한 고민들은 대부분 사라지게 됩니다. 또한 VHD 파일이 아닌 디스크를 직접 접근하는 것이므로 더 낳은 성능을 얻을 수도 있습니다.

Hyper-V에서 물리 디스크를 사용하려면 오프라인 상태이어야 합니다.

사용자 삽입 이미지


오프라인으로 설정된 하드 디스크는 물리 컴퓨터에서 사용할 수 없습니다. 이 디스크를 사용하려는 가상 컴퓨터의 설정에서 다음처럼 실제 하드 디스크를 선택할 수 있습니다.

사용자 삽입 이미지

이 디스크는 하나의 컴퓨터에서만 사용될 수 있습니다. 하나의 컴퓨터만 접근한다는 것이 중요합니다. 이것은 VHD를 사용할 때 보다 더 낳은 성능을 기대할 수 있게되는 또 다른 이유입니다. VHD 파일들은 하나의 디스크(예, D:\Hyper-V) 내에서 관리된다고 본다면, 여러 가상 컴퓨터가 하나의 물리 하드 디스크를 사용하는 것이 됩니다. 전자는 컴퓨터만이 한 디스크를 사용하지만, 후자는 여러 컴퓨터(n)가 하나의 디스크를 사용합니다. 단순하게 생각하면 가상 컴퓨터 입장에서 하드 디스크의 성능은 1/n이 되죠.
 
컴퓨터의 성능은 가장 느린 저장 메체인 하드 디스크의 성능에 달려있다고 볼 수 있습니다.. CPU 성능이 아무리 좋아도 디스크가 느리면 CPU는 기다리는 수밖에 없습니다. 물리 하드 디스크를 직접 연결하는 것이  가상 컴퓨터의 본연에 성능을 이끌어 내는 방법이 될 수 있습니다. 그렇다고 모든 가상 컴퓨터에 물리 디스크를 연결한다면 기대했던 비용 절감의 효과는 감소되겠죠? 디스크 IO가 많은 컴퓨터(예, 데이터베이스 서버, 메일 서버)라면 물리 하드 디스크를 직접 연결할 것을 권장합니다. 그것이 어렵다면, 가상 하드디스크를 사용하는 대신 가상 컴퓨터의  VHD 파일을 디스크 별로 분리 배치할 수도 있겠습니다.(C;\Hyper-V, D:\Hyper-V, ....)

실제 운영의 환경에 Hyper-V를 도입하려 한다면, 적어도 디스크에 관한 고민을 잊지 않아야 합니다.
Posted by 안혁 windfruit