Live hot, Think cool

**** NFS server 설정 ****

nfs 데몬

mountd : /usr/lib/nfs/mountd : NFS client가 mount를 요청시 mountd 데몬이 서버의 공유된
마운트 포인터(file handle)를 넘겨줌 -> /etc/rmtab공유하는 목록 저장

nfsd : /usr/lib/nfs/nfsd : 마운트된 이후에 정보를 핸들할수 있도록 해줌
statd : /usr/lib/nfs/statd : NFS file시스템의 상태정보를 저장
lockd : /usr/lib/nfs/lockd : 서버이상시 락을 건다
nfslogd : /usr/lib/nfs/nfslogd : nfs server 로깅데몬

* statd, lockd는 함께 NFS locking서비스를 제공한다 이는 서버 crashes가 발생시
클라이언트가 다시 파일을 사용할수 있도록 빨리 재 Connection이 되도록 한다.
두 대몬은 /etc/init.d/nfs.client 스크립트로 실행가능.

* nfsd,mountd는 /etc/init.d/nfs.server 스크립트로 실행가능

nfs 파일

/etc/dfs/dfstab : 부팅시 공유할 곳을 지정
/etc/dfs/sharedtab : 현재 공유하고 있는 곳을 저장
/etc/dfs/fstypes : mount명령을 사용시 -F nfs 옵션을 사용하지 않아도 되도록함
/etc/rmtab : 현재 어떤 host가 share된 자원을 공유하고 있는지를 저장(hostname : fsname)
/etc/nfs/nfslog.conf
/etc/default/nfslogd
/etc/nfs/nfslogtab

nfs command 명령어

share : 공유
unshare : 공유해제
shareall : /etc/dfs/dfstab내의 share된 리스트를 참조하여 전부 마운트시킴
unshareall : /etc/dfs/sharetab내의 현재 공유된 리스트를 참조하여 전부 언마운트시킴
dfshares : 공유할 자원이 있는지를 확인
dfmounts : 공유한 자원이 있는지를 확인


nfs server 완 관련된 파일
/etc/vfstab
/etc/mnttab
/etc/dfs/fstypes

-서버설정-

기본적으로 /etc/dfs/dfstab파일내 공유할 폴더를 지정

(file>root)/# vi /etc/dfs/dfstab
share -F nfs -o rw /data

rw ; read-write

ro ; read-only

root=client[:client] ; root access host (client hostname)

anon=0 ; 어느곳에서나 UID 0 (root) 로 access 가능


주. dfstab파일내 공유할 폴더를 지정하지 않고 nfs.server를 실행시
NFS service was not started because /etc/dfs/dfstab has no entries.
이런 메세지와 함께.. 중요 서버데몬(mountd,nfsd)이 실행이 안됨

1. 우선 디렉토리를 공유한다.
#share -F nfs -o rw /usr/share/man
(shareall해도 됨)

2. 공유확인
(file>root)/# share
- /data rw ""
(file>root)/#

3. 데몬확인

(file>root)/# ps -fe | grep lockd
root 197 1 0 16:32:36 ? 0:00 /usr/lib/nfs/lockd
root 1189 1156 0 18:06:19 pts/2 0:00 grep lockd

(file>root)/# ps -ef | grep mountd
root 1191 1156 0 18:06:24 pts/2 0:00 grep mountd
root 208 1 0 16:32:37 ? 0:00 /usr/lib/autofs/automountd
root 371 1 0 16:32:52 ? 0:00 /usr/lib/nfs/mountd

(file>root)/# ps -ef | grep nfsd
root 1196 1156 0 18:06:35 pts/2 0:00 grep nfsd
root 373 1 0 16:32:53 ? 0:00 /usr/lib/nfs/nfsd -a 16

(file>root)/# ps -fe | grep statd
daemon 199 1 0 16:32:36 ? 0:00 /usr/lib/nfs/statd
daemon 999 1 0 17:41:29 ? 0:00 /usr/lib/nfs/statd
root 1199 1156 0 18:06:40 pts/2 0:00 grep statd

