공룡호가 사는 세상 이야기

수많은 벤더에서, 시스템과 FC/SCSI카드, LTO 등을 만들고 있으며, 이를 사용하게 하는 백업 S/W또한 다양하다.
그만큼 이 장치들간의 접속/호환/운영에 많은 문제점들이 있는데, 작업 순서는 일반적으로 아래와 같다.

1. 서버에 FC/SCSI카드 장착
2. LTO와 물리적으로 연결
3. 서버에서 Drive 및 Changer(Robot) 인식
4. 백업 소프트웨어 설치 및 백업 스케줄링, 백업 실시

여기서, 3번에 주목하자.
Drive는 Tape를 읽어, 실제로 I/O를 일어나게 한다. 여기에서 Drive에 Tape을 자동으로 삽입하게 하는 Robot을 Changer라 하는데,
이 Changer의 인식이 OS에서 불가한 몇몇 장비들이 존재한다. 아니, 일반적으로 Drive만 OS에서 인식하고, Changer는 백업 소프트웨어를 설치하면 Changer를 인식한다.

Drive는 대부분 /dev/rmt 에 device가 생성이 되나, Changer가 여기에 생성되지 않는 장비들이 있다.
퀀X, 오버XX 등의 장비들이 이에 속하는데, 그 이유는 이들이 기본 인터페이스로 SCSI 인터페이스를 가지고 있기 때문이다.
대부분 LTO의 drive module은 st module을 사용하는데, 이러한 장비들은 sgen 이라 하는 모듈을 사용한다.

#modinfo |grep sgen
결과에 아무런 정보가 출력되지 않는다면, sgen driver가 load되지 않은 것이다.

sgen driver를 load한다.
#modload /kernel/drv/sparcv9/sgen

확인한다.
#modinfo |grep sgen
254 7b7e6000   3d90 151   1  sgen (SCSI generic driver 1.11)

/kernel/drv/sgen.conf 파일 내부에 changer에 해당하는 부분을 기술한다.
device-type-config-list="changer";

그 후, 해당 Changer의 target number와 lun number를 /kernel/drv/sgen.conf 파일 내부에 기술한다.
name="sgen" class="scsi" target=0 lun=0;
name="sgen" class="scsi" target=0 lun=1;
name="sgen" class="scsi" target=1 lun=0;
name="sgen" class="scsi" target=1 lun=1;

Changer를 인식시킨다
#touch /reconfigure
#shutdown -g0 -i6 -y
또는,
#update_drv -f sgen

인식 확인은 다음과 같이 한다.
#ls /dev/scsi/changer
(changer는 cxtxdx 명으로 인식된다.)

이후, 백업 소프트웨를 설치하여 해당 Changer(Robot)을 컨트롤 하는 테스트와 함께 백업 테스트를 실시해 본다.

협력사 대상으로 솔라리스 Jumpstart 구성 방법을 강의하고, 필요한 내용을 요약 해 둔다.
강의 내용은 자사 플랫폼만을 대상으로 하였으나, 일부 범용적으로도 사용할 수 있도록 수정.
아래 예제는 서버 1대에 클라이언트 1대를 대상으로 함.

1. 인스톨서버에 디렉토리 작성 후 CD로 부터 OS Image 생성
# mkdir -p /export/install/Sol10
# cd /cdrom/cdrom0/s0/Solaris_10/Tools
# ./setup_install_server /export/install/Sol10
(시간이 꽤 걸림) <- 여기서 생성된 /export/install/Sol10 디렉토리 내용을 iso로 묶어 두면, 재사용 가능

2. 미니루트 작업용 디렉토리 작성 후 복사, unpack중 에러발생할 경우, 가볍게 무시
# mkdir /tmp/work
# /boot/solaris/bin/root_archive unpackmedia /export/install/Sol10 /tmp/work
# rm /tmp/work/tmp/AdDrEm.lck

