소개
몇몇 리소스들, 파일 시스템이나 raw 디바이스, 테입 디바이스, IP 주소 같은 리소스들을 글로벌 존에서 논-글로벌 존으로 지정하는 것은 일반적으로 논-글로벌 존의 재부팅을 요구 합니다. 실제 프로덕션 환경에서 불운하지만 리소스의 지정 후에는 재부팅이 필요 하고 그러므로 솔라리스 관리자는 존을 백업하기 전에 데이타베이스 관리자와 백업 관리자의 승낙을 기다려야 합니다. 종종 재부팅의 기회가 주말의 마지막 몇분 밖에 주어지지 않는 경우도 있습니다.
이러한 일을 피하기 위해서, 적어도 파일 시스템과 raw 디바이스의 경우, 존의 설정을 먼저 조정한 다음에 관리 명령을 아래와 같이 제안드리는 순서대로 실행함으로써 가능합니다.
여기서 알려드리는 방법은 오직 파일 시스템의 관리 명령들이 글로벌 존에서 이루어지는 경우에만 적용 됩니다. 이러한 방법은 SPARC 용 솔라리스10의 어떠한 버전에서도 혹은 Sparse Zone 이나 Whole Root Zone 에서도 사용이 가능하지만 x86 버전과 Branded 존에서는 아직 테스트 되지 않았습니다.
여기서 고려되는 파일 시스템의 타입은 UFS, ZFS 그리고 LOFS (Loopback File System) 입니다. ZFS 의 경우 파일 시스템은 반드시 레가시 마운트 포인트로 지정되어야 하는데, 이것은 즉 기본적으로 어떠한 마운트 포인트도 갖지 않는 것을 의미 합니다. raw 디바이스의 경우 솔라리스 볼륨 메니저에 의해 생성된 것들만 고려 됩니다. 그러나 여기서 사용된 개념을 다른 솔라리스 디바이스에서도 이용할 수 있을 것입니다.
파일 시스템
먼저 우리는 파일 시스템과 디렉토리를 글로벌 존에 생성합니다:
# newfs /dev/md/rdsk/d35 # zpool create my_zpool c0t2d0 # zfs create my_zpool/my_zfs # zfs set mountpoint=legacy my_zpool/my_zfs # mkdir /my_lofs
그 다음 my_zone 이라고 불리는 논-글로벌 존을 설정합니다:
# zonecfg -z my_zone zonecfg:my_zone> add fs zonecfg:my_zone:fs> set dir=/my_ufs zonecfg:my_zone:fs> set special=/dev/md/dsk/d35 zonecfg:my_zone:fs> set raw=/dev/md/rdsk/d35 zonecfg:my_zone:fs> set type=ufs zonecfg:my_zone:fs> end zonecfg:my_zone> add fs zonecfg:my_zone:fs> set dir=/my_zfs zonecfg:my_zone:fs> set special=my_zpool/my_zfs zonecfg:my_zone:fs> set type=zfs zonecfg:my_zone:fs> end zonecfg:my_zone> add fs zonecfg:my_zone:fs> set dir=/my_lofs zonecfg:my_zone:fs> set special=/my_lofs zonecfg:my_zone:fs> set type=lofs zonecfg:my_zone:fs> end zonecfg:my_zone> commit zonecfg:my_zone> exit #
부팅시에 논-글로벌 존의 파일 시스템을 마운트 파기 위해 다음의 작업을 수행합니다:
# zoneadm -z my_zone reboot
존의 파일시스템을 마운트 하려면 존이 온라인 상태이여야 합니다. 예를 들어 다음의 경우 /my_zone 이 zone 경로 입니다:
# mkdir /my_zone/root/my_ufs # mkdir /my_zone/root/my_zfs # mkdir /my_zone/root/my_lofs # mount -F ufs /dev/md/dsk/d35 /my_zone/root/my_ufs # mount -F zfs my_zpool/my_zfs /my_zone/root/my_zfs # mount -F lofs /my_lofs /my_zone/root/my_lofs
참고로 마운트 포인트 디렉토리들이 반드시 존에 이미 생성이 되어 있어야 합니다.
이제 논-글로벌 존에서 df 커맨드의 출력값은 다음과 같을 것입니다:
# zlogin -l root my_zone df -h Filesystem size used avail capacity Mounted on / 6.9G 5.5G 1.4G 81% / /dev 6.9G 5.5G 1.4G 81% /dev proc 0K 0K 0K 0% /proc ctfs 0K 0K 0K 0% /system/contract swap 13G 272K 13G 1% /etc/svc/volatile mnttab 0K 0K 0K 0% /etc/mnttab fd 0K 0K 0K 0% /dev/fd swap 13G 16K 13G 1% /tmp swap 13G 32K 13G 1% /var/run /dev/md/dsk/d35 6.9G 5.5G 1.4G 81% /my_ufs my_zpool/my_zfs 7.9G 2.0G 5.8G 27% /my_zfs /my_lofs 22G 15G 6,1G 72% /my_lofs
글로벌 존에서 동일한 병력의 출력 결과는 좀 다를 것입니다:
# df -h
Filesystem size used avail capacity Mounted on
/dev/md/dsk/d0 22G 15G 6,1G 72% /
/devices 0K 0K 0K 0% /devices
ctfs 0K 0K 0K 0% /system/contract
proc 0K 0K 0K 0% /proc
mnttab 0K 0K 0K 0% /etc/mnttab
swap 13G 1,1M 13G 1% /etc/svc/volatile
objfs 0K 0K 0K 0% /system/object
/platform/sun4u-us3/lib/libc_psr/libc_psr_hwcap1.so.1
22G 15G 6,1G 72%
/platform/sun4u-us3/lib/libc_psr.so.1
/platform/sun4u-us3/lib/sparcv9/libc_psr/libc_psr_hwcap1.so.1
22G 15G 6,1G 72%
/platform/sun4u-us3/lib/sparcv9/libc_psr.so.1
fd 0K 0K 0K 0% /dev/fd
swap 13G 19M 13G 1% /tmp
swap 13G 80K 13G 1% /var/run
/dev/md/dsk/d3 20G 6.8G 13G 35% /my_zone
/dev/md/dsk/d35 6.9G 5.5G 1.4G 81% /my_zone/root/my_ufs
my_zpool/my_zfs 7.9G 2.0G 5.8G 27% /my_zone/root/my_zfs
대신 my_zone 의 마운트 커맨드는 다음과 같이 나타날 것입니다. 글로벌 존, 논-글로벌 존 모두 출력되고 결과의 일부를 생략하였습니다:
# zlogin -l root my_zone mount | awk '{print $1, $2, $3, $4}'
/ on / read/write/setuid/devices/intr/largefiles/logging/xattr/
onerror=panic/dev=154001f
/dev on /dev read/write/setuid/devices/zonedevfs/dev=4e0000e
/proc on proc read/write/setuid/nodevices/zone=identity/dev=4bc000f
/system/contract on ctfs read/write/setuid/nodevices/zone=identity/
dev=4b8000f
/etc/svc/volatile on swap read/write/setuid/nodevices/xattr/zone=
identity/dev=4c4002b
/etc/mnttab on mnttab read/write/setuid/nodevices/zone=identity/
dev=4c0000f
/dev/fd on fd read/write/setuid/nodevices/zone=identity/dev=4e4000f
/tmp on swap read/write/setuid/nodevices/xattr/zone=identity/dev=
4c4002c
/var/run on swap read/write/setuid/nodevices/xattr/zone=identity/
dev=4c4002d
/my_ufs on /my_ufs read/write/setuid/devices/intr/largefiles/logging/
xattr/onerror=panic/dev=1540048
/my_zfs on my_zpool/my_zfs read/write/setuid/devices/exec/xattr/
atime/dev=401000b
/my_lofs on /my_lofs read/write/setuid/devices/dev=1540000
#
# mount | grep my_zone | awk '{print $1, $2, $3, $4}'
/my_zone/root/dev on /my_zone/dev read/write/setuid/devices/
zonedevfs/dev=4e0000e
/my_zone/root/proc on proc read/write/setuid/nodevices/zone=
identity/dev=4bc000f
/my_zone/root/system/contract on ctfs read/write/setuid/nodevices/
zone=identity/dev=4b8000f
/my_zone/root/etc/svc/volatile on swap read/write/setuid/nodevices/
xattr/zone=identity/dev=4c4002b
/my_zone/root/etc/mnttab on mnttab read/write/setuid/nodevices/
zone=identity/dev=4c0000f
/my_zone/root/dev/fd on fd read/write/setuid/nodevices/zone=
identity/dev=4e4000f
/my_zone/root/tmp on swap read/write/setuid/nodevices/xattr/
zone=identity/dev=4c4002c
/my_zone/root/var/run on swap read/write/setuid/nodevices/
xattr/zone=identity/dev=4c4002d
/my_zone/root/my_ufs on /dev/md/dsk/d35 read/write/setuid/
devices/intr/largefiles/logging/xattr/onerror=panic/dev=1540048
/my_zone/root/my_zfs on my_zpool/my_zfs read/write/setuid/devices
/exec/xattr/atime/dev=401000b
/my_zone/root/my_lofs on /my_lofs read/write/setuid/devices/
dev=1540000
논-글로벌 존의 파일 시스템을 재부팅 없이 언마운트 할 수 있습니다:
# umount /my_zone/root/my_ufs # umount /my_zone/root/my_zfs # umount /my_zone/root/my_lofs
기억해 둘 점으로 LOFS 는 글로벌 존의 어떠한 디렉토리도 참고할 수 있고 동시에 여러 존에 의해서도 공유 될 수 있습니다. 즉 만약 우리가 LOFS 마운트된 논-글로벌 존을 가지고 있고 새로운 파일 시스템을 글로벌존의 기본 디렉토리로 마운트 한다고 했을때 새로운 파일 시스템은 LOFS 마운트 포인트에 따라서 모든 존에서 접근이 가능합니다.
특별한 경우가 바로 /cdrom 디렉토리 입니다. 예를 들어 우리는 이 디렉토리를 논-글로벌 존에서 읽기 전용의 LOFS 로 마운트 할 수 있습니다:
# mkdir /my_zone/root/cdrom # mount -F lofs -o ro /cdrom /my_zone/root/cdrom
그 다음 우리는 DVD 에 미디어를 집어 넣고 이것을 글로벌 존의 vold 를 이용해서 /cdrom/cdrom0 에 마운트 할 수 있습니다. 이 미디어의 내용은 my_zone 에서도 확인이 가능할 것입니다.
이것은 이후에 네이티브 마운트 포인트를 덮어 쓰기 위해 파일 시스템을 논-글로벌 존으로 마운트할때에 유용할 것입니다. 예를 들어 존의 /tmp 디렉토리가 swap 공간 바깥에 위치해서 재부팅 후에도 보존하길 원한다고 생각해 봅시다. 이러한 경우 우리는 본래 존의 tmpfs 파일 시스템을 아무도 사용하지 않을 경우 언마운트 할 수도 있지만 그 내부의 내용은 모두 지워 진다는 것을 알게 됩니다. 이때 우리는 좀 더 장기간 쓸 수 있는 파일 시스템을 /my_zone/root/tmp 에 마운트 시킬 수 있을 것입니다:
# umount /my_zone/root/tmp # cp /my_zone/root/etc/vfstab /my_zone/root/etc/vfstab.ori # sed '/tmpfs/s/swap/#swap/' /my_zone/root/etc/vfstab.ori > \ /my_zone/root/etc/vfstab # cat > tmpconfig.txt << EOF add fs set dir=/tmp set special=/dev/md/dsk/d36 set raw=/dev/md/rdsk/d36 set type=ufs end EOF # zonecfg -z my_zone -f tmpconfig.txt # mount -F ufs /dev/md/dsk/d36 /identity/root/tmp # chmod 1777 /my_zone/root/tmp
최근에 한 작업을 재부팅 없이 되돌리기 위해서는 다음과 같은 작업을 수행 합니다:
# umount /my_zone/root/tmp # mv /my_zone/root/etc/vfstab.ori /my_zone/root/etc/vfstab # zonecfg -z my_zone remove fs dir=/tmp # mount -F tmpfs swap /identity/root/tmp
만약 여러분의 존의 /var 디렉토리를 / 에 위치한 것 과 다른 파일 시스템을 이용하고 싶다면 이 것은 존을 설치 하기 존에(존의 초기 설정을 포함해서) /my_zone/root/var 에 마운트 되어 있어야 합니다. 추가적으로 만약 존이 이미 설치 되었다면 우리는 이것을 중단시키고 /var 디렉토리의 컨텐츠를 새로운 파일로 이동시키고 존을 다시 한번 부팅 시키기 전에 새로운 파일 시스템을 존의 /var 로 마운트 할 수 있습니다. 이러한 마이그레이션 작업은 논-글로벌 존의 재부팅 없이는 불가능합니다.
이 시점에서 존의 autoboot 파라미터를 결정 하는 것이 중요합니다. 왜냐하면 모든 서버들의 파일 시스템들은 반드시 존이 부팅 하기 전에 사용이 가능해야 하기 때문입니다. 존은 항상 svc:/system/zones 서비스가 초기화 되기 전에 부팅 됩니다. 글로벌 존에서 파일 시스템이 나중에 마운트 되기도 합니다, 왜냐하면 그 파일 시스템들이 다른 리소스에 의존성이 있기도 하고, 종종 논-글로벌 존에서 LOFS 형태로 마운트되어야 하기도 할 것입니다. 이러한 경우에 우리는 존의 autoboot 파라미터를 false 로 지정하고 존을 레가시 스크립트를 이용해서 부팅함으로써 존을 특정 파일을 테스트 한 후, 예를 들어 /mounted_path/flag_file 같은, 특정 조건을 테스트 한 후에 존의 부팅을 결정할 수 있습니다:
cat >> /etc/rc3.d/S99zones << EOF [ -f /mounted_path/flag_file ] && zoneadm -z my_zone boot EOF chmod 744 /etc/rc3.d/S99zones chown root:sys /etc/rc3.d/S99zones echo 'zoneadm -z my_zone halt' >> /etc/rc0.d/K01zones chmod 744 /etc/rc0.d/K01zones chown root:sys /etc/rc0.d/K01zones
Raw 디바이스
새로운 raw 디바이스 /dev/md/rdsk/d321 를 논-글로벌 존에 추가 하기 위해서 다음과 같은 작업을 수행합니다:
# zonecfg -z my_zone zonecfg:my_zone> add device zonecfg:my_zone:device> set match=/dev/md/rdsk/d321 zonecfg:my_zone:device> end zonecfg:my_zone> commit zonecfg:my_zone> exit #
이후에 변경 사항을 유효화 하기 위해 우리는 존을 재부팅 해야 합니다:
# zoneadm -z my_zone reboot
이제 만약 우리가 새로운 raw 디바이 /dev/md/rdsk/d322 를 동일한 존에 지정하려고 한다면 우리는 반드시 동일한 절차를 거쳐서 존을 재부팅 해야 합니다. 이것을 방지 하기 위해서는 정규 표현식을 이용해서 초기에 디바이스들을 서로 매칭 시키는 것입니다. 이것은 테잎 디바이스를 설정하는 것과 비슷합니다:
# cat > tapeconfig.txt << EOF add device set match=/dev/rmt/1* end EOF # zonecfg -z my_zone -f tapeconfig.txt
이러한 설정은 각 디바이스의 배치를 /dev/rmt/1 에서 /dev/rmt/1n, /dev/rmt/1bc 형태로 매칭 시키도록 강제합니다:
# zlogin -l root my_zone ls /dev/rmt 1 1bn 1cb 1cn 1hb 1hn 1lb 1ln 1mb 1mn 1u 1ubn 1b 1c 1cbn 1h 1hbn 1l 1lbn 1m 1mbn 1n 1ub 1un
이 기능을 이용해서 우리는 수십 수천 가지의 raw 디바이스를 하나의 라인에 매칭 시킬 수 있습니다:
# cat > rawconfig.txt << EOF add device set match=/dev/md/rdsk/d3* end EOF # zonecfg -z my_zone -f rawconfig.txt
그러나 우리는 raw 디바이스를 d301 부터 순서대로 d320 까지만 매칭 시키길 원할 수도 있습니다. 이러한 경우 d3 이나 d35 같은 디바이스를 매칭 시키는 것이 위험할 수도 있습니다. 왜냐하면 다른 존에 의해 사용 될 수 있고 특히 글로 벌 존에 의해서 사용될 수도 있는데 왜냐하면 my_zone 에 권한을 가진 사용자가 이러한 디바이스에 실수로 쓰기 작업을 할 수도 있기 때문입니다.
# ls /my_zone/root/dev/md/rdsk d3 d302 d304 d306 d308 d310 d312 d314 d316 d318 d320 d301 d303 d305 d307 d309 d311 d313 d315 d317 d319
또다른 잘못된 접근으로는 /dev/rdsk/c0t2d0s* 같은 잘못된 표현을 사용해서 모든 디스크 슬라이스를 매치시키는 경우 입니다, c0t2d0s2 는 전체 디스크를 의미 하기 때문입니다. 사실 금지된 디바이스에 쓰기 작업을 하는 것은 거의 잘 일어 나지는 않을 것입니다 그러나 현명한 관리자라면 메인 디바이스를 논-글로벌 존에 노출 시키지는 않을 것입니다.
이러한 상황을 방지 하기 위해 우리는 raw 디바이스를 아래와 같은 방법으로 논-글로벌 존에 지정할 수 있습니다:
# cat > rawconfig.txt << EOF add device set match=/dev/md/rdsk/d3?? end EOF # zonecfg -z my_zone -f rawconfig.txt
이 방법은 raw 디바이스 d300 부터 d399 사이의 모든 새로운 raw 디바이스를 존에 올려 줍니다. 그러나 d3 혹은 d35 는 매치 시키지 않을 것입니다. 적절한 해결 방법은 소프트 파티션으로 이루어진 수백개의 서로 다른 그룹을 존에 지정하여 중복을 방지 하는 것입니다.
두번째이자 가장 흥미로운 장점은 우리는 새로운 소프트 파티션을 글로벌 존에서 매칭 범위 안에서 만들 수 있다는 것이고 이것은 논-글로벌 존을 재부팅 하지 않아도 자동으로 온라인 상태로 될 것입니다. 예를 들어 d301 부터 d320 까지 20 개의 raw 디바이스를 /dev/md/rdsk/d3?? 로 매칭 시킨 존이 있다고 했을때:
# ls /my_zone/root/dev/md/rdsk d301 d303 d305 d307 d309 d311 d313 d315 d317 d319 d302 d304 d306 d308 d310 d312 d314 d316 d318 d320
여기서 우리는 새로운 소프트 파티션을 매칭 범위 안에서 생성할 것이고 이것은 논-글로벌 존에서 즉시 나타날 것입니다:
# metainit d321 -p /dev/rdsk/c0t2d0s0 5g # ls /my_zone/root/dev/md/rdsk d301 d303 d305 d307 d309 d311 d313 d315 d317 d319 d321 d302 d304 d306 d308 d310 d312 d314 d316 d318 d320
우리가 두개의 디스크 슬라이스를 d300 으로 합치고 새로운 소프트 파티션 d322 을 그 안에 만들었다고 하면, 물론 이 것은 권장 되는 방법은 아니지만, 다음과 같은 결과를 보게 될 것입니다.
# metainit d300 2 1 /dev/rdsk/c0t2d0s6 1 /dev/rdsk/c1t2d0s6 # metainit d322 -p d300 5g # ls /my_zone/root/dev/md/rdsk d300 d302 d304 d306 d308 d310 d312 d314 d316 d318 d320 d322 d301 d303 d305 d307 d309 d311 d313 d315 d317 d319 d321
디바이스 d300 은 이제 논-글로벌 존에서 사용 가능 합니다. 우리는 존의 유저들이 그것에 접근 하는 것을 막아야 합니다.
<논 글로벌 존의 code class="small"> /dev 디렉토리 는 zonedevfs 라고 불리는 특별한 옵션으로 부팅시에 /my_zone/dev 에 마운트 되는 LOFS 파일 시스템 입니다. 솔라리스10은 /my_zone/dev 디렉토리에 각각의 매칭 디바이스를 위해서 하나의 새로운 스페셜 파일 을 생성합니다:
# file /my_zone/dev/md/rdsk/d300 /my_zone/dev/md/rdsk/d300: character special (85/300) # ls -l /my_zone/dev/md/rdsk | head -6 total 0 crw-r----- 1 root sys 85, 300 Mar 4 10:39 d300 crw-r----- 1 root sys 85, 301 Mar 4 10:13 d301 crw-r----- 1 root sys 85, 302 Mar 4 10:13 d302 crw-r----- 1 root sys 85, 303 Mar 4 10:13 d303 crw-r----- 1 root sys 85, 304 Mar 4 10:13 d304
이러한 파일들은 글로벌 존의 /device 디렉토리에 위치한 파일들을 가르키는 심볼릭 링크들은 아닙니다. 그러나 분리해서 관리되어 져야 합니다. 논-글로벌 존에 권한이 부여된 유저들은 이러한 파일들의 권한을 /dev 디렉토리 내에서 변경 할 수 있으나 삭제할 수는 없습니다. 그러나 우리는 존의 디바이스를 글로벌 존에서 삭제할 수 있습니다:
# rm /my_zone/dev/md/rdsk/d300
비록 우리가 온라인 존의 디바이스를 이러한 방법으로 제거 할 수 있다고 하더라도, 다음 재부팅 시에는 다시 동일하게 나타날 것입니다. 가장 문제가 없고 적절한 솔루션은 빈 파일들을 본래 파일을 대신해서 만드는 것입니다:
# touch /my_zone/dev/md/rdsk/d300 # zlogin -l root my_zone "file /dev/md/rdsk/d300" /dev/md/rdsk/d300: empty file # zlogin -l root my_zone "ls -l /dev/md/rdsk" | head -6 total 0 -rw-r--r-- 1 root root 0 Mar 4 12:05 d300 crw-r----- 1 root sys 85, 301 Mar 4 10:13 d301 crw-r----- 1 root sys 85, 302 Mar 4 10:13 d302 crw-r----- 1 root sys 85, 303 Mar 4 10:13 d303 crw-r----- 1 root sys 85, 304 Mar 4 10:13 d304
새로운 빈 파일들은 논-글로벌 존의 유저에 의해 변경될 수 없고 재부팅 이후에도 그대로 남아 있을 것입니다.
다시 말해서 우리는 존에서 raw 디바이스를 더이상 필요로 하지 않고, 어디에서나 지울 수 있을 것입니다:
# metaclear d322 # rm /my_zone/dev/md/rdsk/d322 # metaclear d300 # rm /my_zone/dev/md/rdsk/d300
존의 설정을 변경하지 않고 또한 존이 재부팅될 필요도 없습니다.
마지막으로 위에서 언급한 모든 예제들을 실습하기 위해서 일반적인 존의 설정은 다음과 같아야 합니다:
# zonecfg -z my_zone info
zonepath: /my_zone
autoboot: true
pool:
fs:
dir: /my_ufs
special: /dev/md/dsk/d35
raw: /dev/md/rdsk/d35
type: ufs
options: []
fs:
dir: /my_zfs
special: my_zpool/my_zfs
raw not specified
type: zfs
options: []
fs:
dir: /my_lofs
special: /my_lofs
raw not specified
type: lofs
options: []
fs:
dir: /cdrom
special: /cdrom
raw not specified
type: lofs
options: [ro]
net:
address: 192.168.0.35/24
physical: bge0
device
match: /dev/rmt/1*
device
match: /dev/md/rdsk/d3??
#
이 글의 영문 원본은
Assigning System Resources to Solaris 10 Zones Without Reboot
에서 보실 수 있습니다."관리자코너" 카테고리의 다른 글
- 썬 버추얼 데스크탑 커넥터 1.0(베타)을 사용한 VDI 데모 구축 (댓글 0개 / 트랙백 0개) 2008/01/23
- 솔라리스 부트 매니저를 이용한 부트 디스크 미러링 방법 (댓글 1개 / 트랙백 0개) 2005/09/23
- 솔라리스 10 5/08 릴리스의 새로운 기능 (댓글 0개 / 트랙백 0개) 2008/06/11
- Solaris 10의 컨테이너를 이용하여 보안을 향상시키는 방법 - Part 1 of 2 (댓글 1개 / 트랙백 0개) 2005/10/23
- 설정 파일 관리 베스트 프랙티스 (댓글 0개 / 트랙백 0개) 2008/05/19
- The Zone Manager 스크립트 (댓글 1개 / 트랙백 0개) 2005/11/23
- 스크립트를 이용한 자동화된 시스템 체크 (댓글 0개 / 트랙백 0개) 2008/06/16
- 플래시 어카이브로 부터 솔라리스10 Branded 존 설치하기 (댓글 0개 / 트랙백 0개) 2008/08/19
- xVM DomU 지원을 솔라리스 라이브CD 배포판에 추가하기 (댓글 0개 / 트랙백 0개) 2008/12/05
- 솔라리스 레디 애플리케이션 및 솔루션 (댓글 0개 / 트랙백 0개) 2008/03/13
댓글을 달아 주세요