(file>root)/#

만약에 위의 데몬들이 떠있지 않으면은 아래의 명령으로 데몬을 실행 시킨다.

(file>root)/#/etc/init.d/nfs.server start

- 서버에서 어떤 자원을 공유하고 있나 확인

(file>root)/etc/dfs# dfshares
RESOURCE SERVER ACCESS TRANSPORT
file:/data file - -
file:/a file - -
(file>root)/etc/dfs#

-> /etc/hosts에 zzz 이 명시되어 있어야한다. 목록에 없으면

(file>root)/etc/dfs# dfshares 192.168.0.212
RESOURCE SERVER ACCESS TRANSPORT
192.168.0.212:/test 192.168.0.212 - -
(file>root)/etc/dfs#

현재 nfs 서버에 접속해 있는 서버를 확인이 가능 합니다.

- 클라이언트 설정 및 데몬 확인

(file>root)ps -ef | grep nfs
root 1593 1 0 18:45:01 ? 0:00 /usr/lib/nfs/lockd
daemon 1591 1 0 18:45:01 ? 0:00 /usr/lib/nfs/statd

- 클라이언트 데몬 실행

(file>root)/etc/init.d/nfs.client start

클라이언트 데몬

(file>root)/etc/init.d# ps -ef | grep nfs
root 1564 1156 0 18:44:20 pts/2 0:00 grep nfs
root 197 1 0 16:32:36 ? 0:00 /usr/lib/nfs/lockd
daemon 199 1 0 16:32:36 ? 0:00 /usr/lib/nfs/statd
daemon 999 1 0 17:41:29 ? 0:00 /usr/lib/nfs/statd


(file>root)mount -F nfs 192.168.0.212:/test /ccc

위의 명령은 mount 명령으로서 192.168.0.212 에 test 로 nfs 가 설정되어 있는
디렉토리를 ccc 란 폴더로 mount 시키라는 명령 입니다.

- nfs 마운트 된 폴더 확인

(file>root)/ccc# df -k
파일시스템 K바이트 사용 가용 용량 설치지점
/dev/dsk/c0t0d0s0 20165785 10219660 9744468 52% /
/proc 0 0 0 0% /proc
fd 0 0 0 0% /dev/fd
mnttab 0 0 0 0% /etc/mnttab
swap 2064904 24 2064880 1% /var/run
swap 2064896 16 2064880 1% /tmp
/dev/dsk/c0t0d0s5 54760503 7704084 46508814 15% /data
192.168.0.212:/test 15116868 3065388 11283576 22% /ccc
(file>root)/ccc#

다른 nfs 서버에 접속해서 공유된 포더에 마운트 되어 있는 상태.....
http://www.readysystem.co.kr/ready/bbs/board.php?bo_table=tech_solaris&wr_id=25&page=12

서버를 운영하다가 언제부터인가 파일이 업데이트가 안되는거에요

그래서 강제로 파일을 복사해서 가져와서 작업했는데

df -k 명령어로 확인해서 예전 mount 디스크랑 비교해보니까

파일 시스템 한개가 빠져있었어요

그래서 파일 시스템을 하나 mount 명령어로 복구했어요

 

참고로 mount 명령어는 root 계정에서만 먹히더라구요

 

mount 명령어를 치니 mount: /dev/dsk/c0d2s7가 이미  마운트되었거나 /tmpusr 마우트 지점의 허용수를 초과했습니다. 이렇게 나와요

그래서 umount -f(f는 강제 옵션) /tmpusr 를 치니까 마운트가 해제되고

다시 mount /dev/dsk/c0d2s7 /tmpusr를 치면 마운트 되요

 

근데, 그래도 바로 마운트가 안됐는데

이유는 /dev/dsk/c0d2s7 물리적 디스크가 에러가 발생해서에요

fsck를 해주면 되는데

fsck /dev/dsk/c0s2s7 를 치면 복구를 해줘요 fsck 옵션이 있는데

저는 옵션을 안넣고 기다리면서 복구할거냐고 물어보면 y를 쳐줬어요

 