3. 드라이버 설치
Jumpstart는 네트웍을 통해 설치를 하므로, 해당 네트웍 인터페이스에 대한 드라이버가 없다면, 해당 드라이버를 설치한다.
아래 드라이버는 Fujitsu용 Giga-Ethernet 드라이버와 Ultra-SCSI 드라이버 설치과정이다.

3.1. 미니루트에 FJSVgid 설치
# cd /cdrom/cdrom0/FJSVgid_4.0/10
# pkgadd -R /tmp/work -d . FJSVgid.u
# pkgadd -R /tmp/work -d . FJSVgid.v

3.2. 미니루트에 Ultra SCSI 설치
# cd /cdrom/cdrom0/ultra_lvd_driver/10
# pkgadd -R /tmp/work -d . FJSVulsa.u
# pkgadd -R /tmp/work -d . FJSVulsa.v
# patchadd -C /tmp/work 914572-01(?) - 그냥 들어있는 패치하면 됨

4. 미니루트를 재포장 후 적용
# mkdir -p /tmp/media/Solaris_10
# /boot/solaris/bin/root_archive packmedia /tmp/media /tmp/work
# cd /tmp/media
# find boot Solaris_10/Tools/Boot | cpio -pdum /export/install/Sol10
# df -k 확인
# umount -f /dev/lofi/1
# lofiadm -d /dev/lofi/1

5. 커스텀 jumpstart 디렉토리 작성, 드라이버, 샘플 복사
# mkdir /jumpstart
# echo "share -F nfs -o ro,anon=0 /jumpstart" >> /etc/dfs/dfstab
# shareall

(Giga-Ethernet)
# mkdir /jumpstart/fjgi
# cp -p /cdrom/cdrom0/install_v4 /jumpstart/fjgi/.
# cp -p /cdrom/cdrom0/admin /jumpstart/fjgi/.
# cp -pr /cdrom/cdrom0/FJSVgid_4.0/10/* /jumpstart/fjgi/.
(Ultra-SCSI)
# mkdir /jumpstart/fjulsa
# cp -p /cdrom/cdrom0/install /jumpstart/fjulsa/.
# cp -p /cdrom/cdrom0/admin /jumpstart/fjulsa/.
# cp -pr /cdrom/cdrom0/ultra_lvd_driver/10/* /jumpstart/fjulsa/.

# cp -r /export/install/Sol10/Solaris_10/Misc/jumpstart_sample/* /jumpstart

6. nfs서버 가동중 확인, disable이면 enable
# svcs -av | grep nfs
# svcadm enable (기동시킬 서비스)

7. profile 작성 (설치 기본정보를 기록한다-아래 형식에 주의)
# vi /jumpstart/profile
 install_type initial_install
 system_type server
 partitioning explicit
 cluster SUNWCXall
 filesys c0t0d0s0 51200 /
 filesys c0t0d0s1 24576 swap
 geo             Asia
 locale          ko

8. finish 작성
# vi /jumpstart/finish
 #!/bin/sh
 BASE=/a
 JUMPSTART=/a/mnt
 mount -F nfs 인스톨서버IP:/jumpstart ${JUMPSTART}
 ${JUMPSTART}/fjgi/install_v4 -R ${BASE} -d ${JUMPSTART}/fjgi -p sun4u
 ${JUMPSTART}/fjulsa/install -R ${BASE} -d ${JUMPSTART}/fjulsa -p sun4u
 umount ${JUMPSTART}
 exit 0

9. rules 작성
# vi /jumpstart/rules의 가운데 쯤, 클라이언트 호스트 정보 입력
 hostname 클라이언트호스트명 - profile finish

10. rules 체크 (ok가 떨어질 때 까지 위 내용 확인)
# cd /jumpstart
# ./check -p /tmp/media -r rules

11. 인스톨서버에 클라이언트 서버정보 추가
# vi /etc/hosts
클라이언트IP[탭]hostname(클라이언트)[탭]loghost

