WindyHana's Solanara: 가상화

목차

가상화(Virtualization)란?

가상화란 컴퓨팅 리소스의 추상화를 통해 다수의 운영 체제 또는 애플리케이션 이미지가 하나의 물리적 서버를 공유하도록 함으로써 총소유비용을 극적으로 절감하고 관리성을 개선할 수 있게 하는 프로세스를 말한다.
위 내용은 오라클의 Virtualization Technology Center에 나와있다. (내가 찾은것 중에서 가상화를 가장 잘 표현한 말이라 생각한다) 쉽게 말하면 [시스템 자원 추상화]이고 이를 통해 [비용 절감]을 목적으로 한다.

가상화 분류

구현에 의한 분류

※ 어떻게 가상화를 구현했느냐에 따라 아래와 같이 나누어진다. (아래의 내용중 일부는 위키피디아의 Vitualization에서 가져왔다. 위키피디아의 내용은 현재 수정된 상태다)

전가상화, 반가상화

※ 전가상화와 반가상화의 중요한 차이는 하이퍼 바이저, OS, 하드웨어의 관계이다.
※ 솔라리스 10 최신 업데이트는 아래와 같이 지원한다. Sun xVM은 Xen기반이기 때문에 Xen이 지원하는 가상화 방법을 모두 지원한다.

하이퍼바이저(Hypervisor)란?

※ 하이퍼바이저는 호스트컴퓨터와 게스트 OS를 연결해주는 가상화 플랫폼이다. 크게 Type 1과 Type 2로 나뉜다.
※ Type 1 하이퍼바이저는 부팅 가능하다는 것에서 OS와 비슷하지만 OS는 아니다. OS의 필수기능중 몇가지가 빠져있기 때문이다. 어플리케이션을 실행할 수 없다. (좀 더 복잡한 바이오스 정도로 보는것이 좋을지도 모르겠다)

계통도

                    ┌──┐
                    │VM│
                    └─┬┘
              ┌───────┴───────┐

            시스템가상화          프로세스가상화

        ┌─────┴─────┐     ┌───┴───┐
                          │       │
      HW가상화      HW에뮬레이션  │       │
                  에뮬레이터
   ┌───┴───┐            다중시스템   동적변환기

Type 1   Type 2     ┌─────┬─┘   ┌───┼───┐
        VirtualBox
 ┌─┴─┐          멀티태스크  OS변환  ISA&ABI ISA&OS Language
                                      Java
반가상화 전가상화         │
 xVM
     ┌─┴─┐      OS가상화
                 Zone
   H/W지원 바이너리변환
    xVM

Solaris Containers (Zones)

Zones

※ Zone의 상태 차트. [존을 생성후 인스톨 하고, 준비한 다음 부팅하면 존이 실행된다]라고 이해하면 된다. 각각의 과정을 모두 거쳐야 한다.
┌───────┐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 이라는 존을 생성할 것이다.
2) zone1을 생성하기 위한 디렉토리를 미리 만들어놓는다. 반드시 권한을 700으로 해야한다.
3) zone1의 설정 파일을 생성한다. [add net]뒤의 내용은 각자의 환경에 맞게 수정해야 한다.
4) /etc/zones/zone1.xml 파일이 생성되었고, zone1이 설정되었음을 알 수 있다.
5) install 명령은 한참 걸리기도 하고 시스템에 디스크 부하를 많이 준다.
6) zone1을 ready상태로 전환한다.
7) zone1을 boot상태로 전환한다. ready상태가 아니고 installed상태라면 자동으로 ready로 전환후 boot상태로 다시 전환한다.
8) 로그인은 zlogin 프로그램을 이용한다. -C 옵션을 이용하면 '콘솔'에 로그인하는 것과 같아진다. -C 를 사용하면 다른 화면을 보게될 것이며 권한도 다르다. 콘솔에서 접속을 해제하려면 로그오프 한후 ~. 을 입력한다.
9) zone1에 로그인한 후에 halt명령을 수행하거나, 존에서 나온후 [zoneadm -z zone1 halt]명령을 주면 존이 종료되며 installed상태로 돌아간다. halt외에 reboot를 사용할 수도 있다.
10 언인스톨 한다.
11) 설정 파일을 삭제한다.

Branded Zones

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://ftp2.riken.jp/Linux/centos/3.9/isos/i386/CentOS-3.9-i386-binDVD.iso 2)
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]# reboot
1) centos39.distro 파일을 받는다. 솔라리스 10에서는 CentOS 3.9를 정식지원하지 않는다. 필자가 직접 만들었다.
2) CentOS 3.9의 DVD이미지를 받는다.
3) lxzone 디렉토리를 만들어 놓는다. 존 파일은 여기에 생성할 것이다.
4) lxzone 을 설정한다. 생성시 create -t SUNWlx 명령을 준다는 것이 다르다.
5) BRAND가 lx라는것이 다르다. 인스톨시 CentOS패키지가 있는 tar.bz2파일의 위치를 -d 옵션을 이용해 넣어준다. 만약 CentOS 3.8의 ISO 파일들이 /root/CentOSISO 에 있다면 [zoneadm -z lxzone install -d /root/CentOSISO all] 처럼 실행시켜도 된다. tar파일보다는 오래 걸리지만 CentOS가 더 최신 버전인듯 하다. 필자는 이렇게 사용한다.
6) 존의 설치가 끝나면 존을 부팅시킨다.
7) 존의 콘솔에 연결하면 내용을 확인해볼 수 있다.
8) 네트워크를 활성화한 한다. network 파일을 수정하고 재시작 해주어야 한다.(존을 재시작 한다) hosts파일도 수정해야 한다.