기존에 nfs를 사용했다면

명령어 mount를 쳐서 mount를 하지 말고

 

nfs서버에서 /etc/init.d/nfs.server (start,stop) 과

nfs클라이언트에서 /etc/init.d/nfs.client (start,stop)을 사용하면 되요

 

자세한 설명은 사이트를 참고했는데

http://www.readysystem.co.kr/ready/bbs/board.php?bo_table=tech_solaris&wr_id=25&page=12

를 참고했어요

 

 

'공부방' 카테고리의 다른 글

솔라리스 solaris nfs 설정방법 ㅋ  (0) 2017.08.04
다양한 치즈요리 음식  (0) 2017.06.15
솔라리스에 JDK6 설치하기  (0) 2017.05.10
아파치 톰캣 연동 이유는  (0) 2017.05.09
솔라리스 cp 명령  (0) 2017.05.09

다양한 치즈요리 음식들

맛있겠다

할 수만 있다면 언젠간

이런것 만들고 팔면서 살고 싶다

치즈요리링크
http://m.huffpost.com/kr/entry/5464227?utm_hp_ref=korea&ir=Korea

<솔라리스에서 JDK6을 설치하는 방법>

 

설치의 편의를 위해서 솔라리스 패키지 형태로 설치 할것입니다.

 

우선 솔라리스 커널 정보를 확인하여 JDK를 다운로드 받아야 합니다.

 

다운로드 경로

http://www.oracle.com/technetwork/java/javase/downloads/jdk6-downloads-1637591.html 

솔라리스 콘솔에서 다음 명령어를 칩니다.

$> isainfo -kv

 

응답에 따라 다음 파일들을 다운로드 받습니다.

32-bit i586 kernel modules 라고 나오면

32비트: jdk-6u33-solaris-i586.tar.Z

 

64-bit amd64 kernel modules 라고 나오면

32비트: jdk-6u33-solaris-i586.tar.Z

64비트: jdk-6u33-solaris-x64.tar.Z

 

32-bit sparc kernel modules 라고 나오면

32비트: jdk-6u33-solaris-sparc.tar.Z

 

64-bit sparcv9 kernel modules 라고 나오면

32비트: jdk-6u33-solaris-sparc.tar.Z

64비트: jdk-6u33-solaris-sparcv9.tar.Z

 

32비트 JDK의 경우에는 32비트만 설치하고, 64비트 JDK를 설치 하기 위해서는 32비트를 설치 한후 설치를 해야 합니다.

 

<설치방법-64비트 SPARC로 설명: 설치방법은 파일명만 틀릴 뿐 동일>
root 로 로그인후 32비트 설치

[root] /home/jdk6/32bit > gunzip jdk-6u33-solaris-sparc.tar.Z

[root] /home/jdk6/32bit > tar xvf jdk-6u33-solaris-sparc.tar
[root] /home/jdk6/32bit > pkgadd -d . SUNWj6rt SUNWj6dev SUNWj6cfg SUNWj6man SUNWj6jmp
 

 

/usr/jdk/jdk1.6.0_33 위치에 설치 됩니다


64비트 추가 설치

[root] /home/jdk6/64bit > gunzip jdk-6u33-solaris-sparcv9.tar.Z
[root] /home/jdk6/64bit > tar xvf jdk-6u33-solaris-sparcv9.tar

[root] /home/jdk6/64bit > pkgadd -d . SUNWj6rtx SUNWj6dvx


설치된 디렉토리로 이동해서 버전 및 64비트 확인
[root] / > cd /usr/jdk/jdk1.6.0_33/bin
[root] /usr/jdk/instances/jdk1.6.0/bin > ./java  –version
java version "1.6.0_33"
Java(TM) SE Runtime Environment (build 1.6.0_33-b04)
Java HotSpot(TM) Server VM (build 20.8-b03, mixed mode)

[root] /usr/jdk/instances/jdk1.6.0/bin > ./java  -d64 -version

java version "1.6.0_33"
Java(TM) SE Runtime Environment (build 1.6.0_33-b04)
Java HotSpot(TM) 64-Bit Server VM (build 20.8-b03, mixed mode)

