가상화 - 윈디하나의 솔라나라
|
가상화란 컴퓨팅 리소스의 추상화를 통해 다수의 운영 체제 또는 애플리케이션 이미지가 하나의 물리적 서버를 공유하도록 함으로써 총소유비용을 극적으로 절감하고 관리성을 개선할 수 있게 하는 프로세스를 말한다.오라클의
시스템 자원 추상화이고 이를 통해
비용 절감을 목적으로 한다. 목적이 비용 절감이기 때문에, 만약 가상화로 비용이 늘어난다면 하지 말아야 한다.
※ 솔라리스 10 최신 업데이트는 아래와 같이 지원한다.
※ Illumos 최신 업데이트는 KVM을 추가로 지원한다.
구분은 이렇게 해놓았지만, 이론적으로는 이렇다는 이야기고, 현재 출시되어있는 반가상화/전가상화 솔루션들도 실제로는 성능상의 문제로 전가상화와 반가상화를 넘나들며 구현되고 있다.
또한 윈도를 포함한 대부분의 운영체제는 가상화 소프트웨어에 GuestOS로 들어가기 위해 이미 수정되어있으며, 부족한 부분은 Guest OS에 하이퍼바이저와 연동할 드라이버를 설치해 해결하고 있다. 필자는 전가상화, 반가상화 구분이 모호해진 이유가 VT-X, AMD-V 에서 제시한 Ring -1
때문이라고 본다. Ring -1
이 나온 이유중 하나가 Ring 0
에서 실행하는 운영체제를 운영체제 수정 없이 반 가상화로 실행하기 위함이다.
전가상화와
반가상화를 사용할 때 하드웨어에서 성능 향상에 필요한 기능을 지원해주면 좀 더 빠르게 작동할 수 있다. 주로 리매핑 기술과 관련되어있다. 하드웨어 가상화 기술이 지원되는 장비와 하이퍼바이저와 게스트OS를 사용해, 가상화로 인한 성능 저하 비율을 1% 이하로 가져가는게 목표다. 필자가 생각에는 현재 가상화 기술로도 비용 절감을 실현할 수 있다고 생각한다. 아래는 현재 상용화된 가상화를 위한 하드웨어 기술들이다.
CPU에서 지원하는 가상화 성능 향상 기술이다. AMD는 AMD-V, Intel은 VT-x이라 명명했다. 개발 당시 AMD에서는 Pacifica 또는 SVM, 인텔에서는 Vanderpool
이라고도 불렸다. 커널은 Ring 0에서 작동해 장치를 제어하게 되는데, 유저 어플인 GuestOS는 Ring 3에서 작동하기 때문에 Ring 0가 필요한경우 복잡한 과정을 거쳐야 했다. 이에 Ring -1에 해당하는 모드를 추가해 하이퍼바이저를 만들어 성능을 높일 수 있도록 했다.
Nested Page섹션을 읽어보자.
2세대 AMD-V, VT-x 라고도 불리는 Nested Page는, MMU를 가상화 기술에 최적화시킨 CPU의 기능이다. SLAT이라고도 한다.
메모리를 많이 참조하는 응용의 경우 2배 이상의 성능향상이 있다. 인텔의 경우 EPT로 명명했고, AMD의 경우 RVI로 명명했다.
AMD의 경우 페넘II 부터, 인텔의 경우 i3, i5, i7 이상의 제품군에서 사용할 수 있는데, 인텔은 CPU마다 지원사항이 다르다. 인텔 CPU의 지원여부는 인텔® 가상화 기술을 읽어보자. 기본적으로 i3, i5, i7은 모두 EPT를 지원한다.
┌──┐ │VM│ └─┬┘ ┌───────┴───────┐ 시스템가상화 프로세스가상화 ┌─────┴─────┐ ┌───┴───┐ │ │ HW가상화 HW에뮬레이션 │ │ 에뮬레이터 ┌───┴───┐ 다중시스템 동적변환기 Type 1 Type 2 ┌─────┬─┘ ┌───┼───┐ VirtualBox ┌─┴─┐ 멀티태스크 OS변환 ISA&ABI ISA&OS Language Java 반가상화 전가상화 │ xVM ┌─┴─┐ OS가상화 Zone H/W지원 바이너리변환 xVM
┌───────┐create┌────┐install ┌─────┐ready┌─────┐ ┌────┐ │ │─────→│CON │────────→│ │────→│ │boot│ │ │NOT │ │FIG │ │INST │ │READY│───→│RUNN│ │CREATED│←─────│URED│←────────│ALLED│←────│ │ │ING │ └───────┘delete└────┘uninstall└─────┘halt └─────┘ └────┘ ↑ shutdown │ └──────────────────────┘주) incomplete 상태는 install 하다가 실패한 경우이다.
root@wl ~ # zoneadm list -cv 1) ID NAME STATUS PATH BRAND IP 0 global running / native shared root@wl ~ # mkdir -m 700 /export/zone1 2) root@wl ~ # zonecfg -z zone1 3) zone1: 그런 영역은 구성되지 않음 새 영역 구성을 시작하려면 'create'을(를) 사용하십시오. zonecfg:zone1> create zonecfg:zone1> set zonepath=/export/zone1 zonecfg:zone1> set autoboot=true zonecfg:zone1> add inherit-pkg-dir zonecfg:zone1:inherit-pkg-dir> set dir=/opt zonecfg:zone1:inherit-pkg-dir> end zonecfg:zone1> add net zonecfg:zone1:net> set address=192.168.0.20 zonecfg:zone1:net> set physical=vmxnet0 zonecfg:zone1:net> end zonecfg:zone1> verify zonecfg:zone1> commit zonecfg:zone1> exit root@wl ~ # cat /etc/zones/zone1.xml 4) <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE zone PUBLIC "-//Sun Microsystems Inc//DTD Zones//EN" "file:///usr/share/lib/xml/dtd/zonecfg.dtd.1"> <!-- DO NOT EDIT THIS FILE. Use zonecfg(1M) instead. --> <zone name="zone1" zonepath="/export/zone1" autoboot="true"> <inherited-pkg-dir directory="/lib"/> <inherited-pkg-dir directory="/platform"/> <inherited-pkg-dir directory="/sbin"/> <inherited-pkg-dir directory="/usr"/> <inherited-pkg-dir directory="/opt"/> <network address="192.168.0.20" physical="vmxnet0"/> </zone> root@wl ~ # zoneadm list -cv 4) ID NAME STATUS PATH BRAND IP 0 global running / native shared - zone1 configured /export/zone1 native shared root@wl ~ # zonecfg -z zone1 info 4) zonename: zone1 zonepath: /export/zone1 brand: native autoboot: true bootargs: pool: limitpriv: scheduling-class: ip-type: shared inherit-pkg-dir: dir: /lib inherit-pkg-dir: dir: /platform inherit-pkg-dir: dir: /sbin inherit-pkg-dir: dir: /usr inherit-pkg-dir: dir: /opt net: address: 192.168.0.20 physical: vmxnet0 root@wl ~ # zoneadm -z zone1 install 5) Preparing to install zone <zone1>. Creating list of files to copy from the global zone. Copying <2383> files to the zone. Initializing zone product registry. Determining zone package initialization order. Preparing to initialize <1089> packages on the zone. Initializing package <1089> of <1089>: percent complete: 100% Initialized <1089> packages on zone. Zone <zone1> is initialized. Installation of <1> packages was skipped. The file </export/zone1/root/var/sadm/system/logs/install_log> contains a log of the zone installation. root@wl ~ # zoneadm list -cv | grep zone1 - zone1 installed /export/zone1 native shared root@wl ~ # zoneadm -z zone1 ready 6) root@wl ~ # zoneadm list -cv | grep zone1 1 zone1 ready /export/zone1 native shared root@wl ~ # zoneadm -z zone1 boot 7) root@wl ~ # zoneadm list -cv | grep zone1 1 zone1 running /export/zone1 native shared root@wl ~ # zlogin zone1 8) [영역 'zone1' pts/3에 연결됨] Sun Microsystems Inc. SunOS 5.10 Generic January 2005 # Ctrl+D ['zone1' pts/3 영역에 대한 연결이 닫힘] root@wl ~ # zlogin -C zone1 8) [영역 'zone1' 콘솔에 연결됨] zone1 console login: zone1 console login: ~. [영역 'zone1' 콘솔에 대한 연결이 닫힘] root@wl ~ # zoneadm -z zone1 halt 9) root@wl ~ # zoneadm list -cv | grep zone1 - zone1 installed /export/zone1 native shared root@wl ~ # zoneadm -z zone1 uninstall 10) zone1 영역을 uninstall하시겠습니까? (y/[n])? y root@wl ~ # zoneadm list -cv | grep zone1 - zone1 configured /export/zone1 native shared root@wl ~ # zonecfg -z zone1 11) zonecfg:zone1> delete zone1 영역을 삭제하시겠습니까? (y/[n])? y zonecfg:zone1> exit root@wl ~ # zoneadm list -cv ID NAME STATUS PATH BRAND IP 0 global running / native shared root@wl ~ #1) ID값 0을 가진 global이란 존은 항상 생성되어있다. 솔라리스의 기본 존이다. 여기에 zone1 이라는 존을 생성할 것이다.
/etc/zones/zone1.xml
파일이 생성되었고, zone1이 설정되었음을 알 수 있다.zoneadm -z zone1 halt
명령을 주면 존이 종료되며 installed상태로 돌아간다. halt외에 reboot를 사용할 수도 있다.리눅스 브랜디드 존의 경우 아래와 같이 세팅할 수 있다. 솔라리스 10 기준이며, 솔라리스 11에서는 지원되지 않는다.
root@wl ~ # wget http://www.solanara.net/downloads/centos39.distro 1) root@wl ~ # cp centos39.distro /usr/lib/brand/lx/distros/ root@wl ~ # mkdir CentOSISO root@wl ~ # cd CentOSISO root@wl ~/CentOSISO # wget http://www.solanara.net/downloads/CentOS-3.9-i386-binDVD.iso 2) root@wl ~/CentOSISO # digest -a md5 CentOS-3.9-i386-binDVD.iso 472540be581948a64c7cd052bac0d015 root@wl ~/CentOSISO # cd .. root@wl ~ # mkdir -m 700 /export/lxzone 3) root@wl ~ # zonecfg -z lxzone 4) lxzone: 그런 영역은 구성되지 않음 새 영역 구성을 시작하려면 'create'을(를) 사용하십시오. zonecfg:lxzone> create -t SUNWlx zonecfg:lxzone> set zonepath=/export/lxzone zonecfg:lxzone> set autoboot=true zonecfg:lxzone> add net zonecfg:lxzone:net> set address=192.168.0.30 zonecfg:lxzone:net> set physical=e1000g0 zonecfg:lxzone:net> end zonecfg:lxzone> add capped-memory zonecfg:lxzone:capped-memory> set locked=256m zonecfg:lxzone:capped-memory> end zonecfg:lxzone> exit root@wl ~ # zoneadm list -cv ID NAME STATUS PATH BRAND IP 0 global running / native shared - lxzone configured /export/lxzone lx shared root@wl ~ # zoneadm -z lxzone install -d ~/CentOSISO all 5) Installing distribution 'CentOS 3.9'... Installing cluster 'all' Installing miniroot for zone 'lxzone'. Attempting to locate 31 packages... Installing 31 miniroot packages... Setting up the initial lx brand environment. System configuration modifications complete. Duplicating miniroot; this may take a few minutes... Booting zone miniroot... Miniroot zone setup complete. Performing full install for zone 'lxzone'. Attempting to locate 956 packages... Installing zone 'lxzone' from ISO "/root/CentOSISO/CentOS-3.9-i386-binDVD.iso". Installing 956 packages; this may take several minutes... Completing installation; this may take a few minutes. Setting up the initial lx brand environment. System configuration modifications complete. Installation of CentOS 3.9 to zone 'lxzone' completed 2009년 2월 13일 금요일 오전 11시 39분 21초. Installation of zone 'lxzone' completed successfully. Details saved to log file: "/export/lxzone/root/var/log/lxzone.install.10794.log" root@wl ~ # zoneadm -z lxzone boot 6) root@wl ~ # zlogin -C lxzone 7) [영역 'lxzone' 콘솔에 연결됨] CentOS release 3.9 (Final) Kernel 2.4.21 on an i686 lxzone login: root [root@lxzone root]# uname -a Linux lxzone 2.4.21 BrandZ fake linux i686 i686 i386 GNU/Linux [root@lxzone root]# vi /etc/sysconfig/network 8) NETWORKING=yes HOSTNAME=lxzone [root@lxzone root]# vi /etc/hosts 192.168.0.30 lxzone [root@lxzone root]# reboot1) centos39.distro 파일을 받는다. 솔라리스 10에서는 CentOS 3.9를 정식지원하지 않는다. 필자가 CentOS 3 Release Notes u9를 참고해 직접 만들었다.
root@wl ~/src # wget http://download.virtualbox.org/virtualbox/4.3.10/VirtualBox-4.3.10-93012-SunOS.tar.gz
root@wl ~/src # mkdir VirtualBox
root@wl ~/src # cd VirtualBox
root@wl ~/src/VirtualBox # tar xvfz ../VirtualBox-4.3.10-93012-SunOS.tar.gz
root@wl ~/src/VirtualBox # pkgadd -d VirtualBox-4.3.10-SunOS-amd64-r93012.pkg
The following packages are available:
1 SUNWvbox Oracle VM VirtualBox
(i386) 4.3.10,REV=2014.03.26.20.08.93012
Select package(s) you wish to process (or 'all' to process
all packages). (default: all) [?,??,q]: all
패키지 예 <SUNWvbox>(을)를 </root/src/VirtualBox/VirtualBox-4.3.10-SunOS-amd64-r93012.pkg>에서 처리 중
Oracle VM VirtualBox(i386) 4.3.10,REV=2014.03.26.20.08.93012
Oracle Corporation
## checkinstall 스크립트 실행
Checking package dependencies...
Done.
## 패키지 정보 처리 중
## 시스템 정보 처리 중
## 디스크 공간 요구 검증 중
## 이미 설치되어 있는 패키지와의 충돌 여부를 확인하고 있습니다.
## setuid/setgid 프로그램 점검
다음의 파일은 setuid/setgid 권한과 함께 설치되는 중입니다:
/opt/VirtualBox/amd64/VBoxHeadless <setuid root>
/opt/VirtualBox/amd64/VBoxNetAdpCtl <setuid root>
/opt/VirtualBox/amd64/VBoxNetDHCP <setuid root>
/opt/VirtualBox/amd64/VBoxNetNAT <setuid root>
/opt/VirtualBox/amd64/VBoxSDL <setuid root>
/opt/VirtualBox/amd64/VirtualBox <setuid root>
이 파일들을 setuid/setgid 파일로 설치하겠습니까? [y,n,?,q] y
이 패키지에는 설치 과정 중 수퍼유저 권한으로 실행될 스크립트가
있습니다.
<SUNWvbox>(을)를 계속 설치하겠습니까 [y,n,?] y
Oracle VM VirtualBox(을)를 <SUNWvbox>(으)로 설치
## 1째 (전체: 1) 부분 설치
/etc/hostname.vboxnet0
...
/var/svc/manifest/application/virtualbox/virtualbox-autostart.xml
[ 클래스 <none> 검증 ]
/opt/VirtualBox/VBoxAutostart <연결된 경로 이름>
/opt/VirtualBox/VBoxHeadless <연결된 경로 이름>
/opt/VirtualBox/VBoxISAExec <연결된 경로 이름>
/opt/VirtualBox/VBoxManage <연결된 경로 이름>
/opt/VirtualBox/VBoxSDL <연결된 경로 이름>
/opt/VirtualBox/VBoxSVC <연결된 경로 이름>
/opt/VirtualBox/VBoxTestOGL <연결된 경로 이름>
/opt/VirtualBox/VBoxZoneAccess <연결된 경로 이름>
/opt/VirtualBox/VirtualBox <연결된 경로 이름>
/opt/VirtualBox/vboxwebsrv <연결된 경로 이름>
/opt/VirtualBox/webtest <연결된 경로 이름>
[ 클래스 <manifest> 검증 ]
## 설치 후 스크립트 실행
Checking for older bits...
Installing new ones...
Detected Solaris 10 Version Generic_147441-01
Loading VirtualBox kernel modules...
- Loaded: Host module
- Loaded: NetAdapter module
- Loaded: NetFilter (STREAMS) module
Configuring services...
- Loaded: Zone access service
Installing MIME types and icons...
Installing Python bindings...
- Skipped: Python 2.4 install is unusable
- Installed: Bindings for Python 2.6
Updating the boot archive...
<SUNWvbox>(이)가 성공적으로 설치되었습니다.
root@wl ~/src/VirtualBox # VirtualBox 1)
1) VirtualBox를 실행한다. /opt/VirtualBox/UserManual.pdf 에 매뉴얼이 있다.RSS ATOM XHTML 5 CSS3 |
Copyright © 2004-2025 Jo HoSeok. All rights reserved. |