SUN xVM

Oracle VM VirtualBox

root@wl ~ # wget http://download.virtualbox.org/virtualbox/3.2.0/VirtualBox-3.2.0-61806-SunOS.tar.gz
root@wl ~ # mkdir VirtualBox
root@wl ~ # cd VirtualBox
root@wl ~/VirtualBox # tar xvfz ../VirtualBox-3.2.0-61806-SunOS.tar.gz
root@wl ~/VirtualBox # pkgadd -d VirtualBox-3.2.0-SunOS-r61806.pkg

The following packages are available:
  1  SUNWvbox     Oracle VM VirtualBox
                  (i386) 3.2.0,REV=2010.05.18.20.24.61806

Select package(s) you wish to process (or 'all' to process
all packages). (default: all) [?,??,q]:

패키지 예 <SUNWvbox>(을)를 </root/VirtualBox-3.2.0-SunOS-r61806.pkg>에서 처리 중

Oracle VM VirtualBox(i386) 3.2.0,REV=2010.05.18.20.24.61806
VirtualBox Personal Use and Evaluation License (PUEL)

...

다음의 파일은 setuid/setgid 권한과 함께 설치되는 중입니다:
  /opt/VirtualBox/amd64/VBoxBFE <setuid root>
  /opt/VirtualBox/amd64/VBoxHeadless <setuid root>
  /opt/VirtualBox/amd64/VBoxNetAdpCtl <setuid root>
  /opt/VirtualBox/amd64/VBoxNetDHCP <setuid root>
  /opt/VirtualBox/amd64/VBoxSDL <setuid root>
  /opt/VirtualBox/amd64/VirtualBox <setuid root>
  /opt/VirtualBox/i386/VBoxBFE <setuid root>
  /opt/VirtualBox/i386/VBoxHeadless <setuid root>
  /opt/VirtualBox/i386/VBoxNetAdpCtl <setuid root>
  /opt/VirtualBox/i386/VBoxNetDHCP <setuid root>
  /opt/VirtualBox/i386/VBoxSDL <setuid root>
  /opt/VirtualBox/i386/VirtualBox <setuid root>

이 파일들을 setuid/setgid 파일로 설치하겠습니까? [y,n,?,q] y

이 패키지에는 설치 과정 중 수퍼유저 권한으로 실행될 스크립트가
있습니다.

<SUNWvbox>(을)를 계속 설치하겠습니까 [y,n,?] y

Oracle VM VirtualBox(을)를 <SUNWvbox>(으)로 설치

## 1째 (전체: 1) 부분 설치
/etc/hostname.vboxnet0
/opt/VirtualBox/64/VBoxPython.so
...
/opt/VirtualBox/vboxshell.py
/platform/i86pc/kernel/drv/amd64/vboxdrv
...
/platform/i86pc/kernel/drv/vboxusbmon.conf
/usr/bin/VBoxHeadless <심볼릭 링크>
/usr/bin/VBoxManage <심볼릭 링크>
/usr/bin/VBoxQtconfig <심볼릭 링크>
/usr/bin/VBoxSDL <심볼릭 링크>
/usr/bin/VirtualBox <심볼릭 링크>
/usr/share/applications/virtualbox.desktop
/usr/share/pixmaps/VBox.png
/var/svc/manifest/application/virtualbox/virtualbox-webservice.xml
/var/svc/manifest/application/virtualbox/virtualbox-zoneaccess.xml
[ 클래스 <none> 검증 ]
/opt/VirtualBox/VBoxBFE <연결된 경로 이름>
/opt/VirtualBox/VBoxISAExec <연결된 경로 이름>
/opt/VirtualBox/VBoxManage <연결된 경로 이름>
/opt/VirtualBox/VBoxSDL <연결된 경로 이름>
/opt/VirtualBox/VBoxTestOGL <연결된 경로 이름>
/opt/VirtualBox/VBoxZoneAccess <연결된 경로 이름>
/opt/VirtualBox/VirtualBox <연결된 경로 이름>
/opt/VirtualBox/vboxwebsrv <연결된 경로 이름>
/opt/VirtualBox/webtest <연결된 경로 이름>
## 설치 후 스크립트 실행
Checking for older bits...
Installing new ones...
Loading VirtualBox kernel modules...
   - Loaded: Host module
   - Loaded: NetAdapter module
   - Loaded: NetFilter module
Configuring services...
   - Loaded: Web service
   - Loaded: Zone access service
Installing Python bindings...
   - Installed: Bindings for Python 2.4
Updating the boot archive...

<SUNWvbox>(이)가 성공적으로 설치되었습니다.

root@wl ~/VirtualBox # VirtualBox 1)
1) VirtualBox를 실행한다. /opt/VirtualBox/UserManual.pdf 에 매뉴얼이 있다.

Sun Logical Domains

  1. Logical Domains (LDoms)
  2. sun4v(SUN Ultra Sparc T1 CPU 이상을 사용한 시스템, 정확하게는 썬의 CoolThreads 기술이 적용된 CPU를 사용하는 시스템), Solaris 10 u4 이후 부터 지원되는 가상화 방식이다
  3. 솔라리스 10이 설치된 상태에서 Oracle VM Server for SPARC (Logical Domains) 1.3을 받아 설치하면 된다고 한다.
  4. 해보지 않은 관계로 더이상 언급하는 건 무리다. ^O^
Twitter RSS IconTexto 올바른 XHTML 1.0 Transitional 입니다 올바른 CSS입니다!