/etc/profile 에 환경변수 등록
export JAVA_HOME=/usr/jdk/jdk1.6.0_33
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib:$CLASSPATH

솔라리스 이전 java 파일 변경
[root] / > mv /usr/bin/javac /usr/bin/javac.old
[root] / > mv /usr/bin/java /usr/bin/java.old

심볼릭 링크 생성
[root] / > ln -s /usr/jdk/jdk1.6.0_33/bin/java /usr/bin/java
[root] / > ln -s /usr/jdk/jdk1.6.0_33/bin/javac /usr/bin/javac

 

※ 위와 같이 설정되고 재로그인 해도 버전이 변경되지 않는 경우는 이전버전이 설치된 경로가 path 에 지정되 있는 경우이므로 찾아서 수정해 주어야 합니다.

 

http://hmgirl.tistory.com/67



'공부방' 카테고리의 다른 글

다양한 치즈요리 음식  (0) 2017.06.15
솔라리스에 JDK6 설치하기  (0) 2017.05.10
솔라리스 cp 명령  (0) 2017.05.09
솔라리스 tar.gz 압축 해제  (0) 2017.05.09
솔라리스10에서 환경변수 추가하기  (0) 2017.05.09

가끔씩 운용 서버에 수정사항을 적용할 때 백업이 필요한 경우가 있다.

다수의 서버가 존재할 경우 업로드 폴더를 심볼릭 링크를 걸어두는 경우가 있다.

이 때 보통 cp 명령을 쓰게 되는데

 

심볼릭 링크까지 그대로 복사하는 옵션은

 

cp -rP 디렉토리명 new디렉토리명

 

-r 디렉토리 복사 옵션

-P 디렉토리 안 특성을 그대로



출처: http://devzeroty.tistory.com/entry/솔라리스-cp-명령 [Dev Story..]

1. file.tar.gz 푸는 방법  

 
1) tar xvfz file.tar.gz 
2) gunzip file.tar.gz; tar xvf file.tar  
3) gunzip < file.tar.gz | tar xvf - 

첫 번째 방법의 문제점은 옵션 중 'z' 옵션을 GNU tar가 아니면 사용할 수 없다는 점입니다.
 
솔라리스 9에서는 /usr/bin/tar 에 있는건 솔라리스용 tar이고, /usr/sfw/bin/gtar 에 있는 파일이 GNU tar입니다. SUN Freeware에서 패키지 받으셨다면 보통 /usr/local/bin/tar 에 GNU tar가 있습니다. 

.tgz라는 확장자도 있는데 이건 .tar.gz의 준말입니다.

2. 압축하는 방법은

1) 'tar cvf file.tar directoryname' 명령을 입력하면 directoryname에 있는 모든 파일이 file.tar 라는 파일로 합해집니다. 이후 'gzip file.tar' 명령으로 file.tar.gz라는 파일을 생성할 수 있습니다. 확장자 gz는 gzip을 의미합니다.
2) tar cvf -  directoryname | gzip > file.tar.gz
3) tar cvfz file.tar.gz directoryname

위 세 명령은 모두 같은 효과를 가집니다.

3. 체크섬 오류는 예전 솔라리스 tar에서 긴 파일 이름을 제대로 지원 못해서 나는 오류였는데, 지금은 고쳐졌다고 합니다.


set 이나 env 를 치면 환경변수가 나옴


1) #원하는환경변수명=원하는경로

2) export 원하는환경변수명


EX1) JAVA_HOME을 환경변수로 추가

 #JAVA_HOME=/usr/jdk/instances/jdk1.5.0

 #export JAVA_HOME

 #env

.

.

JAVA_HOME=/usr/jdk/instances/jdk1.5.0

.

.


#PATH=$PATH:/추가경로

#export PATH


※ 참고사항 : 저렇게만 치면 재부팅시 사라져버린다.

계속 등록하고 싶다면 /etc/profile 이라는 파일 맨 끝에다가 저 내용을 추가하면 된다.

 