12. 클라이언트의 맥어드레스 확인
클라이언트 PROM(ok-mode까지 부팅)
{ok} show-nets
jumpstart에 사용될 ethernet-port 선택
{ok} cd ethernet-port 주소
{ok} .properties
mac 부분에서 해당 MAC Address 확인

13. 클라이언트 서버 맥 등록
# vi /etc/ethers
맥어드레스 hostname(클라이언트)

14. bootparams 생성
# /export/install/Sol10/Solaris_10/Tools/add_install_client -c 서버호스트명:/jumpstart 클라이언트호스트명 sun4u  <== 호스트명은 꼭 /etc/hosts에 들어가 있어야하며(IP안됨) 서버호스트명은 loghost명 이어야 됨
# cat /etc/bootparams 확인하여 올바로 값이 입력되었는지 확인

15. 인스톨
{ok} boot net - install
위 방법이 안될경우, net의 alias 를 확인하거나
{ok} boot 자신의 네트웍 물리주소 - install

종종 어플리케이션들은 시작할때 솔라리스의 버전을 체크 합니다. 필자는 최근에 그러한 어플리케이션을 설치 하였습니다. 어플리케이션이 솔라리스의 구버전에서만 인증되었는지에 대해서는 알 수 없었습니다. 또한, 어플리케이션의 인스톨러는 OS 의 버전을 확인할 만큼 훌륭하지 않았었습니다!

그러므로 결국 저는 제 시간을 낭비한 걸까요? 아닙니다! 'dtrace' 가 저를 구원해 주었습니다. 필자는 dtrace 스크립트를 이용하였습니다.

1.실행 파일을 'fubar' 라고 가정해 봅시다. fubar 가 어떻게 솔라리스 버전을 가져오는지를 살펴 봅시다. 결과를 통해서 uname() 시스템 콜임을 알았습니다.

$ truss ./fubar 2>&1 | grep uname
uname(0xFFBFF898)                               = 1

2.'fubar' 가 기대하고 있는 솔라리스 버전을 살펴 봅시다.
$ strings fubar | grep 'SunOS '
SunOS 5.5.1
SunOS 5.6
SunOS 5.7
SunOS 5.8
SunOS 5.7 Generic_106541-05 sun4u

필자가 이것을 이전에 알았다면 아마 솔라리스8 마이그레이션 지원 환경에 설치하였을 것입니다.

3.아래가 'fubar' 를 속이기 위한 dtrace 스크립트 입니다. 'fubar' 는 오직 "SunOS" 와 "5.5.1" 만을 신경 씁니다. 그러므로 솔라리스가 1986년도에 8086에서 돌아가는 것이라도 상관 없습니다.
$ cat unameSol8.d
#!/usr/sbin/dtrace -s
#pragma D option destructive
syscall::uname:entry
/execname == "fubar"/
{
        self->addr = arg0;
}

syscall::uname:return
/execname == "fubar"/
{
        copyoutstr("SunOS", self->addr, 257);
        copyoutstr("PowerPC", self->addr+257, 257);
        copyoutstr("5.5.1", self->addr+(257*2), 257);
        copyoutstr("gate:1996-12-01", self->addr+(257*3), 257);
        copyoutstr("PPC", self->addr+(257*4), 257);
}


필자:
Katsumi Inoue

이 글의 영문 원본은
Spoofing Solaris version using dtrace
에서 보실 수 있습니다.

Validating patches...
 
Loading patches installed on the system...
 
Done!
 
Loading patches requested to install.
 
Unable to install patch. Not enough space in /var/run to copy overlay objects.
 73MB needed, 21MB available.
패치가 돌아가지 않고 그냥 떨어진다. /var/run 용량이 부족하단다. 하지만, df 명령어로 확인 해 보면..
swap 24G 20K 24G 1% /var/run
1% 밖에 쓰지 않고 있는데, 이해할 수 없다. 검색을 좀 해보니, 기존 kernel version과 관계가 있는 것 같은데,
sun solve에서 동일한 case의 120011-14 kernel patch issue 가 있었으나, 분명한 대답은 없다.
일단 용량이 부족하다고 말하니, 용량을 늘리는 것으로 해결하긴 했다만. 아시는 분이 계시면 이유라도.
조과장님이 아실까..? @_@