.

.

umask 022

trap 2 3


JAVA_HOME=/usr/jdk/instances/jdk1.5.0

export JAVA_HOME


시스템 현황 파악할때 필요한

솔라리스(Solaris) 시스템정보 확인 꿀 명령어

 

○ 하드디스크 크기 : iostat -nE | grep Size

  - 콘솔에서 나오는 Size를 전부 더하면 된다.

  - 마이너스로 나오거나 말도안되게 크게 나오는 Size는 cdrom장치일 것이다.

 

○ 기본정보 : uname -a

 - 아래와 같이 출력되는데 내용은 다음과 같다.

  SunOS(ⓐ) SOLARIS(ⓑ) 5.8(ⓒ) Generic_108528-22(ⓓ) sun4u(ⓔ) sparc(ⓕ) SUNW(ⓖ),Sun-Fire-V240(ⓗ)
   ⓐ System(OS)
   ⓑ Hostname
   ⓒ Release
   ⓓ Kernel Version(ID)
   ⓔ Kernel architecture(그외 i86pc, sun4m, sun4c 등)
   ⓕ Application architecture(그외 sparc, i386, i686등)
   ⓖ Platform
   ⓗ Banner(서버모델)

○ CPU정보 : psrinfo -vp 또는 psrinfo -v 또는 psrinfo -p

  - psrinfo -vp : 물리적장치별 설명

  - psrinfo -v : 자세한 설명(보통 버츄어장치를 보여준다.)

  - psrinfo -p : 물리적장치 수

  - 썬장비에서 프로세서(CPU) 정보를 확인하면 가상(버추어)프로세서로 정보가 엄청나게 많은경우가 있는데 실제 물리적장치는 몇개있지 않을것이다. 참고로 인텔장비에서 GHZ나 MHZ같은 속도는 클럭수를 의미하며 솔라리스에서 psrinfo -vp 를 쳤을 때 clock 정보로 보이기도 한다.

 

○ 모델명 : prtconf -vp | grep banner-name

 

○ 메모리크기 : prtconf | grep Memory

 

○ 기타정보 : prtdiag | more 을 쳐서 천천히 볼 수 있다.

일 하다보니까 쉘 스크립트를 많이 사용하게된다.


그래서 내 블로그에 좀 정리해놓고 필요할때마다 찾아보면 좋을것 같아서 나에게 필요한 실무적인 내용을 정리해본다.


vi *.sh (* 에는 필요한 아무 이름을 입력)


을 입력하고 파일을 만든다.


vi test.sh 라고 파일을 만들었다고치자.


그 다음에는 chmod +x test.sh 또는 chmod 755 test.sh 를 쳐서


test.sh 파일을 실행가능한 파일로 바꾼다.


예약변수를 알아두면 좋다.


서버를 운영하다보면 여러 업체나 개발자들이 PATH를 설정하고 참조하는데


나중에 확인해봐야하는 경우가 생긴다.


예약 변수(Reserved Variable)