일단은 임시 해결책.
# mkfile 3g /var/crash/temp_swap_file
# swap -a /var/crash/temp_swap_file
# swap -l

install patch.

'유닉스' 카테고리의 다른 글

Dtrace 를 이용하여 솔라리스 버전 속이기  (0) 2009.08.11
Solaris System Accounting  (0) 2009.03.19
Linux, bonding.  (0) 2009.02.13
쉘 스크립트를 사용하면 안되는 경우  (0) 2009.02.08
ZFS manual  (0) 2009.01.05

ZFS manual

유닉스2009. 1. 5. 06:50
말그대로,
ZFS manual




은근히 모르시는 분들이 많다. 간단하게- 포스팅!

1. METADB 만들기
#metadb -a -f -c3 c2t0d0s4 c2t1d0s4 c2t2d0s4 c2t3d0s4    <--- metadb file을 만들어 준다.
#metadb

2. RAID 0 : Concatenated 구성
#metainit d0 1 1 c2todos1
#metattach d0 c2tld0s1
#metastat  <--- raid 구성확인하기
#newfs /dev/md/dsk/d0   <--- file system 만들기

3. RAID 0 : Striped 구성
#metainit d1 1 2 c2t0d0s0 c2t1d0s0
#newfs /dev/md/dsk/d1

4. RAID 1
#metainit d10 1 1 /dev/dsk/c2t2d0s0     <---concat으로 일단 만듬
#metainit d20 1 1 /dev/dsk/c2t3d0s0     <---concat으로 일단 만듬
#merainit d12 -m d10     <----- 묶기
#metattach d12 d20       <----- d12 묶기
#newfs /dev/md/dsk/d12

5. RAID 0 + 1
#metainit d30 1 2 c2t0d0s6 c2t1d0s6
#metainit d40 1 2 c2t2d0s6 c2t3d0s6
#metainit d34 -m d30
#metattach d34 d40
#newfs /dev/md/dsk/d34

6. RAID 5
#metainit d5 -r c2t0d0s5 c2t1d0s5 c2t2d0s5  <----반드시 장치이름을 3개로 줄것
#newfs /dev/md/dsk/d5

'유닉스' 카테고리의 다른 글

쉘 스크립트를 사용하면 안되는 경우  (0) 2009.02.08
ZFS manual  (0) 2009.01.05
pkgadd 오류: admin 파일 <default>를 열 수 없습니다.  (0) 2008.11.11
SSH setting for solaris8  (0) 2008.08.26
Fixing read-only file system error  (0) 2008.08.13

패키지를 깔려고 하는데 이상한 에러가 발생한다. 왠 황당한 경우인지?
기본적으로 패키지를 설치하기 위해서는 /var/sadm/install/admin/default 파일이 존재해야 한다. 이 파일은 패키지 설치에 관련된 파라미터들이 기술되어 있는 파일인데, 이 파일이 없거나 손상되었을 경우, 패키지가 올바로 설치될 수 없어서 오류가 발생한다.

해결은 간단하다. 위 경로에 default 파일을 생성하고 다음 내용을 복사해서 붙여넣자. 그리고 다시 pkgadd ~~~
확인결과 solaris9/10은 파일 내용이 동일하다. 상관 없다.

#
# Copyright 2003 Sun Microsystems, Inc.  All rights reserved.
# Use is subject to license terms.
#
#ident  "@(#)default    1.5     03/06/11 SMI"
#
mail=
instance=unique
partial=ask
runlevel=ask
idepend=ask
rdepend=ask
space=ask
setuid=ask
conflict=ask
action=ask
networktimeout=60
networkretries=3
authentication=quit
keystore=/var/sadm/security
proxy=
basedir=default