HOME사용자의 홈 디렉토리
PATH실행 파일을 찾을 경로
LANG프로그램 사용시 기본 지원되는 언어
PWD사용자의 현재 작업중인 디렉토리
FUNCNAME현재 함수 이름
SECONDS스크립트가 실행된 초 단위 시간
SHLVL쉘 레벨(중첩된 깊이를 나타냄)
SHELL로그인해서 사용하는 쉘
PPID부모 프로세스의 PID
BASHBASH 실행 파일 경로
BASH_ENV스크립트 실행시 BASH 시작 파일을 읽을 위치 변수
BASH_VERSION설치된 BASH 버전
BASH_VERSINFOBASH_VERSINFO[0]~BASH_VERSINFO[5]배열로 상세정보 제공
MAIL메일 보관 경로
MAILCHECK메일 확인 시간
OSTYPE운영체제 종류
TERM로긴 터미널 타입
HOSTNAME호스트 이름
HOSTTYPE시스템 하드웨어 종류
MACHTYPE머신 종류(HOSTTYPE과 같은 정보지만 조금더 상세하게 표시됨)
LOGNAME로그인 이름
UID사용자 UID
EUIDsu 명령에서 사용하는 사용자의 유효 아이디 값(UIDEUID 값은 다를 수 있음)
USER사용자의 이름
USERNAME사용자 이름
GROUPS사용자 그룹(/etc/passwd 값을 출력)
HISTFILEhistory 파일 경로
HISTFILESIZEhistory 파일 크기
HISTSIZEhistory 저장되는 개수
HISTCONTROL중복되는 명령에 대한 기록 유무
DISPLAYX 디스플레이 이름
IFS입력 필드 구분자(기본값:   - 빈칸)
VISUALVISUAL 편집기 이름
EDITOR기본 편집기 이름
COLUMNS현재 터미널이나 윈도우 터미널의 컬럼 수
LINES터미널의 라인 수
LS_COLORSls 명령의 색상 관련 옵션
PS1기본 프롬프트 변수(기본값: bash\$)
PS2보조 프롬프트 변수(기본값: >), 명령을 "\"를 사용하여 명령 행을 연장시 사용됨
PS3쉘 스크립트에서 select 사용시 프롬프트 변수(기본값: #?)
PS4쉘 스크립트 디버깅 모드의 프롬프트 변수(기본값: +)
TMOUT0이면 제한이 없으며 time시간 지정시 지정한 시간 이후 로그아웃


위치 매개 변수(Positional Parameters)

$0실행된 스크립트 이름
$1$1 $2 $3...${10}인자 순서대로 번호가 부여된다. 10번째부터는 "{}"감싸줘야 함
$*전체 인자 값
$@전체 인자 값($* 동일하지만 쌍따옴표로 변수를 감싸면 다른 결과 나옴)
$#매개 변수의 총 개수

특수 매개 변수(Special Parameters)

$$현재 스크립트의 PID
$?최근에 실행된 명령어, 함수, 스크립트 자식의 종료 상태
$!최근에 실행한 백그라운드(비동기) 명령의 PID
$-현재 옵션 플래그
$_지난 명령의 마지막 인자로 설정된 특수 변수


논리 연산자(Logical Operators)

문자설명
&&, -a논리 AND
||, -o논리 OR

산술 연산자(Arithmetic Operators)

문자설명
+더하기
-빼기
*곱하기
/나누기
++누승(exponentiation)
%modulo 나 mod (정수 나누기에서 나머지 값)
+=상수값 만큼 증가(plus-equal)
-=상수값 만큼 감소(minus-equal)
*=상수값을 곱함(times-equal)
/=상수값으로 나눔(slash-equal)
%=상수값으로 나눈 나머지 값(mod-equal)

비트 연산자(Bitwise Operators)

문자설명
<<비트 왼쪽 쉬프트(쉬프트 한 번당 2를 곱하는 것과 동일함)
<<=left-shift-equal
>>비트 오른쪽 쉬프트(쉬프트 한 번당 2로 나눔)
>>=right-shift-equal(<<=와 반대)
&비트 and
&=비트 and-equal
|비트 OR
|=비트 OR-equa
~비트 negate
!비트 NOT
^비트 XOR
^=비트 XOR-equa

기타 연산자(Miscellaneous Operators)

문자설명
,콤마 연산자(comma operator), 2개 이상의 산술 연산을 묶어줌

정수 비교(Integer Comparison)

문자설명
-eq같음
-ne같지 않음
>, -gt더 큼(> 이중 소괄호에서 사용 가능)
>=, -ge더크거나 같음(>= 이중 소괄호에서 사용 가능)
<, -lt더 작음(< 이중 소괄호에서 사용 가능)
<=, -le더 작거나 같음(<= 이중 소괄호에서 사용 가능)

문자열 비교(String Comparison)

문자설명
=, ==같음
!=같지 않음
<ASCII 알파벳 순서에 더 작음
>ASCII 알파벳 순서에서 더 큼
-z문자열이 NULL, 길이가 0인 경우
-n문자열이 NULL이 아님
${변수}문자열이 NULL이 아님