덧붙여 여기까지 본 김에 한가지 을 배워보자.
자세히 보면, 이 default 라는 파일은 package를 install 할 때의 파라미터들이라고 앞서 설명했다.
눈치 빠르신 분들은 대충 아시겠지만, 각종 파라미터들이 ask로 되어 있는 것을 보아하니, 패키지를 설치하다 충돌이 나거나 하는 기타 여러가지 사항에 대해서 interactive하게 설치를 하기 위함을 알 수 있다.
그럼, ask 를 뭔가로 대신하면 package를 원샷에 설치할 수 있다는 말이 된다.
ask를 모두 nocheck로 변경한다. basedir은 package의 설치 위치를 변경해 줄 수 있다. 그럼, 원샷에 설치할 수 있는 준비가 모두 되었다.

그런데, 여기서 또 하나 문제가 있다. Non-Interactive하게 설치하도록 변경하였는데, Interactive하게 설치해야 하는 상황이 되면, 그 때 마다, nocheck를 ask로 변경해야 한단 말인가? -_-
솔라리스가 그렇게 허접할리가 없다. 위에서 편집한 파일을 저장을 default로 하지 말고 non으로 하여 저장하자.(반드시 non일 필요는 없다.)
그리고 다음과 같이 명령어에 옵션을 주자.

# pkgadd -na non -d pkgfile [pkgname]
ex) # pkgadd -na ./non -d beautifulpkg all

조금 전에 nocheck로 설정한 파일을 이용하여 패키지를 설치하는 것을 확인할 수 있다.
검색해서 이 문서를 보신 분들은, 문제도 해결하고, 패키지도 잘 설치하셨을 것이고, 팁도 하나 배우셨고. ~~
오늘은 그만하고 퇴근들 하십쇼~ ^^




'유닉스' 카테고리의 다른 글

ZFS manual  (0) 2009.01.05
Solaris Disksuite simple manual  (0) 2008.11.24
SSH setting for solaris8  (0) 2008.08.26
Fixing read-only file system error  (0) 2008.08.13
Solaris10 sd.conf 동적으로 다시 읽기  (0) 2008.05.26

OS를 백업하는 방법은 여러가지가 있다. 그 중에서 일반적으로 많이 쓰는 방법은,
동일 스펙의 Internal Disk 2개를 이용하여 미러를 구성하는 방법,
특정 슬라이스에 Cron을 이용하여 주기적으로 Dump를 뜨는 방법이 있다.
Dump를 떠서 새로운 디스크에 넣고, 부트 블록을 심어줌으로 동일한 디스크를 만드는 법은 다음과 같다.

[가정]
현재 OS가 설치된 곳 : c0t0d0s2
새 디스크 : c0t1d0s2

[수순]
1. prtvtoc을 이용, 원본 디스크와 동일한 파티션 구성을 대상 디스크 복제한다.
#prtvtoc /dev/rdsk/c0t0d0s2 | fmthard -s - /dev/rdsk/c0t1d0s2

2. 대상 디스크(새 디스크)의 파일 시스템을 새로 구성한다
#newfs /dev/dsk/c0t1d0s2

3. 대상 디스크를 사용하기 위해서는 마운트를 해야 한다.
#mount /dev/dsk/c0t1d0s2 /mnt

4. 원본 디스크에서 Dump를 떠서 대상 디스크에 Restore한다. (시간이 좀 걸린다)
#ufsdump 0f - /dev/dsk/c0t0d0s2 | (cd /mnt; ufsrestore rf -)

5. 마운트 해제
#umount /mnt

6. 대상 디스크에는 부트 블록이 없으므로 부팅이 불가능하다. 부트 블록을 심는다
#installboot /usr/platform/`uname -i`/lib/fs/ufs/bootblk/dev/rdsk/c0t1d0s2


Solaris에서 Disk Suite를 이용하여 미러를 구성하는 방법은 다음에~