OS/SOLARIS2005. 12. 23. 16:45
반응형
시스템에서 maxuser 수와 max process 의 수는 가끔가다 종종 문제를 야기 시키고 합니다.
이를 대비해서 현재 이 시스템에서 maxuser 수를 알고 있은 것이 도움이 된다.

우선 process 초과가 되면 다음과 같은 메시지가 발생됨
Jul 26 13:20:30 delta unix: out of per-user processes for uid 201

Max process의 수는 maxuser 와 밀접한 관계를 같고 있습니다.

Max_nprocs Maximum number of processes (default= 10 + 16 * maxusers )

Maxuser 수 알아보기

#
# adb –kw /dev/ksyms /dev/mem
psysmem 4f13 ================ physical memory 양을 보여줌

maxusers/D ============= 옆에 같이 타이핑을 치면

maxusers:
maxusers: 64 ========== 이와 같이 maxuser를 보여줌

^d
#

maxuser가 64 일때 max_nprocs의 수는 1034가 됩니다.

Process 가 초과해서 더 이상 생성을 못할때는 maxusers 수를 늘려주면 됩니다.

/etc/system 파일에 커널을 수정하고, rebooting하면 적용이 됩니다.
Set maxusers=128 ( 이경우 max_nprocs 수는 2058 )
반응형

'OS > SOLARIS' 카테고리의 다른 글

message queue  (0) 2005.12.23
[펌] 커널 파라메터의 수정  (0) 2005.12.23
솔라리스 테입드라이브 명령어  (0) 2005.11.15
[펌] 솔라리스 소개  (0) 2005.11.14
[펌] 솔라리스 시스템에서 갑작스런 패닉 현상  (0) 2005.08.31
Posted by [PineTree]
OS/LINUX2005. 12. 22. 23:06
반응형

/ (root) 화일시스템이 full되었을 경우에 다음에 열거한 순서대로 화일시스템을 점검한다.
1. / 화일시스템에 사용자가 임의로 만들어 준 디렉토리가 있는면 정리한다.

2. /dev 디렉토리 밑에 일반화일이 있는지 조사한다.


# find /dev -type f -exec ls -l {} \; 일반화일이 있을 경우, 모두 지우면 된다. 특히 테이프에 백업을 받을 경우에 사용자가 디바이스명을 잘못 지정하여, 테이프에 백업되지 않고 화일에 저장하는 경우가 있다.

3. 시스템에 있는 core 화일을 제거한다. core 화일을 찾아 보려면 다음과 같은 명령어를 사용한다.


# find / -name core -print core 화일을 찾아서 자동으로 지우려면 다음과 같은 명령어를 실행한다.
# find / -name core -exec rm {} \; -print

4. /var가 root 화일 시스템이 있을 경우, /var 디렉토리 밑을 조사한다.
# du -sk /var/* | sort -nr 이 명령어를 실행하면 /var 밑에 있는 디렉토리 별로 그 서브 디렉토리까지 포함하여 KB 단위의 크기를 출력한다. 거기에서 사이즈가 큰 디렉토리에 대하여 조사한다.
정상적인 시스템에 주로 문제가 될 만한 디렉토리는 다음과 같다.


/var/adm
/var/mail
/var/log
/var/preserve
/var/spool


4.1 /var/adm /var/adm 디렉토리에는 시스템이 운용중이 발생하는 메세지나 기타 정보들이 누적 보관된다. 이 디렉토리에 큰 화일이 있으면 정리한다. messmages.0, messages.1, ... 이러한 화일이 있으면 그냥 지워도 상관없다. messages 화일의 크기가 너무 크면
" # cp /dev/null messages " 명령어를 사용하여 화일 크기를 0으로 만들 수 있다. 이 화일은 시스템에서 발생되는 메세지를 보관하는 화일이다. wtmp 또는 wtmpx 화일의 크기가 너무 크면 다음과 같은 명령어를 실행하여 그 크기를 0으로 만들 수 있다. 이 화일에는 시스템에 접속한 사용자에 대한 정보를 가지고 있는 화일이다.


# cp /dev/null wtmp
# cp /dev/null wtmpx 만일 pacct이 있으면 그 화일의 크기를 다음과 같은 명령어를 사용하여 크기를 0으로 만들 수 있다. 이 화일은 accounting 정보를 가지고 있는 화일이다.
# cp /dev/null pacct pacct1, pacct2, ... 등등의 화일이 있으면 그냥 지우면 된다. 그외에도 사이즈가 큰 화일을 알아서 정리한다.


4.2 /var/mail /var/mail 디렉토리에는 메일 데이타가 보관되는 곳이다. 이 디렉토리에 사이즈가 큰 화일이 있으면, 해당 사용자에게 그 메일을 정리하도록 한다.


4.3 기타 디렉토리에 대해서도 조사하여 불필요하게 사이즈가 큰 화일 있을 경우 알아서 정리한다. 단 화일을 지울 때, 그 화일이 어떤 화일인지 숙지한 후에 지울 것인가 아닌가를 결정한다.

5. / 화일 시스템에 있는 1 MB 이상되는 화일을 조사하여, 화일 크기순으로 sort하여 그 내용을 조사한다.


# find / -mount -size +1024k -ls > /tmp/find.list # sort -nr +6 /tmp/find.list > /tmp/find.list.s find.list.s 화일에서 비정상적인 큰 화일이 있는지 조사한다.
 

반응형

'OS > LINUX' 카테고리의 다른 글

리눅스 텔넷 설정  (0) 2006.08.08
CentOS 한글 에러 수정  (0) 2006.03.30
[펌] NFS(Network File System) 사용방법  (0) 2005.02.15
LINUX : NFS 설정하기.  (0) 2005.02.15
[펌] NFS설정하기 (Linux -> HPUX)  (0) 2005.02.15
Posted by [PineTree]
OS/SOLARIS2005. 11. 15. 00:50
반응형
테이프 명령어
명령:mt - 자기 테이프 용도:테이프 상태 확인, 되감기, 지우기 등 경로:/usr/bin/mt

구문:mt [ -f 테이프 장치 이름 ] 명령 [ 반복 횟수] 여기서 테이프 장치 이름은 보통
     /dev/rmt/0입니다.

명령은 다음과 같습니다.

status   -테이프 드라이브의 상태 정보를 표시합니다
rewind   -테이프를 되감습니다.
retension   -테이프를 팽팽한 상태로 만듭니다.
erase    -테이프 전체를 지웁니다.
fsf      -지정된 반복 횟수만큼 파일을 앞으로 건너뜁니다.
bsf      -지정된 반복 횟수 만큼 파일을 뒤로 건너뜁니다.
eom      -기록된 미디어의 끝부분으로 건너 뜁니다.

반복 횟수는 요청된 작업을 수행하는 횟수를 말합니다.
기본적으로 mt는 명령을 한 번 수행합니다.
하나의 명령을 두 번 이상 반복하려면 반복 횟수를 지정하면 됩니다.

예:mt -f /dev/rmt/0 status ---> 테이프의 상태를 표시합니다.
mt -f /dev/rmt/0 rewind ---> 테이프를 되감습니다.
mt -f /dev/rmt/0n fsf 2 ---> 첫 번째 두 개의 파일을 건너뜁니다.
mt -f /dev/rmt/0n bsf 2 ---> 두 개의 파일만큼 뒤로 건너뜁니다.

명령:  tar - 테이프 아카이브
용도:  테이프 아카이브를 만들거나 복원합니다.
       디렉토리 구조를 유지하면서 하나 또는 여러 개의 파일을 백업하는데 사용합니다.
경로:  /usr/bin/tar
구문:  tar [옵션] [장치 이름] [파일 이름]

옵션은 다음과 같습니다.
c       tar 파일을 새로 만듭니다.
r       기존 tar 파일을 대체합니다.
t       테이프 아카이브의 목차를 표시합니다.
u       업데이트합니다.
업데이트할 파일이 tar 파일에 없거나 마지막으로 tar 파일을 쓴 후
수정된 경우에는 tar 파일의 끝에 씁니다. 업데이트 수행은 다소
느릴 수 있습니다. 5.x 시스템에서 만든 tar 파일은 4.x 시스템에서
업데이트할 수 없습니다.
x       추출하거나 복원합니다.
추출하거나 복원할 파일은 tar 파일에서 추출하고 현재 디렉토리에서
tar 파일에 지정된 디렉토리에 씁니다. 추출할 파일 및 디렉토리에
대해 상대 경로 이름을 사용하십시오.
v       자세한 정보를 표시합니다.
기능 문자 다음에 각 파일의 이름을 출력합니다.

여기서 장치 이름은 대개 /dev/rmt/0입니다. 또는 파일 이름일 수도 있습니다. 파일
이름은 아카이브로 만들 파일 이름입니다.

예:
tar cvf /dev/rmt/0 /export/home/user1 --> /dev/rmt/0 테이프에 /export/home/user1의
테이프 아카이브를 만듭니다.
tar tvf /dev/rmt/0 ---> /dev/rmt/0의 목차를 표시합니다.
tar xvf /dev/rmt/0 ---> /dev/rmt/0에서 데이터를 복원합니다.

참고: 위의 명령에서 /dev/rmt/0 대신 /dev/rmt/0n을 사용할 수 있습니다.
/dev/rmt/0n을 사용하면 백업 수행 후 테이프를 되감지 않습니다.
명령: ufsdump
용도: 파일 시스템, 파일 또는 디렉토리를 백업하는데 사용합니다.
      전체 백업이나 증분 백업을 수행할 수 있습니다.
경로: /usr/sbin/ufsdump
구문: ufsdump [옵션] [장치 이름] [덤프할 파일]

옵션은 다음과 같습니다.

0 ~ 9  덤프 레벨 옵션을 지정합니다.
       레벨 0은 가장 낮은 수준으로 전체 백업을 수행합니다. 레벨 1 ~ 9는 증분
       백업을 수행합니다.
u      현재 백업의 날짜와 덤프 레벨을 /etc/dumpdates 덤프 기록에 업데이트합니다.
f      파일이 쓰여질 장치를 지정합니다.이 옵션은 장치 이름이 필요합니다.
v      테이프에 있는 데이터를 파일 시스템에 있는 데이터와 비교하고 검사합니다.

여기서 장치 이름은 /dev/rmt/0입니다.
덤프할 파일은 초기 파일 시스템 /dev/rdsk/c0t2d0s0이나 블록 파일 시스템
/dev/dsk/c0t2d0s0입니다. 또한 /export/home과 같이 파일 시스템 이름이나
/export/home/user1과 같이 파일 이름 또는 디렉토리 이름을 사용할 수도 있습니다.

예:
ufsdump 0uf /dev/rmt/0 /export/home ---> /export/home 파일 시스템을 /dev/rmt/0
으로 덤프하고 전체 백업을 수행합니다.

ufsdump 1uf /dev/rmt/0 /dev/dsk/c0t2d0s4 --> /dev/dsk/c0t2d0s4 파일 시스템을
/dev/rmt/0로 덤프합니다. 이 명령은 레벨 1의 증분 백업을 수행합니다.

ufsdump 4uf dbserver:/dev/rmt/0 /export/home/user1 --> /export/home/user1에 대한
레벨 4의 증분 백업을 Remote Box dbserver에 마운트된 dev/rmt/0 테이프 장치에 덤프
합니다. 여기서 테이프 장치는 로컬 시스템이 아니라원격 시스템인 dbserver에 있는
장치입니다.

명령: ufsrestore
용도: ufsdump 명령으로 만들어진 백업본에서 파일을 복구하거나 추출하는데 사용합니다.
경로: /usr/sbin/ufsrestore
구문: ufsrestore [옵션] [장치 이름] [복원할 파일]

옵션은 다음과 같습니다.
i       대화형 모드로 파일을 복원합니다.
r       백업 전체를 복원합니다.
t       백업의 목차를 표시합니다.
x       명령행에서 지정한 파일을 복원합니다.
f        /dev/rmt/0과 같이 장치 이름을 지정합니다.
v       파일을 복원하고 있는 경로 이름을 표시합니다(세부 정보 표시 모드).

참고: 이 옵션은 ufsdump 명령에서 사용하는 v(verify) 옵션과 다릅니다.

예:
ufsrestore xvf /dev/rmt/0 ./etc/hosts ---> /etc/hosts 파일을 현재 디렉토리로
        복원합니다.
ufsrestore ivf /dev/rmt/0 ---> 복원될 파일을 선택합니다.
ufsrestore rvf /dev/rmt/0 ./opt ---> /opt 파일 시스템을 현재 디렉토리로 복원합니다.
ufsrestore tvf /dev/rmt/0 ---> /dev/rmt/0의 목차를 표시합니다.
반응형
Posted by [PineTree]
OS/SOLARIS2005. 11. 14. 19:49
반응형
1부. 솔라리스 소개

1. 유닉스 정의

유닉스는 1969년에 벨 연구소에서 인터랙티브 시분할 시스템으로서 만든 것이 그 시초가 된 운영체계이다. 켄 톰슨과 데니스 리치가 유닉스의 창시자로 알려져 있다. 유닉스라는 이름은 그 이전의 시스템인 멀틱스에 기반을 두고 지은 일종의 말장난이었다. 1974년에 유닉스는 C 언어로 쓰여진 최초의 운영체계가 되었다. 유닉스는 여러 회사들이나 대학 및 개인들에 의해 많은 확장판과 새로운 아이디어들이 다양한 버전의 유닉스에 추가됨으로써, 대형 프리웨어 제품의 한 종류로 진화하였다. 유닉스는 앞서가는 특정 컴퓨터 회사들에 의해 소유된 독점적인 운영체계가 아니었다는 것과, 또 그것이 표준 프로그래밍 언어로 작성되고, 대중적인 많은 아이디어를 받아들였다는 이유 때문에, 누구에 의해서도 개선되고 강화될 수 있는 최초의 개방형 표준 운영체계가 되었다. 다양한 버전의 유닉스로부터 나온 C 언어와 쉘 인터페이스의 복합체는 IEEE의 찬조 하에서 POSIX로 표준화되었다. POSIX 인터페이스들은 번갈아 가며, X/Open 프로그래밍 가이드 4.2 ("단일 유닉스 규격"과 "유닉스95"로 알려져 있다)에 명기되었다. 단일 유닉스 규격의 버전2는 유닉스98로도 알려져 있다. 유닉스의 공식적인 등록상표는 현재 산업표준기구인 오픈 그룹이 소유하고 있으며, 유닉스 관련 제품들의 인증과 상표부여 등을 관장하고 있다.
유닉스 운영체계는 널리 판매된 썬마이크로시스템즈(Solaris), 실리콘그래픽스(IRIX), IBM(AIX), 그리고 그 외 많은 회사들의 워크스테이션 제품들에서 사용된다. 유닉스 환경과 클라이언트/서버 프로그램 모델은 인터넷 개발과 네트워크 중심의 컴퓨팅 국면을 새로이 하기 위한 중요한 요소였다. 유닉스에서 파생하여, 현재 무료 소프트웨어와 상용버전이 모두 존재하는 리눅스는 독점 운영체계의 대안으로서 명성을 더해가고 있다.

2. 유닉스의 특징

- 멀티태스킹과 멀티유저 지원
- 용이한 이식성
- 계층적 파일 시스템 구조 (Hierarchical File System)
- Security 및 Protection 기능
- 입출력의 방향 전환 및 파이프 기능
- 확장성과 조직성이 풍부한 Shell
- 각종 Special Devices의 독립성
- 유연성 있는 커뮤니케이션을 할 수 있는 운영체제
- 언어 및 유틸리티가 다양하여 프로그램 개발이 용이

3. UNIX의 구성요소

1) Kernel : Unix의 핵이며 File system, Device, Memory, Process 관리.
2) Shell : Command Interpreter로 사용자와 커널간의 인터페이스 역할과 명령을 해석.
3) File System (Directory Tree)
파일 시스템은 커널이 데이터를 관리하기 위한 파일 또는 디렉터리의 관리 구조이다.

4. UNIX의 종류

- Sun OS : 썬 마이크로시스템즈에서 제공하는 BSD 계열의 UNIX
- Solaris : 썬 마이크로시스템즈에서 제공하는 System V 계열의 UNIX
- HP/UX : HP의 UNIX 시스템은 OSF/1(Open Software Foundation)의 여러 특징을 도입한 System V의 변형된 형태
- AIX : IBM에서 System V release 4의 4.4 BSD 버전과 OSF/1을 기반으로 만들어낸 UNIX
- Digital UNIX: OSF그룹에서 System VR3과 4.3 BSD버전을 결합시키고 OSF/1을 기반으로 발전된 DEC(현재 Compaq)의 UNIX
- IRIX : 실리콘 그래픽스에서 BSD와 System V계열의 UNIX를 기반으로 만들어진 UNIX

5. Solaris OS

4.2 버전까지 BSD를 만들던 버클리의 빌 조이가 썬 마이크로시스템즈로 옮겨가서 만든 것이 SUN OS이며 썬 마이크로시스템즈가 AT&T의 System V release 4.0의 라이선스를 받아 만든 것이 Solaris이다.

1) 버전간의 관계
Solaris 2.x = Sun OS 5.x + Open Windows + ONC+(Open Network Computing: NFS, NIS, NIS+등)
Solaris 7 = Sun OS 5.7 + Open Windows, CDE(Common Desktop Env) + ONC+(Open Network Computing: NFS, NIS, NIS+등)
Solaris 8 = Sun OS 5.8 + OpenWindows, CDE(Common Desktop Env) + ONC+(Open Network Computing: NFS, NIS, NIS+등)
Solaris 9 = Sun OS 5.9 + OpenWindows, CDE(Common Desktop Env) + ONC+(Open Network Computing: NFS, NIS, NIS+등)

2) 장비 별 지원 OS 버전

SunOS 5.x = Solaris 2.x
Sun dropped the "2." when Solaris (2.)7 came out.
I.e. Solaris 7 = "Solaris 2.7" = SunOS 5.7,
Solaris 8 = "Solaris 2.8" = SunOS 5.8 and so on.

Sun2: SunOS 4.0.3 or earlier.
Sun386i: SunOS 4.0, 4.0.1, 4.0.2 only.
Sun3: SunOS 4.1.1 or earlier.
4/100, 4/200 series: SunOS 3.2, SunOS 4.0 through 5.4
4/300 series: SunOS 4.0.3 through 5.4
4/400 series: SunOS 4.1PSR_A through 5.4
600 models 120, 140: SunOS 4.1.2 through 5.5.1
600 model 41, 51: SunOS 4.1.3 through 5.5.1
SPARCstation 1, 1+, SLC, IPC: SunOS 4.0.3 through 5.7
SPARCstation 2, ELC, IPX: SunOS 4.1.1 through 5.7
SPARCstation 4: SunOS 4.1.4 or later.
SPARCstation 5: SunOS 4.1.3_U1B or later.
SPARCstation 10 models 20, 30, 40, 41, 51, 61, 71: SunOS 4.1.3 or later.
SPARCstation 20 models 50, 51, 61, 71: SunOS 4.1.3_U1B or later.
SPARCstation 20 model HS11, HS21, 151: SunOS 4.1.4 or later.
SPARCclassic, SPARCstation LX: SunOS 4.1.3C or later.
SPARCstation Voyager: Solaris 2.3 edition II or later.
Ultra 1 model 140, 170: Solaris 2.5 or later.
Ultra 1 model 140E, 170E, 200E: Solaris 2.5.1 or later.
Ultra 2: Solaris 2.5.1 or later.
Ultra 5, 10, 30, 60, 250, 450: Solaris 2.5.1HW1297 or Solaris 2.6HW0398 or later.
Ultra Enterprise: Solaris 2.5.1 or later.
SunBlade 100, SunBlade 1000, SunFire 280R: Solaris 8HW1000 or later.
SunFire 3800, 4800, 4810, 6800: Solaris 8HW0401 or later.

- OS 버전의 확인
# uname -a
SunOS sonamu 5.8 Generic_108528-15 sun4u sparc SUNW,Ultra-1

- 솔라리스 정보
솔라리스 9
http://kr.sun.com/products/software/os_platforms/solaris/index.html
솔라리스 8
http://kr.sun.com/products/software/os_platforms/solaris/8/index.html
전체 버전 간의 차이 비교
http://wwws.sun.com/software/solaris/fcc/fcc.html
솔라리스 x86(Intel) 하드웨어 호환 리스트(HCL)
http://www.sun.com/bigadmin/hcl/


6. SUN & Solaris 관련 사이트

1) 썬 관련 레퍼런스 (추천)
http://www.stokely.com/unix.sysadm.resources/faqs.sun.html

2) 썬 공식 도큐먼트
http://docs.sun.com
http://www.sun.com/bigadmin/ (BigAdmin System Administration Portal)

3) SUN관련 FAQ
http://www.science.uva.nl/pub/solaris/solaris2.html (Solaris2 FAQ)
http://www.mreriksson.net/faqs/solaris8/ (Ola Eriksson's FAQ for Sun Solaris )
http://wks.uts.ohio-state.edu/sun/faqs/s86faq.html ( Intel FAQ)
http://item-hunter.com/~chang/src/lecture/faq/sol2faq.html (한글)
http://hawk.com.kyungnam.ac.kr/~opti21/unix/faq/index.html (han.comp.sys.sun FAQ 한글)

4) Sun Managers Summaries & Archives Search
http://www.sunmanagers.org ( 공식 홈페이지)
http://www.sunmanagers.org/archives.html ( 아카이브 리스트)
http://www.latech.edu/sunman-search.html ( 아카이브 검색)
http://news.google.co.kr ( 모든 뉴스 그룹 검색)

5) 장비 관련
http://sunsolve.sun.com/handbook_pub/Systems/ ( SUN 시스템 핸드북)
http://sunsolve.sun.com/handbook_pub/Devices/ ( SUN 부붐별 핸드북)


2부. 솔라리스의 접근과 사용자 관리

1. 시스템의 접근

1) Consol로 직접 로그인과 telnet, rsh, ssh (Shell 사용), Xmanager(Windows 사용) 등의 원격 로그인
- telnet : 이 기종간의 시스템 접근 가능 ( Port 23)
- rsh : Unix 기종간의 시스템 접근 가능
- ssh: Unix 기종간의 시스템 접근 가능 (보안쉘, Port 22)
http://www.openssl.org
http://www.openssh.org

2) 시스템 사용자: root와 일반 사용자
root: 슈퍼유저, 시스템 어드민, 초기 설치 시 패스워드 결정, 모든 권한, 기본쉘은 /sbin/sh
일반유저: 일반사용자.

3) 관련 파일
/etc/passwd 파일
user1:x:102:10:User Account 1: /export/home/user1:/bin/ksh
/etc/shadow 파일
user01:haN3NqcDfof.2:::::::
/etc/group 파일
other::1:user01,user02

4) 사용자 관리
/usr/bin/passwd 명령 : 자신의 패스워드 변경 (일반 유저), 다른 사용자의 패스워드 변경(root)
* 패스워드 생성 규칙(일반유저)
- 6~8 문자
- 두 개의 알파벳과 하나의 특수문자 또는 숫자 포함
- 로긴 이름과 다르게
- 변경 전 패스워드와 다르게
- 공백을 포함할 수 있다.

/usr/sbin/groupadd 명령 : 그룹을 생성 ( GID는 100 ~ 60000 번까지)
ex) # groupadd -g 100 class1

/usr/sbin/useradd 명령 : 유저를 생성 ( UID는 100 ~ 60000 번까지)
ex) # useradd -u 501 -g 100 -d /export/home/user01 -m -c "User Account 1" -s /bin/ksh user01

/usr/sbin/groupdel 명령 : 그룹을 제거
ex) # groupdel class1

/usr/sbin/userdel 명령: 유저를 제거
ex) # userdel [-r] user01

/usr/sbin/usermod, /usr/sbin/groupmod 는 수정 시 사용

* 어드민 GUI 툴 : 사용자, 그룹, 호스트, 프린터, 직렬포트, 소프트웨어, 14(sysadmin) 그룹은 사용가능.
/usr/bin/admintool


3부. 사용자 기본 명령

사용자 기본명령은 다음을 참고한다.
http://www.gohtml.pe.kr/lec/unix1.html
http://unix.co.kr/data/solaris/?p=16
http://whoami21.com/~kimlee/telnet1.htm
http://www.hwaseong.ms.kr/unix1.htm

1. 정보 출력

1) 시스템 이름 및 OS버전 확인
$ uname -a
$ cat /etc/release (=> OS의 릴리즈 확인)

2) 현재 로그인한 사용자 정보
$ who (/var/adm/utmpx)

3) 최근 로긴했던 사용자 정보 + 재 부팅 정보
$ last (/var/adm/wtmpx)
$ last user01
$ last reboot

4) 프로세스 정보
$ ps -ef | grep netscape
$ pgrep netscape (solaris 8부터)

5) 날짜 및 시간 출력
$ date
$ cal

6) 맨 페이지
$ man man
$ man -k calendar
cf. # catman -w (관리자 root가 실행)
$ man -s5 man (5 section manual)

- Section Definition -
관련 파일: /usr/share/man/man.cf, /usr/share/man/entities/*
1: User Commands
1M: System Administration Commands
2: System Calls
3: Basic Library Functions
4: File Formats
5: Standards, Environments and Macros
6: Demos
7: Device and Network Interfaces
9: Device Driver Interfaces

- 맨페이지 위치
/usr/share/man/
/usr/openwin/man/
/usr/dt/man

- 맨페이지 추가
# vi /etc/profile
...
MANPATH=/usr/share/man:/usr/openwin/man:/usr/dt/man:<추가할 맨페이지 디렉토리>
export MANPATH

2. 파일과 디렉토리 접근

주의 - 파일과 디렉토리, 명령 등은 모두 대소문자를 구별한다.

1) 패스이름
- 절대경로(Absolute Path Name) : root(/)를 기준으로 기술, /usr/local/src/file1
- 상대경로(Relative Path Name) : 현재 디렉터리를 기준으로 .또는 ..으로 기술, dir1/subdir1/file2

2) 관련 명령어
- ls(list) : 파일 또는 디렉터리의 리스트를 출력
- pwd(print working directory) : 현재 작업 디렉터리의 위치를 출력
- cd(change directory) : 작업 디렉토리를 변경

3. 파일과 디렉토리를 다루는 명령

- file : 파일 타입을 확인 (text, data, executable or binary)
- cat(catenate) : 주로 짧은 text파일을 볼 때
- more : 주로 긴 text파일을 볼 때
- strings: 바이너리 파일의 문자열만 보고자 할 때
- head: text파일의 머리부분(디폴트 10줄)만 보고자 할 때
- tail: text파일의 끝부분(디폴트 10줄)만 보고자 할 때 (tail -f /var/log/messages)
- wc(word count) : text파일의 라인 수, 단어 수, 문자 수를 알고자 할 때 ( wc file1)
- touch : 빈 파일을 생성할 때
- tee : 화면 출력과 파일 저장을 동시에 하고자 할 때 (ls -lR | tee logfile | more)
- mkdir : 디렉토리를 생성할 때
- rmdir : 빈 디렉토리를 제거할 때
- rm -r : 디렉토리를 제거할 때
- cp : 파일을 복사할 때
- cp -r : 디렉토리를 복사할 때
- mv : 파일 또는 디렉토리를 이름변경 또는 옮길 때

4. 파일과 텍스트 검색

- find : 파일 또는 디렉토리를 찾을 때
$ find / -name core
$ find ~ -name core -exec rm {} ;
$ find . -mtime +90
$ find ~ -size +57
$ find /usr -name '*tif'
- cmp, diff : 두 파일의 차이를 비교할 때
- sort : 파일의 내용 또는 리스트를 정렬할 때
$ ls -l | sort
$ du -ks /etc/* | sort -nr
- grep : 파일의 특정 문자열이 있는 라인을 출력
$ grep user01 /etc/passwd
$ ps -ef | grep ksh

5. 파일의 보안

$ ls -l
-rw-r--r-- 1 borisu staff 8239 2002년 8월 29일 backup.txt
-rw-r--r-- 1 borisu staff 2361 2002년 9월 3일 memo.txt
drwx------ 5 borisu staff 512 5월 20일 11:55 shell/
-rw-r--r-- 1 borisu staff 1660 4월 25일 01:37 ssh-setup.sh

File Type: -, f , d, c, b
Permission: read(r:4), write(w:2), execute(x:1)
User, Group, Others

1) 퍼미션 설정
$ chmod u+x file1 (symbolic mode)
$ chmod a=rx file1 (symbolic mode)
$ chmod 644 file1 (octal mode)

2) 소유권 변경 (root)
# chown user01 file1 (파일 소유자 변경 시)
# chgrp class1 file1 (파일 그룹 소유자 변경 시)
# chown -R user01:class1 dir1 (디렉토리 변경 시)

3) umask : 기본 퍼미션 제한
$ umask (확인)
$ touch file1
$ mkdir dir1
$ umask 027 (재설정)
$ touch fie2
$ touch dir2

6. Visual Editor (VI)

유닉스의 기본 편집기는 vi가 있고, 그밖에 emacs 등이 있다. GUI로는 dtpad가 있다.

- vi의 세가지 모드
Command Mode (명령 모드)
Edit Mode (편집 모드)
Last Line Mode (마지막 명령 라인 모드)

- vi 레퍼런스 카드 및 메뉴얼
http://kldp.org/응용_프로그램/에디터/Vi/


7. Archiving User Data

1) Archive 관련 명령

tar - Creates and extracts files from a tape device or file archive
compress, uncompress - Compress and uncompress a file
zcat - Uncompress a compressed file and sends the output to the screen without changing the compressed file.
gzip, gunzip - Compresses and uncompressed
gzcat - Uncompress a gzipped file and sends the output to the screen without changing the gzipped file
zip, unzip - Packages and compresses files and uncompressed files.
jar - Packages and comresses multiple files to a single archive file
cpio - Copies and extracts files fro a file archive or tape device.

[ tar ]

내용만 볼 때: tar tvf name.tar
풀 때 : tar xvf name.tar
만들 때 : tar cvf name.tar file1 file2 file3
tar cvf name.tar dir1

$ cd
$ mkdir testdir
$ cd testdir
$ cp /etc/profile file1
$ man ls | col -b > file2
$ tar cvf first.tar file1 file2
$ rm file? ; ls
$ tar tvf first.tar
$ tar xvf first.tar

$ cd ..
$ tar cvf second.tar testdir
$ rm -rf testdir
$ tar tvf second.tar
$ tar xvf second.tar

[ compress & uncompress ]

$ compress second.tar
$ ls
$ uncompress second.tar.Z
$ tar xvf second.tar

cf. zcat second.tar.Z | tar xvf -
cf. compress -dc second.tar.Z | tar xvf -
cf. uncompress -c second.tar.Z | tar xvf -

[ gzip ]

$ cd
$ cd ..
$ ls
$ tar cvf /var/tmp/myhome.tar user01
$ cd /var/tmp; ls
$ gzip myhome.tar
$ ls

$ gzip -d myhome.tar.gz
$ tar tvf myhome.tar
$ tar xvf myhome.tar

cf. gzcat myhome.tar.gz | tar xvf -
cf. gzip -dc myhome.tar.gz | tar xvf -
cf. gunzip -c myhome.tar.gz | tar xvf -
cf. gtar xvfz myhome.tar.gz

[ jar ]
$ jar cvf dir1.jar dir1
$ jar tvf dir1.jar
$ jar xvf dir1.jar

8. 원격지 접속

원격지 접속은 telnet, rlogin, ftp, ssh등이 있다.

1) telnet
원격 호스트의 user name과 password가 필요
$ telnet host1
...(접속해서 사용)
$ exit (로그 아웃)

2) rlogin

원격 호스트에서 허락된 호스트 또는 유저의 경우 패스워드가 필요 없다.
자세한 사용법은 다음을 참고한다.
http://nscp.upenn.edu/aix4.3html/cmds/aixcmds4/rlogin.htm

- 일반유저: /etc/hosts.equiv, $HOME/.rhosts
- root : /.rhosts
- 파일 형식 : 호스트 명 유저

$ rlogin host2
...(접속해서 사용)
$ exit (로그 아웃)

cf. rsh host1 hostname
cf. rcp file1 host1:/tmp

3) ssh (secure Shell)

명령어: ssh, scp, sftp
관련사이트:
http://www.openssl.org
http://www.openssh.org
관련 문서:
ssh howto
http://kldp.org/~eunjea/ssh/index.html
ssh install for solaris
http://www.sunfreeware.com/openssh.html

4) ftp

[ 접속 및 연결 끊기 ]

1) 일반 유저로 로긴
$ ftp server_name
또는
$ ftp
ftp> open server_name
ftp> user login_id
ftp> close
ftp> open new_server
ftp> quit

2) Anonymous 로긴
$ ftp server_name
Login: ftp ( or anonymous)
password: user01@suned.co.kr

[ 기본 설정 옵션 ]

ftp> hash (on/off: 전송상태를 표시)
ftp> ver (on/off: Verbose mode)
ftp> bin (Binary mode)
ftp> asc (ASCII mode)
ftp> prompt (on/off: 다중 파일 전송시 프롬프트 on/off)

[ 기본 명령 ]

ftp> cd (디렉토리를 옮길 때: REMOTE )
ftp> ls (디렉토리 내용을 볼 때: REMOTE )
ftp> pwd (현재 디렉토리 위치 확인: REMOTE)

ftp> lcd (디렉토리를 옮길 때: LOCAL )
ftp> !ls (디렉토리 내용을 볼 때: LOCAL )
ftp> !pwd (현재 디렉토리 위치 확인: LOCAL)
ftp> ! (Shell로 잠시 빠져나감: LOCAL)

[ 파일 전송 ]

ftp> get remote_file [local_file] (받을 때)
ftp> mget file1 file2 file3 file4 (여러 파일을 받을 때)

ftp> put local_file [remote_file] (올릴 때)
ftp> mput file1 file2 file3 file4 (여러 파일을 받을 때)

[ 기타 명령어 ]

ftp> del file_name (파일 지우기: REMOTE)
ftp> mkdir dir_name (디렉토리 만들기: REMOTE)
ftp> help (도움말 보기: REMOTE)

5) X 서버로의 접근
윈도우용 Client프로그램으로는 Xmanager가 유명하다. 다음 문서를 참조한다.
- 사용법
http://compedu.inue.ac.kr/~chlee56/wowlinux/xmanager.htm
- 다운로드
http://netsarang.co.kr/download/download.html

9. 시스템 프로세스

process : 프로그램이 메모리에 올라와 동작하고 있는 상태.
PID : 프로세스의 고유 ID (커널이 관리)
Daemon: 백그라운드로 실행, 부팅 시 동작, 서버 프로세스

1) 프로세스 정보
$ ps -ef | more
UID PID PPID C STIME TTY TIME CMD
root 0 0 0 4월 25 ? 0:00 sched
root 1 0 0 4월 25 ? 0:05 /etc/init -
root 2 0 0 4월 25 ? 0:00 pageout
root 3 0 0 4월 25 ? 86:09 fsflush
root 279 1 0 4월 25 ? 0:00 /usr/lib/saf/sac -t 300
root 204 1 0 4월 25 ? 0:00 /usr/lib/utmpd
root 134 1 0 4월 25 ? 0:02 /usr/sbin/rpcbind
$ ps -ef | grep lp
$ pgrep -l lp (solaris 8부터)

2)프로세스 종료

- 시그널 정의
$ man -s 3HEAD signal

Name Value Default Event
SIGHUP 1 Exit Hangup (see termio(7I))
SIGINT 2 Exit Interrupt (see termio(7I))
SIGKILL 9 Exit Killed
SIGTERM 15 Exit Terminated (==> Control + C)

- 프로세스 종료
$ kill [-signal] PID ...
$ kill
$ kill -9
$ kill -KILL
$ pgrep -l mail
215 sendmail
12047 dtmail
$ kill 12047
$ pkill -KILL 프로세스 이름

- 자신이 사용하는 워크스테이션이 윈도우 hang시 처리요령
다른 시스템에서 다음과 같이 한다.
$ telnet (또는 rlogin) host1
$ pkill -9 <자신의 쉘이름, ex) ksh>
또는
$ pkill -KILL <자신의 쉘이름 ex) ksh>

3) 잡 제어 ( Job Control )
여러 개의 작업을 수행하고 이를 제어할 수 있다. 단 본쉘(sh)는 불가

$ find . -name core > list & ( Job을 background로 실행)
$ jobs ( Job을 확인)
[1] = running find . -name core > list &
$ fg %1 ( 백그라운드 잡을 포그라운드로)
Control + Z ( 포그라운드 잡을 중지)
$ jobs ( job을 확인)
$ bg %1 (중지된 잡을 백그라운드로 실행)
$ kill %1 (잡을 종료)


10. 쉘 (Shell)

명령해석기, 사용자 인터프리터라고도 한다. 쉘 각각의 자세한 문서는 다음을 참고한다.
http://dir.yahoo.com/Computers_and_Internet/Software/Operating_Systems/UNIX/Shells/



Shell 종류 Shell 프로그램 위치 프롬프트 프롬프트 변수 쉘초기화 파일
Bourn Shell /bin/sh, /sbin/sh #, $ PS1 /etc/profile, $HOME/.profile
Korn Shell /bin/ksh #, $ PS1 /etc/profile, $HOME/.profile, $HOME/.kshrc
C Shell /bin/csh hostname#, hostname% prompt /etc/.login, $HOME/.cshrc, $HOME/.login


- 현재 사용쉘 확인
$ ps
$ echo $SHELL
- 기타 쉘
bash, tcsh, zsh, ssh
- 관련 디렉토리
/etc/skell : 샘플 초기화 파일 위치

1) 입출력의 전환
$ mailx user1 < ~/myfile ( 입력의 방향을 파일로부터 )
$ ps -ef > file_list (출력의 방향을 파일로 전환)
$ cat /etc/passwd >> file_list (출력의 방향을 파일로 전환, append)
$ ls /var /no 1> dat 2>&1

2) 파이프 (프로세스 간 통신)
$ who | wc -l
$ ls -F /etc | grep "/"
$ head -10 file1 | tail -3 | lp
$ ps -ef | tail +2 | wc -l

3) Meta Character
- Backslashes ()
- Dollar signs ($)
- Back quotation marks (` `)
- quotation marks (' ')
- double quotation marks (" ")

$ rm *


$ echo '$SHELL'
$ echo "$SHELL"
$ echo "$SHELL"

$ echo date
$ echo `date`

11. Korn Shell Features

1) Aliases
alias aliasname="command"
ex)
$ alias h=history
$ alias c=clear
$ alias home='cd;ls'
$ alias ls='ls -F'
$ alias copy="cp -r"

2) Command line Editing
- Command line 편집 기능
$ set -o vi
$ [esc] + k (=> vi command mode )

3) History
- 128개를 유지 ( 변수 HISTSIZE -> .kshrc)
- $HOME/.sh_history (변수 HISTFILE -> .kshrc)
ex)
$ history ( 최근 16개 명령을 list)
$ history 23 (23 ~ 최근명령)
$ history -10 (최근 명령 10개)
cf)
$ r ( 가장 최근 명령 실행)
$ r p ( p로 시작된 가장 최근 명령어 실행)
$ r 23 ( 히스토리가 23번인 명령어 실행)

4) Ignore Control-d (ignoreeof)
- Control-d의 기능: 1) EOF, 2) EXIT
ex)
$ ^d
$ set -o ignoreeof (=>설정 eof:on, exit:off)
$ ^d
$ set +o ignoreeof (=>해제 eof:on, exit:on)

5) .profile과 분리된 초기화 파일 (.kshrc)
- $HOME/.kshrc (C쉘: $HOME/.cshrc)
- 환경변수는 .profile에 기록
- 기타변수 및 콘쉘 제공 기능 등은 .kshrc에 기록
ex)
$ . ~/.kshrc ( 재 초기화 )

6) Job Control
ex)
$ find / -name core -exec rm {} ;
^Z (=> suspend)
[1] + stop ... (=> [1]은 잡번호)
$ bg %1 ( 1번 잡을 백그라운드로 실행)
$ jobs ( 잡 확인)
$ fg %1 ( 1번 잡을 포그라운드로 실행)
$ ^+C ( 포그라운드 잡을 종료)
$ jobs

7) 덮어쓰기 방지 (noclobber)
ex)
$ touch testfile
$ cat /etc/passwd > testfile
$ cat testfile
$ cat /etc/profile > testfile
$ cat testfile
$ set -o noclobber
$ cat /etc/hosts > testfile ( => 경고메시지가 떨어짐)

12. Korn Shell Initialization

- Korn Shell 초기화 순서

(1) /etc/profile
(2) $HOME/.profile
(3) $HOME/.kshrc


1) $HOME/.profile 설정하기

$ vi ~/.profile

stty cs8 erase '^H' -istrip ( -> 터미널 설정 )

PATH=$PATH:/usr/local/bin:/usr/ccs/bin:/usr/ucb (-> Path 설정)
EXINIT="set ai nu ts=3 showmode" (-> vi 환경설정)
ENV="$HOME/.kshrc" ( -> .kshrc 확장쉘 변수 설정)
LPDEST="lp1" (-> Default Printer Set )
EDITOR="vi" ( -> Default Editor Set )

export PATH EXINIT ENV LPDEST EDITOR ( 전역변수 선언 )

$ . ~/.profile ( .profile 재 초기화)


2) $HOME/.kshrc 설정하기

$ vi ~/.kshrc

HOSTNAME=`uname -n`
PS1='[$LOGNAME@$HOSTNAME:$PWD]$ ' (-> 프롬프트 변경)

export PS1 HOSTNAME (-> 전역변수 선언)

## My Alias Def (-> 엘리어스 설정 )
alias ls='ls -F'
alias rm='rm -i'
alias mv='mv -i'
alias cp='cp -i'
alias home='cd;ls'
alias c=clear
alias h=history
alias d=date

## Other ksh feature set
set -o noclobber
set -o vi
set -o ignoreeof

$ . ~/.kshrc (-> .kshrc 재 초기화)


13. 쉘 프로그래밍

- 쉘 프로그래밍 강좌

http://kldp.org/KoreanDoc/Shell_Programming-KLDP
http://myhome.naver.com/yskim511/21.htm

4부. 시스템 어드민

1. UNIX 파일의 종류와 특성

- 파일은 파일이름, inode, data block으로 구성되어 있다.
- 파일의 종류는 ls -l , ls -F, file 등의 명령어로 확인할 수 있다.

1) 파일의 종류
-: Regular File (Ordinary File) : vi, ed, cp, mv, cat, touch, cc 등에 의해 생성
d: Directory File : mkdir, cp -r 등에 의해 생성
c,b: Special File ( 디바이스 파일) : 장치 파일이며 drvconfig, devfsadm등에 의해 생성
brw-r----- 1 root sys 32, 0 2000년 7월 4일 /devices/sbus@1f,0/SUNW,fas@e,8800000/sd@0,0:a
crw-r----- 1 root sys 32, 0 2000년 7월 4일 /devices/sbus@1f,0/SUNW,fas@e,8800000/sd@0,0:a
l: Symbolic Link File: 심볼릭 링크 파일
lrwxrwxrwx 1 root root 12 2000년 7월 4일 /etc/hosts -> ./inet/hosts

$ ln -s file1 file2 (심볼릭 링크)
$ ln file2 file3 (하드 링크)
$ rm file1 (원본을 제거함)
$ cat file2 file3 ( file2는 볼 수 없음)

- 링크란 어떤 파일의 또 다른 이름이다.
- 하드링크는 같은 inode를 심볼릭 링크는 다른 inode를 갖는다.
- 하드링크는 디렉토리를 링크할 수 없다.
- 하드링크는 서로 다른 파일시스템 간에 링크할 수 없다.
- 하드링크는 원본파일의 데이터와 같은 데이터를 공유하며, 심볼릭 링크는 원본의 PATH값을 데이터로 갖는다.

- 심볼릭 링크의 예
/etc/hosts -> /etc/inet/hosts
/bin -> /usr/sbin
- 하드링크의 예
/etc/init.d/* -> /etc/rc#.d/*

2) inode
모든 파일은 하나의 inode를 가지며 이것은 해당 파일에 대한 정보를 가진다. inode table은 inode들로 구성되어 있으며
하나의 inode는 ls-l정보, 데이터블록 포인터, shadow inode 포인터로 이루어져 있다. 포인터들이 가리킬 수 있는 데이터 블록의
사이즈는 최대 1T까지 가능하다.

- 파일과 파일시스템의 최대 사이즈
solaris 2.6 이전 : 2G (파일), 1TB (파일 시스템)
solaris 2.6부터 : 2G이상 1TB (파일), 1TB (파일 시스템)

파일의 경우 실재로는 866G까지 가능하며, 파일 시스템의 1T이상은 Virtual Volume(Meta Device, Veritas Volume Manager)을 구성해야 한다.


2. Boot PROM (Programmable Read Only Memory)

- PROM 관련 문서
Frequently Asked Questions about Sun NVRAM/hostid
http://www.squirrel.com/squirrel/sun-nvram-hostid.faq.html
Sun Flash PROM Guide for Workstations and Workgroup Servers - Standalone Version
http://www.sun.com/products-n-solutions/hardware/docs/pdf/802-3233-23.pdf
Updating the Flash PROM on the Ultra 1, Ultra 2, Ultra 450, and Sun Enterprise 450 Systems
http://docs.sun.com/db/doc/816-2583-10/6m8u2cukc?a=view
Updating the Flash PROM on the Sun Enterprise 3x00, 4x00, 5x00, and 6x00 Systems
http://docs.sun.com/db/doc/816-2583-10/6m8u2cukk?a=view


1) PROM이 하는 역할
- Test the system hardware (POST: Power on Self Test)
- Boot the operating system

[ POST ]
- Initialize the system
- Probes Memory and the CPU
- Probes devices, interprets their devices and build a dev tree
- Install the console

2) PROM으로 가는 방법
- # halt
- # init 0
- # /usr/sbin/shutdown -y -g0 -i0
- Stop + A ( 부팅 시 바로 누르거나 시스템 hang시에만 적용)

3) PROM에서의 얻을 수 있는 정보
OK banner ( 시스템 모델명, 메모리, hostid, Ethernet Addr, Boot PROM 버전 )
OK probe-scsi ( 연결된 SCSI 장치들의 정보 확인)

4) PROM 버전
1.x : Original Sparc Boot PROM
2.x : Open Boot PROM (OBP) => sparc 시리즈 (sparc4,5,10,20...등)
3.x : Open Boot PROM with Flash Update (Flash PROM) => ultra sparc 시리즈

5) PROM에서 사용되는 명령어
OK help (도움말)
OK probe-scsi (스카시 장비 체크)
OK prebe-ide ( IDE장비 체크)
OK devalias (PROM에 설정되어 있는 장비의 물리적 장치명과 별명)
OK show-devs ( PROM에 설정되어 있는 물리적 장치의 트리구조 보기)
OK printenv (PROM에 설정되어 있는 부트 파라미터의 기본 값을 확인)
OK setenv
OK reset ( setenv에 의해 변경된 파라미터 값들을 재 저장하는 명령)
OK set-default ( 지정한 파라미터 값을 초기화)
OK set-defaults ( 지정한 모든 파라미터 값들을 초기화 => STOP + N)

6) PROM의 부트 명령어
OK boot [ device name ] -[option]

OK boot [disk, net, cdrom] (=> default는 disk)
OK boot -s (싱글유저로 부팅)
OK boot -a (Interactive 모드로 부팅)
OK boot -r (Reconfiguration Boot => 장치를 추가했을 때)

7) OS의 PROM관련 시스템 명령어
# eeprom (확인)
# eeprom boot-device ( 확인)
# eeprom auto-boot?=false (설정)
# eeprom 'auto-boot?=false' (csh의 경우)


3. 부트 프로세스 (Boot Process)

1) 부팅의 단계는 다음과 같다.

(1) 부트 PROM 단계
- PROM이 POST(Power On Self Test)를 실행
- 부트 디바이스를 결정
- 부트 프로그램인 bootblk를 로드

(2) 부트 프로그램 단계
- bootblk는 두 번째 부트 프로그램인 ufsboot를 로드
- ufsboot는 커널을 로드( 32bit, 64bit kernel)

(3) 커널 초기화 단계
- 커널(/kernel/unix, /usr/kernel, /platform/`uname -m`/kernel)은 자신을 초기화하고 모듈을 로드 한다.
- Configuration 파일인 /etc/system을 읽는다.

(4) init 단계
- 커널이 /sbin/init을 실행한다.
- init은 /etc/initab을 읽는다.
- 필요한 데몬을 실행한다.


2) 32 또는 64 bit 커널의 확인 및 변경
64bit의 경우 OS는 Solaris7부터, 시스템 아키텍처는 sun4u(ultra sparc) 이상에서이다.

- 확인하기
# isainfo -kv
32-bit sparc kernel modules (=> 32일 경우)
64-bit sparc kernel modules (=> 64일 경우)

- 64bit -> 32bit
OK boot kernel/unix
- 32bit -> 64bit
OK boot kernel/sparcv9/unix

cf. 64bit 커널 지정하기
# vi /platform/sun4u/boot.conf
...
ALLOW_64BIT_KERNEL_ULTRASPARC_1_CPU=true

3) 커널 파라미터 수정
보다 자세한 사항은 다음을 참조한다.
- Solaris Tunable Parameters Reference Manual
http://docs.sun.com/db/doc/816-0607

i) 최대 사용자수 지정( maxusers)
set maxusers=100

ii) 최대 프로세스 개수 지정 (max_nprocs)
set max_nprocs=100

iii) 가상 단말기 개수 지정 ( pt_cnt)
- 리부팅시에는 반드시 reconfiguration boot
set pt_cnt=128
set npty=128

iiii) 최대 파일 디스크립트 개수 지정하기 (rlim_fd_cur)
- 하나의 프로세스가 동시에 오픈할 수 있는 최대 파일 개수
- # ulimit descriptors 512
- # ulimit -n 512
set rlim_fd_max=1500
set rlim_fd_cur=128

iiiii) 최대 UFS inode수 지정( ufs_ninode)
- 시스템에서 파일을 오픈 하면 하나의 파일에 대하여
하나의 ufs_ninode를 가지게 된다.
set ufs_ninode=10000

[ How to Setup Kernel Parameter ]

i) backup /etc/system file
# cp /etc/system /etc/system.org

ii) Edit /etc/system file
# vi /etc/system
... (다음을 추가)
set pt_max_pty=10

iii) Reconfiguration Boot
# reboot -- -r

iiii) 윈도우에서 터미널을 여러 개 띄워 max값을 확인

[ How to recover /etc/system File ]

i) Edit /etc/system file
# vi /etc/system
... (다음을 추가)
exclude: drv/dad

ii) reboot
# reboot

iii) Boots the system interactively
OK boot -a
...
Enter filename of kernel (kernel/unix):
Enter default directory for modules (kernel, /usr/kernel):
Enter name of system file (etc/system): /etc/system.org
Enter default root file system type (ufs):
Enter physical name of root device:

iiii) Recover /etc/system file
# cp /etc/system.org /etc/system
# init 6


4. init 단계

kernel은 init을 실행하고 init은 /etc/inittab파일을 일고 초기화 하며 해당 설정대로 관련 명령을
수행한다. 시스템 운영에 필요한 데몬 들을 실행하고 동작레벨(Run Level)을 관리하는 것이 주 역할이다.

1) /etc/inittab 파일
ap::sysinit:/sbin/autopush -f /etc/iu.ap (*)
ap::sysinit:/sbin/soconfig -f /etc/sock2path (*)
fs::sysinit:/sbin/rcS sysinit >/dev/msglog 2<>/dev/msglog

is:3:initdefault: (*)
p3:s1234:powerfail:/usr/sbin/shutdown -y -i5 -g0 >/dev/msglog 2<>/dev/msglog (*)
sS:s:wait:/sbin/rcS >/dev/msglog 2<>/dev/msglog

s0:0:wait:/sbin/rc0 >/dev/msglog 2<>/dev/msglog

s1:1:respawn:/sbin/rc1 >/dev/msglog 2<>/dev/msglog

s2:23:wait:/sbin/rc2 >/dev/msglog 2<>/dev/msglog

s3:3:wait:/sbin/rc3 >/dev/msglog 2<>/dev/msglog

s5:5:wait:/sbin/rc5 >/dev/msglog 2<>/dev/msglog

s6:6:wait:/sbin/rc6 >/dev/msglog 2<>/dev/msglog

fw:0:wait:/sbin/uadmin 2 0 >/dev/msglog 2<>/dev/msglog

of:5:wait:/sbin/uadmin 2 6 >/dev/msglog 2<>/dev/msglog

rb:6:wait:/sbin/uadmin 2 1 >/dev/msglog 2<>/dev/msglog
sc:234:respawn:/usr/lib/saf/sac -t 300 (*)
co:234:respawn:/usr/lib/saf/ttymon -g -h -p "`uname -n` console login: " -T sun -d /dev/console -l console -m ldterm,ttcompat (*)

2) Run Level
0 : PROM monitor level. 부트 PROM의 OK 프롬프트 상태로 시스템을 종료하기 위한 Level이다. (==> halt, init 0, shutdown -i0)
s,S : Single User(관리자) 상태로서 마운트된 모든 파일 시스템을 접근할 수 있다.
1 : Single User(관리자) 상태로서 사용 가능한 모든 파일 시스템을 접근할 수 있다.
2 : 다중 사용자 레벨 (Multi User Level)
3 : 다중 사용자 레벨 (Multi User Level) with NFS(Network File Service)
4 : User Define Level (사용되지 않음)
5 : Shutdown(0) and power off (==> poweroff , init 5, shutdown -i5 )
6 : Shutdown(0) and reboot (==> reboot, init 6, shutdown -i6)

3) 각 Run Level별 데몬 프로세스의 실행
init --> /sbin/rc# --> /etc/rc#.d/{S##스크립트, K##스크립트} --> 데몬 실행
root(관리자) --> /etc/init.d/스크립트 --> 데몬 종료, 재실행

/etc/init.d/스크립트 ==> /etc/rc#.d/{S##스크립트, K##스크립트}는 하드링크 됨. 관련 파일 검색은 다음과 같다.
# ls -i /etc/init.d/nfs.server
28562 /etc/init.d/nfs.server*
# find /etc -inum 28562
/etc/init.d/nfs.server
/etc/rc0.d/K28nfs.server
/etc/rc1.d/K28nfs.server
/etc/rc2.d/K28nfs.server
/etc/rc3.d/s15nfs.server
/etc/rcS.d/K28nfs.server

4) RC 스크립트 추가하기

(1) Edit banner script in /etc/init.d
# cd /etc/init.d
# cp lp banner
# vi banner
#!/bin/sh
#
# Boot Process test script
#

case "$1" in
'start')
[ -f /usr/bin/banner ] && /usr/bin/banner "SYSTEM UP"
/usr/bin/audioplay /usr/demo/SOUND/sounds/rooster.au
;;
'stop')
[ -f /usr/bin/banner ] && /usr/bin/banner "SYSTEM DOWN"
/usr/bin/audioplay /usr/demo/SOUND/sounds/flush.au
;;
'*')
echo "Usage: $0 { start | stop }"
exit 1
esac
exit 0

(2) Test script
# chmod 744 banner
# chown root:sys /etc/init.d/banner
# ./banner start
# ./banner stop

(3) link to /etc/rc2.d
# cd /etc/rc2.d
# ln /etc/init.d/banner S22banner

(4) link to /etc/rcS.d
# cd /etc/rcS.d
# ln /etc/init.d/banner K99banner

(5) link to /etc/rc0.d
# cd /etc/rc0.d
# ln /etc/init.d/banner K99banner

(6) Test init state
# init s
...
# init 6
...
# halt


5. Device Configuration

1) 장치 명
- Logical Device Name ( 관리자)
- Physical Device Name ( kernel, system )
- Instance Name (kernel이 부팅 시 빠른 참조를 위해)

2) Logical Device Name
/dev/[r]dsk/c#t#t#d#s#
c# : Controller Number
t# : Target Number
d# : Disk Number
s# : Slice or partition number (0-7)
예) /dev/dsk/c0t0d0s0(raw device) /dev/rdsk/c0t3d0s (block device)

3) Physical Device Name
# ls -lL /dev/dsk/c0t0d0s0
brw-r----- 1 root sys 32, 0 2000년 7월 4일 /devices/sbus@1f,0/SUNW,fas@e,8800000/sd@0,0:a
# ls -lL /dev/rdsk/c0t0d0s0
crw-r----- 1 root sys 32, 0 2000년 7월 4일 /devices/sbus@1f,0/SUNW,fas@e,8800000/sd@0,0:a

4) Instance Name
시스템 커널에 의해 부여된 Physical Device Name의 축약된 이름이다.
# cat /etc/path_to_inst
"/sbus@1f,0" 0 "sbus"
"/sbus@1f,0/SUNW,fas@e,8800000" 0 "fas"
"/sbus@1f,0/SUNW,fas@e,8800000/sd@f,0" 14 "sd"
"/sbus@1f,0/SUNW,fas@e,8800000/st@6,0" 6 "st"
"/sbus@1f,0/SUNW,fas@e,8800000/sd@d,0" 12 "sd"
"/sbus@1f,0/SUNW,fas@e,8800000/st@4,0" 4 "st"
"/sbus@1f,0/SUNW,fas@e,8800000/sd@e,0" 13 "sd"
"/sbus@1f,0/SUNW,fas@e,8800000/st@5,0" 5 "st"
"/sbus@1f,0/SUNW,fas@e,8800000/sd@b,0" 10 "sd"
"/sbus@1f,0/SUNW,fas@e,8800000/st@2,0" 2 "st"
"/sbus@1f,0/SUNW,fas@e,8800000/sd@c,0" 11 "sd"
"/sbus@1f,0/SUNW,fas@e,8800000/st@3,0" 3 "st"
"/sbus@1f,0/SUNW,fas@e,8800000/st@0,0" 0 "st"
"/sbus@1f,0/SUNW,fas@e,8800000/sd@a,0" 9 "sd"
"/sbus@1f,0/SUNW,fas@e,8800000/st@1,0" 1 "st"
"/sbus@1f,0/SUNW,fas@e,8800000/sd@6,0" 6 "sd"
"/sbus@1f,0/SUNW,fas@e,8800000/sd@4,0" 4 "sd"
"/sbus@1f,0/SUNW,fas@e,8800000/sd@5,0" 5 "sd"
"/sbus@1f,0/SUNW,fas@e,8800000/sd@2,0" 2 "sd"
"/sbus@1f,0/SUNW,fas@e,8800000/sd@3,0" 3 "sd"
"/sbus@1f,0/SUNW,fas@e,8800000/sd@0,0" 0 "sd"
"/sbus@1f,0/SUNW,fas@e,8800000/sd@1,0" 1 "sd"
"/sbus@1f,0/SUNW,fas@e,8800000/sd@8,0" 7 "sd"
"/sbus@1f,0/SUNW,fas@e,8800000/sd@9,0" 8 "sd"
"/sbus@1f,0/sbusmem@2,0" 2 "sbusmem"
"/sbus@1f,0/sbusmem@3,0" 3 "sbusmem"
"/sbus@1f,0/sbusmem@0,0" 0 "sbusmem"
...

5) 디바이스의 재구성

장치를 새로 장착하고 /devices 및 /dev의 장치파일을 재구성하기 위한 명령어는 다음과 같다.
- (재)부팅이 필요
i) # reboot -- -r
ii) OK boot -r
iii) # touch /reconfigure
# reboot ( or init 6)
- (재)부팅이 불필요
i) # drvconfig -i sd ( Solaris 2.6부터 )
# disks (tapes, ports, devlinks)
ii) # devfsadm -c disk [ -c tape -c audio ]


6) 장치 추가 용례
- reconfigure file 생성
# touch /reconfigure
- 시스템의 정지
# init 5
- 시스템의 전원을 끈다
- 시스템에 새로운 디바이스를 연결한다.
- 외장형일 경우 외장 디바이스의 전원을 켠다.
- 시스템의 전원을 켠다.
- 부팅 후 추가된 장치의 Reconfiguration을 확인한다.

7) 장치의 연결확인
- PROM 단계에서
OK probe-scsi
- OS에서
# prtconf | grep -v not
# format (디스크의 경우, 확인만 하고 Control + d )
Searching for disks...done


AVAILABLE DISK SELECTIONS:
0. c0t0d0
/sbus@1f,0/SUNW,fas@e,8800000/sd@0,0
1. c0t1d0
/sbus@1f,0/SUNW,fas@e,8800000/sd@1,0
Specify disk (enter its number):


6. DISK, SLICE, FORMAT

1) Disk Label (VTOC: Volume Table Of Contents)
- 디스크의 파티션 테이블 (Partition Table)
- 디스크 디바이스를 구별하는 볼륨명(volume name)
- Optional Partition Tag (각 파티션의 표준 마운트 포인트 이름으로 디스크 라벨에서만 사용되고 OS에서는 사용되지 않는 제한된 값)
- Optional Partition Flag (각 파티션이 Writable이지 Mountable인지를 결정하는 값으로 디스크 라벨에서만 사용되고 OS에서는 사용되지
않는 제한된 값)

VTOC의 정보확인은 prtvtoc로 변경(파티션)은 format을 이용한다

# prtvtoc /dev/rdsk/c0t3d0s2 (=> VTOC 정보 확인)
# format

2) 파티션 정하기
솔라리스에서는 하드디스크의 파티션을 하기 위해 format이라는 utility를 사용한다.
솔라리스에서는 하나의 디스크에 최대 8개의 파티션 까지 나눌 수 있으며 2번은 전체를 나타낸다. 따라서 실제 파티션 수는 7개이다.
디스크를 추가하고 파티션을 하기 위한 자세한 사용법은 다음을 참조한다.
http://www.ussg.iu.edu/usail/peripherals/disks/adding/solaris.html
http://docs.sun.com/db/doc/805-7228/6j6q7uet8

# format (==> 포맷하고자 하는 디스크 번호를 선택)
AVAILABLE DISK SELECTIONS:
0. c0t0d0
/sbus@1f,0/SUNW,fas@e,8800000/sd@0,0
1. c0t1d0
/sbus@1f,0/SUNW,fas@e,8800000/sd@1,0
Specify disk (enter its number):

주의사항 1) 슬라이스 2번은 디스크 전체를 의미하므로 절대 수정하지 않는다.
주의사항 2) 파티션은 실린더 단위로 구성되는데 Offset이 정확히 일치해야 한다.
주의사항 3) 레이블 저장 명령 ( label)을 수행하지 않는다면 메모리에서만 변경되므로 디스크에는 영향을 주지 않는다.

[ 하드 디스크 추가하기 ]

# init 5
(디스크 연결하고 파워를 켠다)
OK probe-scsi
OK boot -r
# prtconf | grep -v not
# format (추가된 디스크를 선택하여 파티션 한다.)
# newfs /dev/rdsk/c0t1d0s6 (각 파티션을 파일시스템으로 만든다.)
# fsck /dev/rdsk/c0t1d0s6 (파일시스템을 체크한다.)
# mkdir /data (마운트할 디렉토리를 생성한다)
# mount /dev/dsk/c0t1d0s6 /data (마운트 한다)
# df -k 또는 mount (마운트 정보를 확인한다.)
# vi /etc/vfstab (해당 파티션의 정보를 추가하여 부팅 시 마운트 되도록 한다.)


7. Solaris 파일 시스템

1) 파일 시스템의 종류
- Disk Based File System : ufs(Unix File System), hsfs(High Sierra File System), pcfs(PC File System), udfs(Universal disk Format File System:sol7)
- Distributed File System: nfs ( Network File System)
- Pseudo File System: tmpfs(Temporary File System), swapfs(Swap File System), fdfs(File Descriptor File System), procfs(Process File System)

2) UFS의 파일 시스템 구조
- label(VTOC)(1 sector)
- Boot Bolck(15 sectors) : bootblk
- SuperBlock(16 sectors)
. 파일시스템 사이즈
. 레이블(파일 시스템명과 볼륨명)
. 파일 시스템의 Logical block 의 사이즈
. 마지막으로 업데이트된 날짜와 시간
. 실린더 그룹의 사이즈
. 실린더 그룹 안의 데이터 블록의 number의 fragment의 사이즈
. 데이터 블록의 요약 정보
. 파일 시스템 상태 값 (clean, stable, active, logging or unknown)
. 마지막 마운트 포인트의 경로명
- First Cylinder Group (보통 그룹당 16개의 실린더)
|__ backup Super Block
|__ Cylinder Group Block
| . inode 수
| . 실린더 그룹에서의 데이터 블록 수
| . 디렉터리의 수
| . free block의 map
| . 실린더 그룹에서 free block, free_inode, free fregment의 수
| . 사용된 inode의 map
|__ inode table
|__ Data Block(한 블록당 8K bytes, 1K는 fregment라 함)
- Second Cylinder Group
....

3) 파일 시스템의 생성
# newfs /dev/rdsk/c0t0d0s0
newfs: /dev/rdsk/c0t0d0s0 last mounted as /images
newfs: construct a new file system /dev/rdsk/c0t0d0s0: (y/n)? y
/dev/rdsk/c0t0d0s0: 4199508 sectors in 6603 cylinders of 4 tracks, 159 sectors
2050.5MB in 104 cyl groups (64 c/g, 19.88MB/g, 3392 i/g)
super-block backups (for fsck -F ufs -o b=#) at:
32, 40896, 81760, 122624, 162848, 203712, 244576, 285440, 325664, 366528,
407392, 448256, 488480, 529344, 570208, 611072, 651296, 692160, 733024,
773888, 814112, 854976, 895840, 936704, 976928, 1017792, 1058656, 1099520,
1139744, 1180608, 1221472, 1262336, 1302560, 1343424, 1384288, 1425152,
1465376, 1506240, 1547104, 1587968, 1628192, 1669056, 1709920, 1750784,
1791008, 1831872, 1872736, 1913600, 1953824, 1994688, 2035552, 2076416,
2116640, 2157504, 2198368, 2239232, 2279456, 2320320, 2361184, 2402048,
2442272, 2483136, 2524000, 2564864, 2605088, 2645952, 2686816, 2727680,
2767904, 2808768, 2849632, 2890496, 2930720, 2971584, 3012448, 3053312,
3093536, 3134400, 3175264, 3216128, 3256352, 3297216, 3338080, 3378944,
3419168, 3460032, 3500896, 3541760, 3581984, 3622848, 3663712, 3704576,
3744800, 3785664, 3826528, 3867392, 3907616, 3948480, 3989344, 4030208,
4070432, 4111296, 4152160, 4193024,

# newfs -m 1 /dev/rdsk/c0t0d0s0 ( Minfree 값을 조정, default는 10%)
# fstyp -v /dev/rdsk/c0t0d0s0 | grep minfree (기존의 minfree값을 확인)
# tunefs -m 2 /dev/rdsk/c0t0d0s0 ( newfs 이후 다시 재조정)


8. 파일 시스템 마운트 (File System Mount)

파일시스템을 사용하기 위해서는 트리구조의 임의 디렉토리(Mount Point)에 연결시켜야 하는데, 이를 마운트(mount)라 하며
마운트를 해제하는 것을 언마운트(unmount)라 한다.
마운트 포인트(mount point)는 빈 디렉터리로 파일 시스템을 연결할 포인트를 의미한다.

1) 마운트 정보
# mount
/ on /dev/dsk/c0t0d0s0 read/write/setuid/intr/largefiles/onerror=panic/dev=800000 on 금 4월 25 14:18:36 2003
/usr on /dev/dsk/c0t0d0s5 read/write/setuid/intr/largefiles/onerror=panic/dev=800005 on 금 4월 25 14:18:36 2003
/proc on /proc read/write/setuid/dev=3b00000 on 금 4월 25 14:18:35 2003
/dev/fd on fd read/write/setuid/dev=3bc0000 on 금 4월 25 14:18:37 2003
...

==> /etc/mnttab 을 참조함(마운트, 언마운트시 자동 업데이트. No Admin)

2) 마운트(Mount)
마운트는 mount 명령어를 이용하거나, 부팅 시 /etc/vfstab 파일 정보를 읽고 자동으로 마운트되는 두 가지 경우가 있다.

- 수동 마운트
# mount /dev/dsk/c0t3d0s7 /dir1
# mount -o ro /dev/dsk/c0t3d0s6 /dir2
# mount -o ro,nosuid,nolargefiles /dev/dsk/c0t0d0s5 /dir3
# mount -o ro,bg,soft host1:/usr/local /usr/local

- 자동 마운트
# mkdir /newdir
# mount /dev/dsk/c0t1d0s4 /newdir
# vi /etc/vfstab (엔트리를 추가)
# umount /newdir (테스트)
# mount /newdir (테스트)

cf. # mount /dir1 (=> /etc/vfstab에 이미 등록되어 있는 경우)
cf. # mountall [-r|-l] (=> /etc/vfstab에 "mount at boot" 값이 yes인 것만)

[ /etc/vfstab 파일 ]
#device device mount FS fsck mount mount
#to mount to fsck point type pass at boot options
#
#/dev/dsk/c1d0s2 /dev/rdsk/c1d0s2 /usr ufs 1 yes -
fd - /dev/fd fd - no -
/proc - /proc proc - no -
/dev/dsk/c0t0d0s1 - - swap - no -
/dev/dsk/c0t0d0s0 /dev/rdsk/c0t0d0s0 / ufs 1 no -
/dev/dsk/c0t0d0s5 /dev/rdsk/c0t0d0s5 /usr ufs 1 no -
/dev/dsk/c0t0d0s6 /dev/rdsk/c0t0d0s6 /var ufs 1 no -
/dev/dsk/c0t1d0s0 /dev/rdsk/c0t1d0s0 /usr/local ufs 2 yes -
/dev/dsk/c0t1d0s1 /dev/rdsk/c0t1d0s1 /export/home ufs 2 yes nosuid,rq
swap - /tmp tmpfs - yes -

3) 언마운트
# umount /dir1
# umount /dev/dsk/c0t3d0s7

cf. # umountall [-r|-l] (=> /, /usr, /var, /var/run, /proc, /dev/fd, /tmp 는 제외)

[ umount 되지 않은 경우 조치 사항 ]
- 자신 또는 다른 사용자가 해당 파일시스템을 사용하고 있다면, 모든 사용을 중지하고 작업 디렉터리도 다른 곳으로 이동한다.
- 특정 프로세스가 해당 파일시스템을 사용하는 경우 이를 종료한다.
# fuser -u /export/home
/export/home: 4006c(root) 6399c(user01)
# fuser -u -k /export/home
/export/home: 4006c(root)Killed 6399c(user01)Killed
또는
# umount -f /export/home ( Solaris 8 부터)

4) 플로피 디스크와 CDROM 마운트
솔라리스에서는 volume Management를 제공하며, 쉽게 사용할 수 있도록 자동으로 마운트하여 서비스 한다.

[ Volume Management ]
- 서비스 데몬 : /usr/sbin/vold
- 서비스 데몬 제어 스크립트 : /etc/init.d/volmgt {stop|start}
- 설정 파일 : /etc/vold.conf, /etc/rmmount.conf ( 특별히 설정을 할 필요는 없다)
- 플로피 마운트 포인트 : /floppy/floppy0
- CDROM 마운트 포인트 : /cdrom/cdrom0

[ 플로피의 마운트 ]
플로피를 삽입한다.
# volcheck
# mount (마운트 확인)
# cd /floppy/floppy0 (필요한 작업 수행)
# cd /
# eject floppy
# mount (언마운트 확인)

cf. 수동마운트
# /etc/init.d/volmgt stop
# pkill -9 vold
# mount -F pcfs /dev/diskette /mnt (=> msdos file system)
# mount /dev/diskette /mnt (=> ufs file system)

cf. 플로피 포맷
# fdformat -d /dev/rdiskette (msdos 포맷)
# newfs /dev/rdiskette (ufs포맷)

[ CDROM 마운트 ]
CDROM을 삽입한다.
# mount (마운트 확인)
# cd /cdrom/cdrom0 (필요한 작업 수행)
# cd /
# eject cdrom
# mount (언마운트 확인)

cf. 수동마운트
# /etc/init.d/volmgt stop
# pkill -9 vold ( vold가 종료되지 않는 경우에만)
# mount -F hsfs -o ro /dev/dsk/c0t2d0s0 /mnt

cf. CDROM이 빠져 나오지 않거나 마운트, 언마운트가 되지 않는 경우 조치사항
# ps -ef | grep vold (데몬을 확인)
# /etc/init.d/volmgt stop
# /etc/init.d/volmgt start
... (해결이 안되면)
# pkill -9 vold
# ps -ef | grep vold (vold 프로세스가 확실히 종료했는지 확인)
# /etc/init.d/volmgt start
# ps -ef | grep vold (vold가 새로 동작하였는지 확인)

[ ISO 9660 파일 시스템 마운트 ]

- ISO 파일 생성하기
# mkisofs -o test.iso /etc/init.d
# ls -l test.iso

- 루프 백 디바이스 설정하기
# lofiadm
Block Device File
# lofiadm -a /usr/local/test.iso
/dev/lofi/1
# lofiadm /dev/lofi/1
/usr/local/test.iso

- 마운트
# mount -F hsfs -o ro /dev/lofi/1 /mnt
# ls /mnt
(사용한 후)
# umount /mnt
# lofiadm
# lofiadm -d /dev/lofi/1

5) 파일 시스템을 정의하는 파일
mount 명령을 수행할 때 특별히 파일시스템 타입을 명시하지 안는 경우 로컬파일 시스템은 /etc/vfstab, /etc/default/fs순이며
원격파일 시스템은 /etc/vfstab, /etc/dfs/fstypes이다.

/etc/vfstab
ex) /dev/dsk/c0t0d0s5 /dev/rdsk/c0t0d0s5 /usr ufs 1 no -
/etc/default/fs
ex) LOCAL=ufs
/etc/dfs/fstypes
ex) nfs NFS Utilities
autofs AUTOFS Utilities
cachefs CACHEFS Utilities


9. 파일 시스템 관리

시스템의 부적절한 중지(정전, 비정상 종료 등..)로 인해 파일 시스템이 손상될 경우 fsck 유틸을 이용하여 복구해 주어야 한다.
fsck는 superblock, inode, indirect block, data block 을 검사하고 치료한다.

- Superblock 검사
파일 시스템 사이즈, inode number, free block count, free inode count
- inode 검사
format and type, link count, duplicate block, bad block number, inode size
- Indirect block 검사
블록이 다른 inode에 의해 이미 점유되어 있는 것
블록의 수가 파일 시스템의 범위에 어긋난 것
- data block 검사
평범한 data block
심볼릭 링크 data block
디렉토리 data block

1) fsck (file system check ) 명령의 수행 순서
- Phase 1 : Check Blocks and Sized
- Phase 2 : Check Pathnames
- Phase 3 : Check Connectivity
- Phase 4 : Check Reference Counts
- Phase 5 : Check Cyl groups

주의사항) 마운트 되어 사용하고 있는 파일 시스템은 fsck를 쓸 수 없다. 언마운트하거나 싱글유저 모드에서 처리한다.

2) fsck 명령 사용법
fsck [ -F FSType] [-V] [-m] [special] /dev/rdsk/장치 명

# umount /export/home
# fsck -V /export/home (실행하지는 않고 실행 명령어를 보여줌)
fsck -F ufs /dev/rdsk/c0t0d0s7 ( => /etc/vfstab을 참조한다.)
# fsck /dev/rdsk/c0t0d0s6

cf. SuperBlock 이 손상되어 복구되지 않는 경우
# newfs -N /dev/rdsk/c0t3d0s7 (=> 백업 수퍼블럭 번호를 확인)
/dev/rdsk/c0t3d0s7: 4199508 sectors in 6603 cylinders of 4 tracks, 159 sectors
2050.5MB in 104 cyl groups (64 c/g, 19.88MB/g, 3392 i/g)
super-block backups (for fsck -F ufs -o b=#) at:
32, 40896, 81760, 122624, 162848, 203712, 244576, 285440, 325664, 366528,
407392, 448256, 488480, 529344, 570208, 611072, 651296, 692160, 733024,
773888, 814112, 854976, 895840, 936704, 976928, 1017792, 1058656, 1099520,
1139744, 1180608, 1221472, 1262336, 1302560, 1343424, 1384288, 1425152,
1465376, 1506240, 1547104, 1587968, 1628192, 1669056, 1709920, 1750784,
1791008, 1831872, 1872736, 1913600, 1953824, 1994688, 2035552, 2076416,

# fsck -F ufs -o b=40896 /dev/rdsk/c0t3d0s7 (=> 파일 시스템 체크 )

3) 디스크 사용 관리
- df 명령 : 마운트된 각 파일 시스템의 사용에 관한 정보를 보여주는 명령어
# df -k (Kb 단위로 보여줌)
# df -n (파일 시스템의 유형을 보여줌)
# df -k -F ufs ( ufs 파일 시스템만 보여줌)

- du 명령 : 파일과 디렉터리에 대한 사용 정보를 보여주는 명령어
# du -k . (현재 디렉터리 이하의 사용량)
# du -ks /etc ( /etc 전체의 사이즈)

- quot 명령 : 각 파일시스템에 대한 유저별의 사용량을 보여줌
# quot -a ( 모든 파일시스템을 Kb 단위로 보여줌)
# quot -af ( 디스크 사용량과 함께 파일 수도 보여줌)

4) quota 에 대한 설정
사용자들에 제한된 용량만 사용할 수 있도록 설정하고 관리할 수 있다.
자세한 설정 방법은 다음을 참고한다.
http://docs.sun.com/db/doc/805-7229/6j6q8svfc?a=view
http://www.unix.co.kr/data/solaris/?p=sa13
http://www.jic.co.kr/ypct110.htm

5) swap의 추가
# swap -l (현재 설정된 스왑 정보를 출력)
# mkdir /files (추가할 swap파일이 위치할 디렉토리 생성)
# mkfile 24m /files/swapfile (스왑을 위한 덩어리 파일 생성)
# swap -a /files/swapfile (스왑을 추가, 주의: 절대경로로 써야 한다.)
# swap -l (확인)
# vi /etc/vfstab (부팅 시 자동으로 마운트 되도록 수정)
/files/swapfile - - swap - no -

# swap -d /files/swapfile ( 제거할 경우 )
# rm /files/swapfile
# vi /etc/vfstab (추가된 스왑 설정 라인을 제거)
# swap -l (확인)

10. 솔라리스 설치 (Solaris Installation)

* 솔라리스 9 소개
http://kr.sun.com/products/software/os_platforms/solaris/index.html
* 솔라리스 8 소개
http://kr.sun.com/products/software/os_platforms/solaris/8/index.html
* 전체 버전 간의 차이 비교
http://wwws.sun.com/software/solaris/fcc/fcc.html
* Solaris 9 Installation Guide
http://docs.sun.com/db/doc/806-5205
* Solaris 8 (SPARC Platform Edition) Installation Guide
http://docs.sun.com/db/doc/806-0955
* Solaris for Intel 설치(한글)
http://myhome.naver.com/yasicom/solaris.htm


1) 솔라리스 8 설치 전 준비 사항
설치에 필요한 최소한의 CD (국제판)
- Solaris 8 Installation CD
- Solaris 8 Software 1/2 CD
- Solaris 8 Software 2/2 CD
- Solaris 8 Language CD

2) 하드웨어 요구사항
- Sparc Base 또는 Intel Based 시스템
- 64 MB 메모리
- 2.1 GB 디스크 스페이스
- CD-ROM 드라이브

3) Solaris 8 설치 전 정보 수집
- 호스트 이름
- IP 주소
- 네이밍 서비스(DNS, NIS, NIS+, 없음)의 유형 및 구성 정보
- subnet mask
- root password
- 소프트웨어 그룹
Entire Distribution(2.1G 권장) + OEM, Entire Distribution(1.9G 권장), Developer(1.5G 권장), End User(1.2G 권장), Core(718M 권장)
- OS를 설치할 디스크 설정 및 파티션 설정

4) 설치 방법
- WebStart Installation ( Install CD)
- JumpStart Installation ( from Jumpstart Server System)
- Interactive Installation ( Software 1/2 CD)

5) 설치 순서
CDROM 넣고
# shutdown -i0 -y -g0 ( init 0 또는 Stop + A)
OK set-defaults
OK boot cdrom
- 시스템 식별
- 디스크 선택 및 파티션 설정
- 소프트웨어 그룹 설정
- 설치 후 재부팅
- Software 2/2 CD, Language CD 차례로 설치

6) 설치 시 유의사항
- 32Bit, 64Bit Kernel 선택 ( OS install 후 확인은 isainfo -kv)
- 설치 후 소프트웨어 그룹 유형확인 ( # cat /var/sadm/system/admin/CLUSTER )
SUNWCXall(Entire +OEM), SUNWCall(Entire), SUNWCprog(Developer), SUNWCuser(End User), SUNWCreq(Core)
- 파티션 권장사항 ( / 100M, /usr 500M~1G, /var 128M이상, swap 메모리2~3배, /opt 400M이상, /export/home 필요한 만큼)


11. 패키지 관리

1) 패키지 정보
# pkginfo | more (전체 보기)
# pkginfo | grep SUNWman (특정 패키지 설치여부)
# pkginfo -l SUNWman (특정 패키지의 자세한 정보)
# pkginfo -d /cdrom/solarisxxx/Solaris_8/Product | more (CDROM 내의 패키지 정보)
# pkginfo -d /cdrom/solarisxxx/Solaris_8/Product -l SUNWaudio (CDROM 내의 특정 패키지 정보)
# pkginfo | wc -l ( 설치된 총 패키지 수)

# grep /usr/bin/audioplay /var/sadm/install/contents (audioplay 의 패키지 이름 알아내기1)
# pkgchk -l -p /usr/bin/audioplay (audioplay의 패키지 이름 알아내기2)

# pkgchk SUNWaudio ( 설치 성공 여부 확인, 성공 시 메시지 없음)
# pkgchk -v SUNWaudio (특정 패키지에 대한 자세한 설치 위치)
# pkgchk -p /etc/passwd (특정 파일에 대한 초기 패키지 설치후의 변경 정보)

2) 패키지 추가
# pkgadd -d /cdrom/solxxxx/Solaris_8/Product SUNWaudio
# pkgadd -d /cdrom/solxxxx/Solaris_8/Product -s spool SUNWaudio ( /var/spool/pkg에 패키지 스풀)
# pkgadd -d /cdrom/solxxxx/Solaris_8/Product -s /export/pkgs SUNWaudio ( /export/pkgs에 패키지 스풀)
* GUI의 어드민 툴(admintool)을 이용하여 설치할 수도 있다.(cf. sysadmin(14) 가능)

3) 패키지 제거
# pkgrm SUNWaudio
# pkgrm -s spool SUNWaudio (/var/spool/pkg 의 스풀 패키지 제거)
# pkgrm -s /export/pkgs SUNWaudio (/export/pkgs의 스풀 패키지 제거)
* GUI의 어드민 툴(admintool)을 이용하여 제거할 수도 있다.(cf. sysadmin(14) 가능)

4) 기타 Freeware 패키지 활용
http://www.sunfreeware.com 에서 다양한 무료 패키지를 제공한다.

- 업데이트 및 설치를 위한 편리한 pkg-get 툴도 제공한다. 자세한 정보는 아래 참조.
http://www.sunfreeware.com/pkg-get.html
- 패키지를 직접 제작하고 싶을 경우에는 다음을 참조한다.
http://www.sunfreeware.com/pkgadd.html


12. 패치 관리

패치에 관한 다양한 정보와 패치 파일은 아래 사이트를 참조한다.
http://sunsolve.sun.com
ftp://sunsolve.sun.com/pub/patches

패치를 관리하거나 설치하기 위해서는 패치 번호를 먼저 파악해야 하고, 이는 Solaris#.PatchReport를 다운 받아 확인한다.
OS설치 후 반드시 Recommended Patch및 최신 보안 패치를 해 주어야 한다. 패치번호는 다음과 같이 구성되어있다.
109320-02 (패치번호-revision number)

1) 패치 정보
# showrev -p (시스템에 설치된 패치 정보 보기)
# patchadd -p (Solaris 2.6부터, Shell script)
# showrev -p | grep 109320
# patchadd -p | grep 109320

2) 초기 설치해야 할 패치와 참고 문서
Solaris8.PatchReport : Solaris8의 모든 recommended 패치 정보
8_Recommended.zip : Solaris8의 모든 recommended 패치 파일들
8_Recommended.README : Solaris8의 모든 recommended 패치 설치 방법과 설명

3) 패치 정보 및 저장 디렉토리
/var/sadm/patch

4) 패치 설치
# /usr/bin/unzip 109320-03.zip ( Solaris 7부터)
# /usr/bin/zcat 104040-01.tar.Z | tar xvf - (Solaris2.6)

# more 109320-03/README (반드시 관련 README를 읽어본다.)
# patchadd 109320-03 (패치를 수행)
# showrev -p | grep 109320 (설치 여부를 확인)

# patchrm 109320-03 (패치를 제거)
# showrev -p | grep 109320 (제거 여부를 확인)

- 주의사항 : Solaris2.6이전은 패치 디렉토리 내의 스크립트를 이용한다.
[설치 시]
# cd 109320
# ./installpatch .
[제거시]
# cd /var/sadm/patch/109320
# ./backoutpatch 109320

5) 패치 정보의 관리
http://sunsolve.sun.com의 Patch Portal에는 패치를 체계적이고 편리하게 다룰 수 있는 Patch finder, Patch Pro, Patch Check등을
제공한다.

6) 패치 에러 코드 정리
0 No error
1 Usage error
2 Attempt to apply a patch that's already been applied
3 Effective UID is not root
4 Attempt to save original files failed
5 pkgadd failed
6 Patch is obsoleted
7 Invalid package directory
8 Attempting to patch a package that is not installed
9 Cannot access /usr/sbin/pkgadd (client problem)
10 Package validation errors
11 Error adding patch to root template
12 Patch script terminated due to signal
13 Symbolic link included in patch
14 NOT USED
15 The prepatch script had a return code other than 0.
16 The postpatch script had a return code other than 0.
17 Mismatch of the -d option between a previous patch install and the current one.
18 Not enough space in the file systems that are targets of the patch.
19 $SOFTINFO/INST_RELEASE file not found
20 A direct instance patch was required but not found
21 The required patches have not been installed on the manager
22 A progressive instance patch was required but not found
23 A restricted patch is already applied to the package
24 An incompatible patch is applied
25 A required patch is not applied
26 The user specified backout data can't be found
27 The relative directory supplied can't be found
28 A pkginfo file is corrupt or missing
29 Bad patch ID format
30 Dryrun failure(s)
31 Path given for -C option is invalid
32 Must be running Solaris 2.6 or greater
33 Bad formatted patch file or patch file not found
34 The appropriate kernel jumbo patch needs to be installed

13. 백업

백업에 대한 자세한 문서는 다음을 참조한다.
http://docs.sun.com/db/doc/805-7228/6j6q7uf0u?a=view

- Full dump : 파티션 전체를 백업
- Incremental dump: 전체 백업 후 변경된 것만 백업
- 선택적 backup: 특정 파일이나 디렉토리를 백업
- Multivolume Backup : 여러 의 미디어를 이용한 백업

1) 백업 디바이스 종류
1/2-inch reel tape(140MB)
2.5-Gbyte 1/4 inch Cartridge(QIC) tape (2.5GB)
DDS3 4mm cartridge tape (DAT) (12-24GB)
14-Gbyte 8-mm cartridge tape (14GB)
DLT 7000 1/2-inch cartridge tape (35~70GB)

cf. /dev/rmt/xyn
x: 장치 번호 (0,1,2...)
y; 밀도 (h, m, l, c, u)
n: rewind 여부

2) mt 명령어 (tape을 제어하기 위해 사용)

# mt -f /dev/rmt/0 status (-> backup device의 상태를 표시 )
# mt -f /dev/rmt/0n eom (-> tape의 맨 끝으로 이동 )
# mt -f /dev/rmt/0 rewind (-> tape를 제일 처음으로 되감는다. )
# mt -f /dev/rmt/0n fsf [count] (-> count 개수 만큼 파일 뒤로 건너 띈다. )
# mt -f /dev/rmt/0n nfsf [count] ( -> count+1 개수 만큼 파일 뒤로 건너 띈다. )
# mt -f /dev/rmt/0n bsf [count] (-> count 개수 만큼 파일 앞으로 건너 띈다. )
# mt -f /dev/rmt/0n nbsf [count] (-> count+1 개수 만큼 파일 앞으로 건너 띈다. )
# mt -f /dev/rmt/0 erase (-> tape의 모든 내용을 지운다. tape나 device에 따라 다르나 시간이 많이 걸린다. )
# mt -f /dev/rmt/0 offline (-> tape가 eject 된다. )


3) tar, dd 명령어

# tar tvf /dev/rmt/0 ( -> tape의 내용을 확인함 )
# tar xvf /dev/rmt/0 ( -> tape에있는 내용을 Hard disk로 내림 )
# tar cvf /dev/rmt/0 /etc/hosts (-> Hard disk에있는 file 이나 directory를 tape로 받음 )
# tar cvfb - backup_dir | rsh host dd of=/dev/rmt/0 (-> remote host에있는 drive로 backup 받기)
# rsh -n host_name dd if=/dev/rmt/0 |tar xvBfb - restore_dir ( -> remote host에있는 drive로 backup 내리기 )


4) cpio 명령어

* 현재 디렉토리의 내용을 tape로 backup
# find . -print | cpio -ovcB > /dev/rmt/0
* tape에서 file을 extract
# cpio -ivcB /var/tmp/space < /dev/rmt/0
* 최근 일주일 내에 수정된 file을 tape로 받는다
# find . -mtime -7 -print | cpio -ovcB > /dev/rmt/0n
# find . -name 'file*' -print | cpio -ovcB > file.list
# cpio -ivt < file.list


5) ufsdump, ufsrestore 명령어

* /export/home이 /dev/rdsk/c0t0d0s3이라 가정

- dump할 파일 또는 파일시스템 용량확인
# df -k /export/home
# ufsdump 0S /export/home [ Mega ==> # / (1024 x 1024) ]

- Full Dump
# umount /export/home
# fsck /export/home
# ufsdump 0uf /dev/rmt/0 /export/home

- Incremental Dump
# umount /export/home
# fsck /export/home
# ufsdump 3uf /dev/rmt/0 /export/home
# cat /etc/dumpdates

- ufsrestore
# mount /export/home
# cd /export/home
# ufsrestore tvf /dev/rmt/0 (내용을 확인)
# ufsrestore rvf /dev/rmt/0 (내용을 모두 복구)
# ls /export/home ( Check filesystem restore)

# cd /var/tmp
# ufsrestore ivf /dev/rmt/0 (interactive로 일부만 복구)

- remove restoresymtable file
# rm /export/home/restoresymtable


14. 로그 관찰 및 성능 측정

1) 로그 분석

- /etc/syslog.conf (syslog 데몬 설정파일)
- /var/adm/sulog ( => su 관련 로그)
- /var/adm/messages ( => system 중요 로그 파일)
- /var/adm/loginlog (=> 로긴 관련 로그)
- /var/sadm/* (=> 패키지 관련 로그)

로그는 다음 문서를 참조한다.
http://www.certcc.or.kr/paper/tr2001/tr2001-05/unix_log_analysis.pdf (유닉스 로그 분석 1)
http://www.certcc.or.kr/paper/tr2001/tr2001-07/Unix_log_analysis_II.pdf (유닉스 로그 분석 2)

2) 시스템 퍼포먼스 관리

- System Administration Guide, Volume 2 >> 33. Managing System Performance Topics
http://docs.sun.com/db/doc/805-7229/6j6q8svgf?a=view
- SUN PERFORMANCE
http://www.sun.com/sun-on-net/performance.html
- Solaris Tunable Parameters Reference Manual
http://docs.sun.com/db/doc/816-0607
- 썬 시스템 메모리 정보 (Sun UNIX memconf utility)
http://www.4schmidts.com/memconf.html
- Unix and Windows NT System Tools
http://webperso.easyconnect.fr/sgarnaud/unixtools/index.html



5부. 네트웍 어드민

1. Network Setup

1) /etc/hostname. 에 호스트 이름을 기록
ex) host1

2) /etc/hosts 파일에 ip설정
ex) 192.168.1.20 host1 loghost

3) /etc/defaultrouter 에 gw ip 설정
ex) 203.234.247.254

4) Netmask 설정
ex) 203.234.247.0 255.255.255.0

5) /etc/resolv.conf 에 DNS서버 등록
ex) domain ns.hananet.net
nameserver xxx.xxx.xxx.xxx
nameserver xxx.xxx.xxx.xxx

6) /etc/resolv.conf 에 dns 문자를 추가
....
hosts files dns ( ==> dns 추가)

7) 재부팅
# reboot

cf. 재부팅 없이 IP 변경
# ifconfig -a
# ifconfig hme0 down
# ifconfig hme0 203.234.247.30 net mask 255.255.255.0 broadcast + up (=> 설정)
# ifconfig hme0 (=> 확인)
# route add default 203.234.247.254 1 (=> 기본 게이트웨이 설정)

cf. 호스트 이름 변경
다음 6개 파일을 수정한다.
/etc/hosts
/etc/hostname.
/etc/nodename
/etc/net/*/hosts (3개)

cf. Network Interface Name
Lance Ethernet(10M Ethernet) : le
Fast Ethernet 1.0 : be
Fast Ethernet 2.0 이상 : hme
Quad Ethernet : qe
Quad FastEthernet 1.0 : hme
Quad FastEthernet 2.0 이상 : qfe
Gigabit Ethernet : vge
ATM 1.0 : sa
ATM 2.0 이상 : ba
FDDI : nf
Token Ring : tr


2. TCP/IP Network Layer

이론에 관한 문서는 다음을 참조한다.
- Introduction to TCP/IP
http://www.yale.edu/pclt/COMM/TCPIP.HTM
- SolarisTM 2.x - Tuning Your TCP/IP Stack and More
http://www.sean.de/Solaris/soltune.html
- TCP/IP 프로토콜
http://jkkang.net/unix/netprg/chap1/net1_2.html
- RFC 문서
ftp://ftp.isi.edu/in-notes/rfc793.txt

1) ifconfig
# ifconfig -a (모든 Network Interface 설정 정보 출력)

# ifconfig hme0 down (=> Interface disable)
# ifconfig hme0 up (=> Interface enable)

# ifconfig hme0 unplumb (=> Interface close)
# ifconfig hme0 plumb (=> Interface open)

# ifconfig hme0 203.234.247.30 netmask 255.255.255.0 broadcast + up (=> 설정)

2) rlogin, rsh, rcp

명령어: rlogin, rsh, rcp
설정파일(user): /etc/hosts.equiv, $HOME/.rhosts
설정파일(root): /.rhosts
서버호스트: sun01
클라이언트: sun02

- 서버 쪽 관리자가 설정
sun01# vi /etc/hosts ( 허락할 클라이언트 호스트 등록)
sun01# echo "sun02 user01" > /etc/hosts.equiv ( 허락할 호스트 및 유저등록)
sun01# chmod 600 /etc/hosts.equiv

- 클라이언트 관리자가 설정
sun02# vi /etc/hosts ( 접근할 서버 호스트 등록)

- test (클라이언트에서)
sun02# su - user01
sun02$ rlogin sun01
sun01$ hostname
sun01$ exit

- 서버 쪽 일반유저가 허락할 때
sun01# rm /etc/hosts.equiv
sun01# su - user01
sun01$ echo "sun02 user01" > $HOME/.rhosts
sun01$ chmod 600 $HOME/.rhosts

- Test (클라이언트에서)
sun02# su - user01
sun02$ rlogin sun01
sun01$ hostname
sun01$ exit

- 기타 r계열 명령어
sun02# su - user01
sun02$ hostname
sun02$ rsh sun01 hostname
sun02$ rcp /etc/profile sun01:a.txt
sun02$ rsh sun01 ls (a.txt가 복사되었는지 확인)

3) 기타 네트웍 명령어
# ping google.co.kr
# ping -s google.co.kr
# rusers (Local Network 사용자 정보, cf who)
# rusers -l hostA ( hostA에 대해 로긴한 사용자 정보)

4) 기타 Freeware
nmap(Port Scanning), traceroute(trace rote inform), nslookup(DNS info), dig(DNS info) ...

3. FTP Server

- 일반적으로 inetd에 의한 중재 방식과 standalone방식이 있다.
- anonymous ftp서비스를 위해서는 맨 페이지나 다음 사이트를 참고한다.
How to Set up a Secure Anonymous FTP Site
http://secinf.net/unix_security/How_to_Set_up_a_Secure_Anonymous_FTP_Site.html
- 보다 많은 설정과 기능을 제공하는 wu-fptd나 proftpd로 대체할 수 있다. (패키지는 www.sunfreeware.com)
WU-FTPD Development Group ( http://www.wu-ftpd.org/)
The ProFTPD Project ( http://www.proftpd.net/)
vsftpd ( http://vsftpd.beasts.org/)

/usr/sbin/inetd (/etc/inetd.conf) ---> /usr/sbin/in.ftpd

4. Telnet Server

- 요즘은 보안 때문에 telnet 보다는 Secure Shell(ssh)을 사용하는 것이 일반적이다.


5. NFS (Network File System)

NFS는 썬에서 개발한 분산 환경 파일시스템으로서 원격지에서 공유한 일부를 로컬에서 쉽게 연결해서 쓸 수 있는 공유파일시스템이다.
자세한 문서는 다음을 참고한다.
- NFS FAQ
http://www.ebsinc.com/solaris/network/nfs.html
- Chapter 29 Solaris NFS Environment
http://docs.sun.com/db/doc/806-0916/6ja8539fd?a=view

1) NFS의 장점
- 여러 대의 컴퓨터가 모두 같은 자료에 접근하여 같은 파일을 사용할 수 있다.
- 데이터의 중복을 줄이고 관리를 최소화할 수 있다.
- 서로 다른 환경을 지원한다.
- 시스템 관리 오버헤드를 줄인다.

2) NFS Server
- 관련 파일
/etc/dfs/dfstab
/e
_________________



-- 출처

http://solaris.mesani.net/viewtopic.php?p=181&%3Bsid=181a97b868063a61147140ecbec5f5fe
반응형
Posted by [PineTree]
OS/SOLARIS2005. 8. 31. 03:46
반응형
 

솔라리스 시스템에서 갑작스런 패닉 현상이 나타나게 되면 보통 crash 디렉터리를 지정을

하지 않았다면 /var/crash/[hostnam]/ 밑에 unix 파일과 core 파일을 남깁니다..

그 파일을 이용하여 시스템 패닉전에 무슨일이 있었는지 분석이 가능 합니다.

아래는 분석에 사용하는 명령어들과 보기입니다.

우선 core 파일과 unix파일이 있는 디렉터리로 이동 합니다. ( /var/crash/[hostname] )


1. strings


# strings vmcore.0 | grep SunOS ---> OS 의 종류를 보여준다.

# strings vmcore.0 | grep macine ---> 어떤 호스트인지 열거 하여 준다.

# strings vmcore.0 | more ---> 다 보여준다.


2. netstat


# netstat -d unix.0 vmcore.0 --> 네트웍 통계보기

# netstat -n unix.0 vmcore.0 --> NFS통계보기


3. arp

# arp -a unix.0 vmcore.0 --> arp 테이블보기


4. ipcs

# ipcs -a -N unix.0 -C vmcore.0 --> ipc 보기


5. crash


사용법 : crash [ -d dumpfile ] [ -n namelist ] [ -w output-file ]


예)


# crash -d unix.0 vmcore.0

dumpfile = vmcore.0, namelist = /dev/ksyms, outfile = stdout

> status

system name: SunOS

release: 5.7

node name: ns

version: Generic_106541-15

machine name: sun4u

time of crash: 수 11월 7 11:23:10 2001

age of system: 1 hr., 6 min.

panicstr: [AFT1] errID 0x000003a4.70f365cc %sError(s)

See previous message(s) for details

panic registers:

pc: 10010104 sp: 400275d8

> help

help [-w filename] function[s]

help function

alias:

acceptable aliases are uniquely identifiable initial substrings

> help p

p [-e] [-f] [-l] [-w filename] [([-p] [-a] tbl_entry | #procid)... | -r]

tbl_entry = slot number | address | symbol | expression | range

process table

alias: proc

acceptable aliases are uniquely identifiable initial substrings

p -e

PROC TABLE SIZE = 2922

SLOT ST PID PPID PGID SID UID PRI NAME FLAGS

0 t 0 0 0 0 0 96 sched load sys lock

1 s 1 0 0 0 0 58 init load

2 s 2 0 0 0 0 98 pageout load sys lock nowait

3 s 3 0 0 0 0 60 fsflush load sys lock nowait

4 s 347 1 347 347 0 58 sac load jctl

5 s 350 1 350 350 0 37 dmispd load

6 s 138 1 138 138 0 41 keyserv load

7 s 53 1 53 53 0 43 devfseventd load

8 s 57 1 57 57 0 50 devfsadm load

9 s 136 1 136 136 0 58 rpcbind load

10 s 205 1 205 205 0 53 nscd load

11 s 130 1 130 130 60001 58 tocsin load

12 s 188 1 188 188 0 52 syslogd load

13 s 178 1 178 178 0 58 automountd load

14 s 170 1 170 170 0 58 in.named load jctl

15 s 163 1 163 163 0 0 inetd load

16 s 233 228 228 228 1006 23 mshttpd load

17 s 300 267 0 0 0 58 mysqld load

18 s 193 1 193 193 0 49 cron load

19 s 232 228 228 228 1006 33 mshttpd load

20 s 228 1 228 228 0 59 mshttpd load

21 s 234 228 228 228 1006 13 mshttpd load

22 s 235 228 228 228 1006 3 mshttpd load

23 s 236 228 228 228 1006 0 mshttpd load

24 s 249 1 249 249 0 58 utmpd load

25 s 267 1 0 0 0 10 safe_mysqld load

26 s 253 1 253 253 0 58 sendmail load jctl

27 s 265 1 265 265 0 58 httpd load

28 s 10139 265 265 265 60001 58 httpd load

29 s 10146 265 265 265 60001 58 httpd load

30 s 10141 265 265 265 60001 58 httpd load

31 s 10151 265 265 265 60001 58 httpd load

32 s 10140 265 265 265 60001 58 httpd load

33 s 281 1 279 279 0 60 auditd load

36 s 331 1 331 331 0 48 dtlogin load jctl

37 s 325 1 325 325 0 23 mountd load

38 s 327 1 327 327 0 33 nfsd load

40 s 351 347 347 347 0 58 listen load nowait jctl

41 s 348 1 348 348 0 55 ttymon load

42 s 14566 331 14566 14566 0 59 Xsun load

43 s 352 347 347 347 0 58 ttymon load jctl

44 s 10137 265 265 265 60001 53 httpd load

50 s 14585 1 14574 14574 0 59 fbconsole load

55 s 14605 14574 14605 14605 0 59 dtgreet load

60 s 14574 331 14574 14574 0 50 dtlogin load

71 s 10150 265 265 265 60001 58 httpd load

76 s 10138 265 265 265 60001 58 httpd load

82 s 11077 265 265 265 60001 58 httpd load

90 s 11085 265 265 265 60001 58 httpd load

> p -l

p_lock: owner 0 waiters 0

cr_lock: owner 0 waiters 0

Condition variable p_cv: 0

Condition variable p_flag_cv: 0

Condition variable p_lwpexit: 0

Condition variable p_holdlwps: 0

Condition variable p_srwchan_cv: 0

82 s 11077 265 265 265 60001 58 httpd load


p_lock: owner 0 waiters 0

cr_lock: owner 0 waiters 0

Condition variable p_cv: 0

Condition variable p_flag_cv: 0

Condition variable p_lwpexit: 0

Condition variable p_holdlwps: 0

Condition variable p_srwchan_cv: 0

90 s 11085 265 265 265 60001 58 httpd load

.

.

.

. 이하생략..


> q


6. adb 사용하기


# adb -k unix.0 vmcore.0 ( unix파일이나 core파일 대신 커널쪽을 볼수도 있다 ex> adb -k /dev/ksyms /dev/mem )

adb -k unix.0 vmcore.0

physmem 5b01

*panicstr/s ---> 패닉 메세지가 무엇이었나 보여준다.

0x40027768: [AFT1] errID 0x000003a4.70f365cc %sError(s)

See previous message(s) for details

$<utsname ---> 호스트 이름과 장비에 관해 열거해준다.


utsname:

utsname: sys SunOS

utsname+0x101: node ns

utsname+0x202: release 5.7

utsname+0x303: version Generic_106541-15

utsname+0x404: machine sun4u


srpc_domain/s ---> 도메인

srpc_domain:

srpc_domain:


hw_provider/s ---> 제조업체

hw_provider:

hw_provider: Sun_Microsystems


*time-(lbolt%0t100)=Y --->부트시간/날짜

2001 Oct 6 21:26:01


$<msgbuf ---> 최근 메세지 버펄를 열거 하여 준다

SunOS Release 5.7 Version Generic_106541-15 [UNIX(R) System V R

elease 4.0]

0x700b57e0: Copyright (c) 1983-1999, Sun Microsystems, Inc.

0x700b53c3: Ethernet address = 8:0:20:86:23:9e

0x700b4fa0: mem = 196608K (0xc000000)

0x700b4b80: avail mem = 188989440

0x700b4763: root nexus = Sun Ultra 1 SBus (UltraSPARC 167MHz)

0x700b4343: sbus0 at root: UPA 0x1f 0x0 ...

0x70155ee3: sbus0 is /sbus@1f,0

0x70155ac0: dma0 at sbus0: SBus0 slot 0xe offset 0x8400000

0x701556a3: dma0 is /sbus@1f,0/espdma@e,8400000

0x70155280: /sbus@1f,0/espdma@e,8400000/esp@e,8800000 (esp0):

esp-options=0x46

0x70154e60: esp0 at dma0: SBus0 slot 0xe offset 0x8800000 Onboard device spa

rc9 ipl 4

0x70154a43: esp0 is /sbus@1f,0/espdma@e,8400000/esp@e,8800000

0x70154620: NOTICE: Memory scrubber exiting

0x70154200: sd0 at esp0:

0x70177d40: target 0 lun 0

0x70177923: sd0 is /sbus@1f,0/espdma@e,8400000/esp@e,8800000/sd@0,0

0x70177500: <FUJITSU-MAB3091SC-2703 cyl 7185 alt 2 hd 10 sec 248>

0x701770e0: sd1 at esp0:

0x70176cc0: target 1 lun 0

0x701768a3: sd1 is /sbus@1f,0/espdma@e,8400000/esp@e,8800000/sd@1,0

0x70176480: <SUN4.2G cyl 3880 alt 2 hd 16 sec 135>

0x70176060: sd4 at esp0:

0x70179c00: target 4 lun 0

0x701797e3: sd4 is /sbus@1f,0/espdma@e,8400000/esp@e,8800000/sd@4,0

0x701793c0: <SUN4.2G cyl 3880 alt 2 hd 16 sec 135>

0x70178fa0: sd6 at esp0:

0x70178b80: target 6 lun 0

0x70178763: sd6 is /sbus@1f,0/espdma@e,8400000/esp@e,8800000/sd@6,0

0x70178347: root on /sbus@1f,0/espdma@e,8400000/esp@e,8800000/sd@0,0:a fstyp

e ufs

0x700efee0: zs0 at sbus0: SBus0 slot 0xf offset 0x1100000 Onboard device spa

rc9 ipl 12

0x700efac3: zs0 is /sbus@1f,0/zs@f,1100000

0x700ef6a0: zs1 at sbus0: SBus0 slot 0xf offset 0x1000000 Onboard device spa

rc9 ipl 12

0x700ef283: zs1 is /sbus@1f,0/zs@f,1000000

0x700eee66: keyboard is </sbus@1f,0/zs@f,1000000> major <29> minor <2>

0x700eea46: mouse is </sbus@1f,0/zs@f,1000000:b> major <29> minor <3>

0x700ee626: stdin is </sbus@1f,0/zs@f,1000000> major <29> minor <2>

0x700ee200: cgsix0 at sbus0: SBus0 slot 0x1 offset 0x0 SBus level 5 sparc9 i

pl 9

0x7015fea3: cgsix0 is /sbus@1f,0/cgsix@1,0

0x7015fbe1: cgsix0: screen 1152x900, single buffered, 1M mappable, rev 11

0x7015f926: stdout is </sbus@1f,0/cgsix@1,0> major <39> minor <0>

0x7015f660: cpu0: SUNW,UltraSPARC (upaid 0 impl 0x10 ver 0x22 clock 167 MHz)

0x7015f3a0: ledma0 at sbus0: SBus0 slot 0xe offset 0x8400010

0x7015f0e0: le0 at ledma0: SBus0 slot 0xe offset 0x8c00000 Onboard device sp

arc9 ipl 6

0x7015ee23: le0 is /sbus@1f,0/ledma@e,8400010/le@e,8c00000

0x7015eb63: dump on /dev/dsk/c0t0d0s1 size 1000 MB

0x7015e8a2: pseudo-device: devinfo0

0x7015e5e3: devinfo0 is /pseudo/devinfo@0

0x7015e320: fd0 at sbus0: SBus0 slot 0xf offset 0x1400000 Onboard device spa

rc9 ipl 11

0x7015e063: fd0 is /sbus@1f,0/SUNW,fdtwo@f,1400000

0x70559d60: sbusmem0 at sbus0: SBus0 slot 0x0 offset 0x0

0x70559aa3: sbusmem0 is /sbus@1f,0/sbusmem@0,0

0x705597e0: sbusmem1 at sbus0: SBus0 slot 0x1 offset 0x0

0x70559523: sbusmem1 is /sbus@1f,0/sbusmem@1,0

0x70559260: sbusmem2 at sbus0: SBus0 slot 0x2 offset 0x0

0x70558fa3: sbusmem2 is /sbus@1f,0/sbusmem@2,0

0x70558ce0: sbusmem3 at sbus0: SBus0 slot 0x3 offset 0x0

0x70558a23: sbusmem3 is /sbus@1f,0/sbusmem@3,0

0x7042b70b: WARNING: [AFT1] EDP event on CPU0 Data access at TL=0, errID 0x0

00003a4.70f365cc

AFSR 0x00000000.80400002<PRIV,EDP> AFAR 0xffffffff.ffffffff

AFSR.PSYND 0x0002(Score 95) AFSR.ETS 0x00 Fault_PC 0x1018af18

UDBH 0x0000 UDBH.ESYND 0x00 UDBL 0x0000 UDBL.ESYND 0x00

0x7055834b: [AFT2] errID 0x000003a4.70f365cc No error found in ecache (No fa

ult PA available)

0x70558080: panic[cpu0]/thread=40027e60:

0x70558b80: [AFT1] errID 0x000003a4.70f365cc EDP Error(s)

See previous message(s) for details

0x70154fc0:

0x7015f7c3: syncing file systems...

0x7015fd43: [4]

0x7015f243: [4]

0x7015f500: panic[cpu0]/thread=4003fe60:

0x700ef800: panic sync timeout

0x7015ea00:

0x700efc23: dumping to /dev/dsk/c0t0d0s1, offset 209780736


$c ---> C 스택 역추적

complete_panic(0xf,0x10437c00,0x40027e60,0x7011478a,0x0,0x10107880) + 24

do_panic(0x1,0x40027954,0x10107f70,0x0,0x0,0x400277bb) + 174

vcmn_err(0x3,0x40027768,0x40027954,0x7efefeff,0x81010100,0xff00) + 14

cpu_aflt_log(0x400278f8,0x400277bb,0x40027978,0x3,0x1010785c,0x10107880) + 4c0


rootfs$<bootobj ---> 루투장치는 어떤것인가


rootfs:

rootfs: fstype ufs^@^@^@^@^@^@^@^@^@^@^@^@^@

rootfs+0x10: name /sbus@1f,0/espdma@e,8400000/esp@e,8800000/sd@0,0:a^@^@^@

^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@

^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@

^@^@^@^@^@^@^@^@^@^@^@

rootfs+0x90: flags size vp

0 0 0


swapfile$<bootobj ---> 스왑장치는 어떤것인지 열거


swapfile:

swapfile: fstype ^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@

swapfile+0x10: name ^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@

^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@

^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@

^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@

^@^@^@^@

swapfile+0x90: flags size vp

0 0 0


$q ---> 종료

반응형

'OS > SOLARIS' 카테고리의 다른 글

솔라리스 테입드라이브 명령어  (0) 2005.11.15
[펌] 솔라리스 소개  (0) 2005.11.14
[펌] Boot PROM  (0) 2005.08.04
[펌] [ UNIX ] 각종 명령어  (0) 2005.08.04
[펌] 솔라리스 백업 정책  (0) 2005.07.14
Posted by [PineTree]
OS/SOLARIS2005. 8. 4. 22:54
반응형
Stop : 부팅시 Stop키가 눌려져 있으면 POST 과정을 검사 안함.
Stop+d : default로 cpu,mem검사를 하지만 Stop+d는 집중적으로 전체 device 검사.
Stop+n : 모든 상태 초기화. boot prom의 변수를 잘못 설정하여 시스템이 비정상적으로            동작할 때 Stop+n키를 누른 상태에서 재부팅하면 모든 변수를 기본값으로 바꾸어           처음 시스템을 사용할때와 동일하게 동작한다.
Command
Description
banner
displays the power-on banner
boot
boots the system
help
lists te main help categories
printenv
displays all parameters' current and default values
setenv
sets the specified NVRAM parameter to some value
reset-all
resets the entire system; similar to a power cycle
set-defaults
resets all parameter values to the factory defaults
sifting text
displays the FORTH commands containing text
.registers
displays the contents of the registers
probe-scsi
identifies the devices on the internal Small Computer System Interface(SCSI)
probe-scsi-all
identifies the devices on all SCSI buses
probe-ide
identifies the devices on the internal intergrated device electronics (IDE) bus
probe-fcal-all
identifies devices on all Fibre Channel loops
show-devs
displays the entire device tree
devalias
identifies the current boot device alias for the system
nvalias
creates a new device alias name
nvunalias
removes a device alias name
showdisks
displays and allows a selection of device paths for the disks to be used for nvalias
sync
manually attempts to flush memory and synchronize file systems
커널자료덤프-> /var/crash/host명/덤프파일
test
runs self-tests on specified devices
 
- 장비의 기본 옵션 보기
ok> banner
 
- Boot PROM의 버전과 출시일 보기
ok> .version
 
- Devices 연결 상태 보기
ok> probe-scsi
ok> probe-scsi-all
ok> probe-ide
ok> probe-fcal
 
- Alias 내용 보기
ok> devalias (physical name이 특정 이름으로 alias 되어 있는 리스트)
 
- 환경 설정 내용보기
ok> printenv (부트파라미터의 기본값 display)
 
- 환경 설정
ok> setenv <parameter_name> <value>
    (prom 변수값의 변경, 부팅디스크의 변경, 자동 부팅 여부 등)
ok> reset (setenv에 의해 변경된 값 저장 후 재부팅)
 
- Default값으로 변경하기
ok> set-default (지정한 파라미터값을 처음 정의되었던 기본값으로 변경)
ok> set-default parameter-name
ok> set-defaults (모든 환경값을 기본값으로 변경)
 
- Boot
ok> boot -s
ok> boot -v (부팅시 더 자세한 device 정보를 보여줌)
ok> boot -a (사용자 입력을 기다리는 interactive mode로 부팅)
     Enter filename : kernel/unix (32bit only) - 일시적(재부팅하면 예전값 복원)
                     kernel/sparcv9/unix (32,64bit) -일시적
     Name of system file : /etc/system or /dev/null
ok> boot -r (새로 추가된 device들의 device 파일을 새로 만듬)
 
- 도움말 보기
ok> help boot
ok> help nvramrc
ok> help diag
ok> help misc
 
- 자동 부팅 설정/해제
ok> printenv auto-boot?
auto-boot? = true
ok> setenv auto-boot? false
auto-boot? = false
ok> reset-all
Resetting ...
 
- 펌웨어 password 설정 / 해제
ok> setenv security-mode full  (설정)
ok> setenv security-password passwd명
ok> reset
ok> setenv security-mode none  (해제)
 
- 랜포트가 여러개 일때 1개의 mac address만 사용
ok> setenv local-mac-address? false
ok> setenv local-mac-address? true
ok> reset
 
- 명령어 리스트 보기
ok> sifting
ok> sifting probe
 
- 네트워크 검사
ok> watch-net  (네트워크카드의 정상 동작 상태 확인)
 
- physical path 보기
ok> show-disks
ok> show-nets
ok> show-devs
 
 
 
- mirror disk가 1개 따로 있어서 백업을 받아둔 상태에 원본 disk가 fail시 교체
ok> show-disks
  disk를 선택한다.
ok> nvalias mydisk [ctrl+y]@target_numner
ok> devalias
ok> setenv boot-device mydisk
ok> reset
 
ok> nvunalias mydisk  (alias 삭제)
ok> setenv boot-device disk
ok> reset-all
 
- eeprom 명령어
# eeprom
# eeprom boot-device
boot-device=disk
# eeprom boot-device=disk2
# eeprom auto-boot?=true (sh,ksh)
# eeprom 'auto-boot?=true' (csh)
 
- Slice(partition number)
  slice0 : /
  slice1 : swap
  slice2 : 전체 disk
  slice5 : /opt
  slice6 : /usr
  slice7 : /export/home
반응형

'OS > SOLARIS' 카테고리의 다른 글

[펌] 솔라리스 소개  (0) 2005.11.14
[펌] 솔라리스 시스템에서 갑작스런 패닉 현상  (0) 2005.08.31
[펌] [ UNIX ] 각종 명령어  (0) 2005.08.04
[펌] 솔라리스 백업 정책  (0) 2005.07.14
[펌] 백업과 복구  (0) 2005.07.12
Posted by [PineTree]
OS/SOLARIS2005. 8. 4. 22:38
반응형
[ UNIX ]


  어렵든 비싸든 중요 서버가 유닉스로 돌아가고 있으니
  알아 두는 것이 좋겠다. 자료 구하기가 힘들어서 원...


1. 시스템 사양 보기
    $ /usr/platform/sun4u/sbin/prtdiag -v | more
    $ df -k

2. 하드디스크 용량 보기
    $ format
      0: 컨트롤러(t0)	하드디스크 1
      1: 운영체제(t2)	하드디스크 2

      :1 선택
      :p 엔터
      :p 엔터		4G(하드디스크용량), 4G(백업이미지) --> 실제 4G
      :q
      :q 끝내기

3. 네트워크 설정
    # 호스트네임
    $ vi /etc/hosts
       150.150.10.70	hongsu2
    $ vi /etc/nodename		->	hongsu2	
    $ vi /etc/hostname.hme0	->	hongsu2
    $ vi /etc/net/ticlts/hosts	->	hongsu2
    $ vi /etc/net/ticots/hosts	->	hongsu2
    $ vi /etc/net/ticltord/hosts	->	hongsu2

    # 라우터(게이트웨이)
    $ vi /etc/defaultrouter	->	150.150.10.9
    $ route add default 150.150.10.9 1
    $ route del ......

    # 도메인네임서버
    $ vi /etc/nsswitch.conf	->	hosts:	files	dns
    $ vi /etc/resolv.conf
       nameserver		10.1.1.5
       domain		citynet_dns
    $ vi /etc/netmask		->	150.150.0.0	255.255.0.0

    # 테스팅
    $ netstat -nr
    $ ping localhost		->	alive		# 내부 정상
   
4. 환경변수
    $ vi /.profile
    $ . ./profile

5. 계정 만들기
   5.1 파일을 수정하여 만들기
        $ vi /etc/group
           hongsu2::110:
        $ vi /etc/passwd   
           hongsu2:x:110:110::/usr/bin/ksh:
        $ vi /etc/shadow
           hongsu2::6445::::::::
   5.2 명령어로 만들기
        # 그룹 -g 2000은 존재하는 것으로 해야한다. /etc/password 참조
        $ useradd -u 2001 -g 2000 -m -d /home/admin -s /bin/ksh admin

6. 콘솔모드로 리부팅 하기
   $ halt

6.1 콘솔모드
   OK boot -sv			# 초기화
   OK probe-scsi-all
   OK boot cdrom		# 시디롬 부팅
   OK boot -rv			# 부팅
   
7. 재부팅
    $ reboot -- -r

7.1 안전 리부팅
    $ sync; sync; sync; init 0

8. 깔린 패키지 보기
    $ /opt/pkginfo | grep java
   
9. 프롬프트 바꾸기(경로 보이기)
    #csh쉘일 경우
    $ vi ~/.cshrc
       set prompt="`hostname`:`pwd`] "
       alias setprompt 'set prompt="`hostname`:`pwd`] "'
    #ksh쉘일 경우
    $vi ~/.profile
    PS1='HONGSU2:${PWD}> '; export PS1
       
10. 하드디스크 파티션 정보 보기
    $ format
    >disk
    >p(partition)
    >p(print)
    >exit(quit ?)
    설명: backup을 제외한 번호에 값이 있으면 해당 partition이 있는 것임.
          마운트 하려면 mount /dev/rdsk/c0t3??s0  /mnt/any  
          s0는 부트 파티션
          s6, s7는 유저 파티션       

11. 시디롬 마운트
    $ mount -f hsfs -o ro /dev/sr0 /mnt/cdrom		# 시디롬 강제 마운트
    $ volcheck									# 플로피 마운트 보기
    $ df -k									# 자동 마운트 된 것 보기
    $ mkdir -p /cdrom/unnamed_cdrom
    $ mount -F hsfs -o ro /dev/dsk/c0t6d0s2 /cdrom/unnamed_cdrom
    $ eject 									# 꺼내기

11.1 자동 마운트 파일
    $ vi /etc/mnttab    
    
12. 콘솔과 단말기
     명령어가 먹는 것은 같으나, 단말기의 명령어 실행 진행 상황이 콘솔에 나타난다.
     단말기에서 ifconfig가 먹는다.
     
13. 지나간 명령어 보기
     - ESC 두번 누르고 k 로 보기
     - 몇글자 치고 ESC
     
14. 새 하드디스크 올리기
     $ format			# 새 디스크를 찾는다.
     $ newfs			# 올리고
     $ fsck			# 적용한다.
------------------------------------------------------------------

*. 시스템정지와 재부팅

halt - 실행중인 모든 프로세스를 kill 하고 OS를 정지시키면 disk를 Synd하고 boot PROM monitor 프롬프트에서 정지한다. 

fasthalt - halt 명령어와 동일한 작업을 수행하나 이과정은 fasthalt 명령어를 수행할때 
           / disk 에 fastboot file을 생성하여 시스템이 Rebooting될때 
           /etc/rc, /etc/rc,boot 라일의 수행시 disk check(fsck)를 하지않고 booting이 된다. 

reboot - halt 명령어와 동일한 작업을 수행하나 시스템이 boot PROM monitor 프롬프트 상태에서 
         정지해 있지 않고 다시 Rebooting이 된다. 

fastboot - reboot 명령어와 동일한 작업을 수행하나 시스템이 Rebooting 될때 disk check(fsck)를 하지 않고 booting이 된다. 

shutdown - System을 사용하고있는 User들에게 주어진 시간안에 Shutdown된다는 Message를 보내고 Shutdown한다. 


*. sync의 필요성

sync는 super block 및 block에 operation을 행하여 그 내용이 변한 것 중에 
disk에 저장되지 못한 block들을 write 시키도록 하는 명령이다. 
sync를 하지 않고 전원을 끈 경우, boot 시에 file system check에서 에러가 발생하는 경우가 대부분이다.


*. Booting and Halting

- Booting 

일반적인 부팅
OK boot 

시디롬 부팅
OK boot cdrom 
예제)
# repeat 10 sync; init 0
OK boot cdrom
 



새로운 SCSI Adepter 부팅 
OK boot -r

- Halting  

# repeat 10 sync
# init 0
반응형

'OS > SOLARIS' 카테고리의 다른 글

[펌] 솔라리스 시스템에서 갑작스런 패닉 현상  (0) 2005.08.31
[펌] Boot PROM  (0) 2005.08.04
[펌] 솔라리스 백업 정책  (0) 2005.07.14
[펌] 백업과 복구  (0) 2005.07.12
[펌] Solaris Memory 관리  (0) 2005.07.12
Posted by [PineTree]
OS/SOLARIS2005. 7. 14. 00:49
반응형

Cloning Disk


  1. 문서 정보
    작성자: 보리수 작성일: 2003.5.1 수정일: 2003.5.1 저작권: 이 문서는 GPL(Gnu Public License)을 따릅니다. 
  2. 소개

    디스크의 복제

    솔라리스를 설치하고 필요한 소프트웨어와 관련 설정을 모두 마치고 나면 당연히 관리와 백업의 문제가 남아있다. 테이프나 네트웍 백업의 단점은 시스템에 문제가 발생할 때에 즉각 조치하기 어렵다는 것이다. 디스크의 결함이나 당장 원인을 알수없는 문제로 서버가 정상동작하지 않는다면 빠른 복구가 필요하고, 추후에 원인을 분석 처리하는 것이 순서이다.
    따라서 중소규모 서버의 경우, OS 디스크를 복제해두고 빠른 대응을 요구하는 경우 복제한 디스크를 이용하여 복구를 처리하면 좋을 것이다.

    여기에서는 OS 디스크를 그대로 복제하는 방법을 설명하고자 한다. 우선 복제할 여유 디스크를 해당 시스템에 장착한다. 내장형이던 외장형이던 상관없다. 다음과 같은 방법을 생각해 볼 수 있다. 모두 설치 CD-ROM으로 싱글유저 모드로 부팅하여 작업하거나 부득이 할 경우 부트 디스크의 single user mode에서 작업해야 한다. 정상 운영중인 OS를 복제하는 방법은 snapshot이 있다.

    dd명령을 이용한 디스크 복제
    이 경우 디스크 이미지를 그대로 복제하기 때문에 OS의 파일 시스템을 이용하지 않으며 간단히 복제가 가능하다. 디스크와 시스템의 지원 속도에 따라 블럭사이즈를 정해 주면 좀 더 나은 속도로 복제가 가능하지만 대체로 시간이 길게 소요된다. 주의할 것은 같은 제품의 똑같은 사이즈의 디스크로 해야 한다는 것이다.

    tar또는 ufsdump를 이용한 복제
    이 경우는 파일시스템으로 처리하므로 훨씬 빠르게 복제할 수 있으나 VTOC(Disk Lable) 의 처리 및 부트블럭 복구(bootblk)를 해 주어야 한다. 하지만 여러 경험자들에 의해 정리된 스크립트들이 있으므로 이를 활용하면 된다. 우선 순서대로 처리해 보고 본질을 파악한 다음 스크립트를 이용해보자. 솔라리스 OS의 복제는 ufsdump가 가장 안전하고 문제가 없다. tar의 경우에는 gnu tar를 쓰는 것이 훨씬 빠르고 강력하다. 그러나 많은 엔지니어들은 tar보다는 ufsdump를 권장한다.

    Mirroring
    썬에서 기본제공하는 Solstice DiskSuite (SDS)를 이용하여 OS 디스크를 미러링할 수 있다. 이것은 디스크복제와는 엄밀히 다르나 OS 디스크가 문제가 있다면 미러링에 의해 복구처리를 자동으로 해 줄 수 있을 것이다. 또한 Veritas의 Volume Replicator를 이용하면 OS디스크 이상의 미러링이 가능하며 동일하지 않는 디스크(heterogeneous)에도 적용할 수 있는 장점이 있다.

    snapshot
    솔라리스에서 제공하는 것으로 현재 운영중인 OS의 모든 파일시스템을 일기가능한 스냅샷 이미지를 만들고 이를 가상 디바이스에 연결하여 백업하는 방법이다. 시스템을 중지해서는 안되는 시스템에 적용할 수 있다. Solaris8 부터 지원되며 CD-ROM 이나 Single User 모드에서 작업할 수 없는 시스템에서 유용하다.

  3. dd 명령을 이용한 디스크 복제

    1. 복제용 디스크를 새로 장착한다.
    2. CD-Rom 또는 OS디스크를 이용하여 Single User mode로 부팅한 다음 root로 로그인한다.
      CD-Rom의 경우 install CD 또는 software 1/2 CD를 이용하고 PROM에서 다음과 같이 수행한다.

      OK boot cdrom -s

      OS 디스크의 경우는 다음과 같다.

      # init S

    3. dd명령을 수행한다.
      OS 디스크는 /dev/rdsk/c0t3d0s2, 복제 디스크는 /dev/rdsk/c1t0d0s2라 가정한다. 여기에서 s2는 디스크 전체를 의미한다.

      # dd if=/dev/rdsk/c0t3d0s2 of=/dev/rdsk/c1t0d0s2 bs=521k

      if: 입력 디바이스 (OS 원본 디스크의 장치명)
      of: 출력 디바이스 (복제 디스크의 장치명)
      bs: 블럭 사이즈 ( 128k, 512k등 : 블럭단위가 클수록 복제 속도가 빠르나 이는 디스크의 IO에 달렸다. 참고로 512K로 수행시 SCSI 9G 10k rpm의 경우 약 1시간 20여분 소요)

    4. 복제 디스크의 파일 시스템을 검사한다.
      s#은 복제 디스크 각각의 ufs 파일시스템을 말한다.

      # fsck /dev/rdsk/c1t0d0s#

    5. 복제 디스크의 root(/) 파일시스템을 마운트한다.
      # mount /dev/dsk/c1t0d0s0 /a

    6. vfstab파일의 장치명을 적당한 이름으로 수정한다.
      # TERM=sun
      # export TERM
      # vi /a/etc/vfstab ( => c0t3d0s0 를 c1t0d0s0 로 모두 변경)

      참고) 보통은 복제 디스크가 장애처리시 OS디스크와 대체될 것이므로 수정하지 않아도 된다. 그러나 복제디스크를 시스템에 장착해 두었다가 문제가 발생하면 이 디스크로 바로 부팅하려면 수정이 필요하다. 이 경우 PROM에서 nvalias로 복제디시크의 별명을 설정해두면 PROM에서 부팅시 편리하다.

    7. 복제 디스크의 root(/) 파일 시스템을 언마운트한다.
      # cd /
      # umount /a

    8. 복제 디스크로 부팅한다.
      # init 0
      OK boot disk2 ( => 복제디스크가 disk2로 가정, PROM명령 devalias로 확인한다.)

      참고1) 위에서 언급했듯이 시스템에 장착해 두려는 경우 PROM명령 nvalias로 설정해 두면 편리하다.

    - 복제 디스크를 똑같은 타 시스템에 적용하려면
    복제 디스크를 똑같은 타 시스템에 적용하려면 다음과 같다.
    1) DISK를 시스템에 장착한다.
    2) 파워를 켜고 바로 stop + a 키를 동시에 누른다.
    3) PROM 모드에서 디스크 연결을 확인한다.
    OK probe-sci (IDE disk의 경우 probe-ide)
    4) 복제 디스크로 부팅한다.
    OK boot disk# -s (#은 복제 디스크의 번호, -s는 싱글유저 모드)
    5) 루트로 로긴한다.
    6) 복제 디스크의 시스템 기본 정보 설정을 다시한다.
    # sys-unconfig ( OS가 재부팅되고 관련 설정을 수행한다.)

    주의) 이 때도 마찬가지로 복제 디스크의 vfstab에 설정된 디바이스 명이 같은가를 판단하여 다르다면 CD-ROM single User로 부팅하여 복제 디스크의 /(root) 파일 시스템을 마운트하고 vfstab을 맞게 수정한다음 위의 방업을 수행한다.

  4. tar 또는 ufsdump를 이용한 복제

    ufsdump와 ufsrestore는 이를 위한 가장 안전하며 바람직한 방법이다. 여기에서는 tar의 설명은 생략한다.
    I used the following steps to backup one drive to a second identical one (going from memory) 1) use prtvtoc and fmthard to partition the second disk 2) newfs the slices on the second disk 3) mount up the root slice of the second disk under /mnt 4) cd /mnt;ufsdump of - / | ufsrestore rf - 5) sed < /mnt/etc/vfstab -e s/c0t3d0/c0t1d0/g > /tmp/vfstab.new 6) mv /tmp/vfstab.new /mnt/etc/vfstab 7) cd /;umount /mnt 8) continue to mount up each remaining slice and copy the data to it. 9) I would also fsck each slice on the new disk just to make sure everything is ok. 10) run installboot on the new disk to create the boot blocks Once you've done this you can do a "boot disk1" from the ok prompt. This method saved my "tech lead's" butt once. Boot off of the second internal (cold backup) disk and the server was back up again. Dupe the disk1 back to disk3 and reboot later in the evening. I am never going to let him live down that mistake! 


  5. Mirroring



  6. 참고 문헌

    1. How to Clone a Disk
      http://tiger.la.asu.edu/Solaris_Clone.htm
반응형

'OS > SOLARIS' 카테고리의 다른 글

[펌] Boot PROM  (0) 2005.08.04
[펌] [ UNIX ] 각종 명령어  (0) 2005.08.04
[펌] 백업과 복구  (0) 2005.07.12
[펌] Solaris Memory 관리  (0) 2005.07.12
[펌] Fast Ethernet Duplex 설정  (0) 2005.07.12
Posted by [PineTree]
OS/SOLARIS2005. 7. 12. 22:11
반응형

백업과 복구

- 백업 테이프 드라이브

/dev/rmt/<unit-number>[<density>][<no-rewind>]

<unit-number>

몇 번째 백업 테이프 드라이브인지 숫자를 이용하여 나타낸다. 0일 경우에는 첫 번째 백업테이프 드라이브임.

<density>

l(low), m(medium), h(high), u(ultra), c(compressed) 중 하나를 사용한다.

생략시 일반적으로 가장 높은 밀도를 사용해서 데이터를 기록한다.

<no-rewind>

백업이나 복구 명령어 수행 후 테이프가 되감기지 않고 현재 상태에서 가만히 둔다. 하나의 백업 테이프에 여러 내용을 백업하여 기록하기 위하여 사용한다.


- ufsdump 명령어

ufsdump [[0123456789]unvloSf] dump_name (file or directory or partition)

ufs 파일 시스템에서만 사용 가능하다.

백업할 파일이나 디렉토리 외에 다른 이름을 입력하지 않으면 9uf /dev/rmt/0를 기본 사용.

옵션

의  미

0~9

/etc/dumpdates를 참조해서 완전백업 및 증분백업을 결정한다.

레벨은 항상 자신보다 이전의 레벨을 참조한다. 이전의 레벨이 자신보다 작으면 그 레벨 이후의 변경 내용을 백업하고, 자신과 레벨이 같거나 크면 자신보다 작은 레벨을 찾아서 그 레벨 이후의 변경 내용을 백업한다.

u

update) /etc/dumpdates 파일의 내용을 갱신한다. 백업하는 대상이 반드시 파일이나 디렉토리가 아닌 파티션을 입력해야 정보가 남는다. /etc/dumpdates 파일은 백업을 시작한 시간이 기록된다.

n

notify) sys그룹에 속한 사용자들 중에서 현재 로그인한 사용자가 있을 경우 해당 사용자에게 메시지를 전달 할 수 있다.

l

autoloading) 하나의 백업 매체에 데이터를 모두 기록하지 못하면 자동으로 다른 백업 매체로 바꾸어서 기록한다.

o

offline) 백업이 끝나면 백업 매체를 자동으로 배출한다.

s

estimate) 주로 증분백업을 하기 전에 사용한다. 백업하는 데이터의 양을 출력하므로 그 양에 따라 필요한 백업 매체를 선택할 수 있다.

v

verify) 백업한 데이터와 하드디스크에 있는 데이터를 비교한다. 데이터가 정확하게 기록되었는지 다시 한 번 확인하기 위해 사용한다. 단 데이터를 백업하는 파티션이 반드시 마운트 되어 있어야 한다.

f

file) f 다음에는 백업 장치명을 적는다. 생략시 /dev/rmt/0를 기본으로 사용한다.

하드디스크를 언마운트한 후에 백업하는 것이 좋다. 언마운트하지 않고 백업을 하면 파일시스템에 있는 데이터가 변경될 가능성이 있다.

remote로 백업시 백업 장치가 연결된 시스템의 .rhosts에 백업을 실행할 host가 추가되어 있어야 한다. 또한 /etc/default/login 파일에서 console 이외의 터미널에서도 로그인이 가능하도록 한다.

<백업스케줄>

 

유동

월요일

화요일

수요일

목요일

금요일

매월 1일

0

 

 

 

 

 

첫째주

 

9

9

9

9

5

둘째주

 

9

9

9

9

5

세째주

 

9

9

9

9

5

네째주

 

9

9

9

9

5

 

 

 

 

 

 

 

매월 1일

a

 

 

 

 

 

첫째주

 

b

b,c

b,c,d

b,c,d,e

b,c,d,e,f

둘째주

 

g

g,h

g,h,i

g,h,i,j

b,c,d,e,f,g,h,i,j,k

세째주

 

l

l,m

l,m,n

l,m,n,o

b,c,d,e,f,g,h,i,j,k,l,m,n,o,p

네째주

 

q

q,r

q,r,s

q,r,s,t

b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u


 

유동

월요일

화요일

수요일

목요일

금요일

매월 1일

0

 

 

 

 

 

첫째주

 

9

9

9

9

3

둘째주

 

9

9

9

9

4

세째주

 

9

9

9

9

5

네째주

 

9

9

9

9

6

 

 

 

 

 

 

 

매월 1일

a

 

 

 

 

 

첫째주

 

b

b,c

b,c,d

b,c,d,e

b,c,d,e,f

둘째주

 

g

g,h

g,h,i

g,h,i,j

g,h,i,j,k

세째주

 

l

l,m

l,m,n

l,m,n,o

l,m,n,o,p

네째주

 

q

q,r

q,r,s

q,r,s,t

q,r,s,t,u


 

유동

월요일

화요일

수요일

목요일

금요일

매월 1일

0

 

 

 

 

 

첫째주

 

3

4

5

6

2

둘째주

 

3

4

5

6

2

세째주

 

3

4

5

6

2

네째주

 

3

4

5

6

2

 

 

 

 

 

 

 

매월 1일

a

 

 

 

 

 

첫째주

 

b

c

d

e

b,c,d,e,f

둘째주

 

g

h

i

j

b,c,d,e,f,g,h,i,j,k

세째주

 

l

m

n

o

b,c,d,e,f,g,h,i,j,k,l,m,n,o,p

네째주

 

q

r

s

t

b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u


- ufsrestore 명령어

ufsrestore (i|r|x|t)vf

ufsdump 명령어로 백업한 파일을 다시 원복하기 위해 사용한다.

옵션

의   미

i

interactive) 백업 데이터를 돌아다니면서, 백업 데이터 안에 있는 파일이나 디렉토리의 목록도 직접 보고, 또한 복구할 파일을 마음대로 선택할 수 있는 기능을 제공한다.

ls, cd, add, delete, extract, quit, marked 명령어를 사용한다.

add : 복구할 파일 목록에 현재 디렉토리나 특정 파일을 추가한다.

delete : 복구할 파일 목록에서 현재 디렉토리나 특정 파일을 삭제한다.

extract : 선택한 모든 파일과 디렉토리를 복구한다.

marked : 현재 디렉토리에서 선택된 파일의 목록을 출력한다.

r

restore) 백업 데이터를 원래대로 복원한다. 현재 디렉토리를 기준으로 복구하므로 원하는 위치로 이동후 데이터를 복원한다.

명령어 실행시 디렉토리에 restoresymtable 파일이 생성된다. 복구되는 모든 파일의 목록,백업 레벨, 날짜 등의 정보를 제공한다. 증분 백업한 백업 데이터에서 파일을 복구할 경우 참조하고 갱신하는 파일이다.

x

extract) 원하는 파일이나 디렉토리만 복구할 때 사용한다. 반드시 복구할 파일이나 디렉토리의 이름을 아규먼트로 명시해야 한다.

t

list) 백업 데이터에 있는 파일과 디렉토리의 목록을 i-node 번호와 함께 출력한다. x 옵션을 사용하기에 앞서 원하는 파일을 확인하는데 주로 사용한다.

v

verbose) 백업 데이터에 있는 파일이나 디렉토리를 복구할 때 목록을 함께 출력한다.

f

file) 백업한 데이터가 /dev/rmt/0 장치가 아닌 다른 곳에 있을 경우에 그 위치를 명시한다.


-원칙은 unmount 후에 백업을 하여야 하지면 여기에서는 생략한다.-

# vi /etc/vfstab  (/p3에 파티션 할당.)

# mount /p3

# cd /p3

# cp -r /etc/init.d /p3 

# ufsdump 0uf dump00 /p3  (완전백업)

# cp -r /etc/default /p3

# ufsdump 1uf dump01 /p3  (이전 레벨0 이후의 증분백업)

# more /etc/dumpdates  (레벨별 백업 시작 시간 기록)

# cp -r /etc/mail /p3

# ufsdump 4uf dump04 /p3 (이전 레벨1 이후의 증분백업)

# cp -r /etc/nfs /p3

# ufsdump 2uf dump02 /p3 

(이전 레벨4가 아닌 레벨1 이후의 증분백업. 레벨4의 내용도 백업한다.)

# cp -r /etc/skel /p3

# ufsdump 2uf dump02 /p3

(이전 레벨2가 아닌 레벨1 이후의 증분백업. 레벨4뿐만 아니라 이전의 레벨2의 내용도 백업한다. 동일한 백업 레벨을 사용할 경우 /etc/dumpdates 파일에 있던 이전 내용이 삭제되고 새로운 내용이 추가된다.)

# cp -r /etc/dfs /p3

# ufsdump 8uf dump08 /p3  (이전 레벨2 이후의 증분백업)

# ufsdump 6Suf dump06 /p3 

(S 옵션을 사용하면 백업을 하지 않고 백업후 생성되는 파일의 크기만 출력한다.)

# ufsdump 1uf dump11 /p3  (맨 처음의 레벨0 이후의 모든 내용을 증분백업)

# ufsdump 5f dump05 /p3 

(이전 레벨1 이후의 증분백업. /etc/dumpdates 파일에 기록이 남지 않는다.)

# ufsdump u /p3 

(기본적으로 레벨9, /dev/rmt/0으로, 이전 레벨5가 아닌 레벨1 이후의 증분백업.

/etc/dumpdates 파일에 기록이 되어 있지 않아서 레벨1을 이전 레벨로 인식한다.)

hostA# rsh hostB cat /.rhosts  (hostB의 .rhosts에 등록이 되어 있다.)

  hostA root

hostA# ufsdump 0uf hostB:/dev/rmt/0 /p3  (remote 백업이 가능하다.)

# cd /p4

# ufsrestore tf /p3/dump00 (dump00을 복구하지 않고 내용만 확인한다.)

# ufsrestore rf /p3/dump00

(dump00을 복구한다. v 옵션이 없으므로 작업 진행 과정은 출력되지 않는다.)

# ufsrestore vrf /p3/dump04

(dump01 이후만 백업했으므로 dump01이 복구된 후에 복구가 가능하다.)

# ufsrestore vrf /p3/dump01  (dump00이 복구되어 있으므로 복구가 가능하다.)

# ufsrestore vrf /p3/dump04  (dump01이 복구되어 있으므로 복구가 가능하다.)

# ufsrestore ivf /p3/dump00

ufsrestore> cd mail  (백업 파일내의 mail 디렉토리로 이동한다.)

ufsrestore> add aliases sendmail.cf submit.cf  (복구 파일 목록에 추가한다.)

ufsrestore> marked  (복구 파일 목록에 있는 파일이나 디렉토리 목록만 출력한다.)

ufsrestore> delete submit.cf (복구 파일 목록에서 삭제한다.)

ufsrestore> extract (선택한 파일이나 디렉토리만 복구한다.)

Specify next volume#: 1

Set directory mode, owner, and times.

Set owner/mode for '.'? [yn] y

(디렉토리(.)의 권한과 소유주를 백업 파일의 내용과 비교한다. y 로 대답하면 현재 디렉토리의 권한과 소유주가 백업 파일의 내용과 동일하게 변경된다.)

ufsrestore> q

# ufsrestore rvf hostB:/dev/rmt/0 (remote 복구)


- 스냅샷(snapshot)

ufsdump 명령어는 데이터를 백업하면서 실시간으로 정보를 수집하지 않고 미리 필요한 정보를 완전하게 구축한 후에 데이터를 백업하므로 정보를 구축한 이후에 변경된 내용은 전혀 반영되지 못한다.

S 런 레벨에는 시스템에서 필수적으로 필요한 서비스와 파티션을 마운트하여 사용하기 때문에 백업과 복구용으로 가장 좋다. 하지만 외부에서 필요한 서비스를 제공할 수 없기 때문에 사용자의 불편을 초래한다. 이런 환경에 대처하기 위해서 snapshot 기능을 사용한다. snapshot 기능을 사용하면 snapshot을 만든 이후에 변경되거나 제거된 파일이 있어도 안전하게 데이터를 백업할 수 있다. 파일시스템의 변화가 많으면 snapshot의 크기도 커진다.

snapshot은 /tmp나 NFS로 공유된 디렉토리에도 만들 수 있다. 여유공간이 넉넉한 파일시스템을 사용한다. 하지만 snapshot 저장 파일이 있는 파티션은 snapshot으로 지정할 수 없다.

fssnap 명령 수행시 /dev/fssnap(가상 block device), /dev/rfssnap(가상 raw device)가 생성된다. 이 가상 장치 파일은 어떤 백업 명령어에서도 사용 가능하다.


옵션

의   미

-i

information) 스냅샷 정보 보기.

-d

delete) 스냅샷 삭제.

-o

여러 조건을 명시할 수 있다.

 

bs=path

스냅샷을 저장할 경로명 지정. 백업 대상이 되는 파일에 만들 수 없다.

 

unlink

스냅샷을 위한 가상 장치 파일은 생성한 후에 스냅샷 파일을 지운다.

 

maxsize=n[kmg]

스냅샷의 최대 크기를 지정한다.

 

raw

스냅샷을 위한 raw 가상 장치 파일의 경로명을 출력한다.




# df -k

# mkdir /p5/snapshot (여유 공간이 많은 파일시스템 선택)

# ls -l /dev | grep fssnap  (아직 /dev 밑에 /fssnap과 /rfssnap이 존재하지 않는다.)

# fssnap -o maxsize=2g,bs=/p5/snapshot/root0 /

(/의 스냅샷을 /p5/snapshot/root0 파일에 생성하고, 최대크기는 2기가이다.)

# fssnap -i (현재 시스템에 정의된 모든 스냅샷의 정보 출력)

# fssnap -i /  (해당 스냅샷의 자세한 정보 출력)

# ls -l /dev | grep fssnap  (가상 장치 파일이 생성 여부 확인)

# ls -F /dev/fssnap /dev/rfssnap

# ls -l /p5/snapshot (/p5/snapshot/root0 스냅샷 파일이 생성된다. 파일의 크기는 존재하지만 실제 데이터 블록은 할당되지 않아서 디스크 공간은 거의 줄지 않는다.)

# mkdir /new

# cp -r /etc/init.d /new

# ls -l /p5/snapshot  (새로운 내용이 복사되면 스냅샷의 내용도 변한다.)

# ufsdump 0ufN /dev/rmt/0 /dev/rdsk/c0t0d0s5 /dev/rfssnap/0

(N 옵션과 함께 /etc/dumpdates 파일에 넣을 장치의 경로명을 명시하면 /etc/dumpdates파일에 올바른 내용이 기록된다.)

# fssnap -i /

# fssnap -d /

# rm /p5/snapshot/root0 (스냅샷을 제거해도 스냅샷을 저장한 파일은 남아 있으므로 직접 제거한다.)

# fssnap -o maxsize=2g,maxsize=/p5/snapshot/root0,unlink /

(unlink 옵션을 사용하면 스냅샷을 저장하는 파일을 별도로 생성하지 않는다.)

# fssnap -d /

# ufsdump 1ufN /dev/rmt/0 /dev/rdsk/c0t0d0s0 `fssnap -o maxsize=2g,bs=/p5/

snapshot/root0,unlink,raw /`

(라인 하나에 증분 백업을 위한 모든 내용을 입력할 수 있다.)

# ufsdump 2ufN /dev/rmt/0 /dev/rdsk/c0t0d0s0 `fssnap -o maxsize=2g,bs=/p5/

snapshot/root0,unlink,raw /`

(스냅샷은 만들어질 당시의 내용을 유지하기 위한 것이므로, 동일한 스냅샷에서 증분 백업을 시도하면 백업되는 내용이 없다.)

# fssnap -d /

# ufsdump 2ufN /dev/rmt/0 /dev/rdsk/c0t0d0s0 `fssnap -o maxsize=2g,bs=/p5/

snapshot/root0,unlink,raw /`

(스냅샷을 이용해서 증분 백업을 하기 위해서는 반드시 이전 증분 백업으로 사용한 스냅샷을 지우고 다시 생성해야 한다. 스냅샷이 수행된 지점까지의 완전 백업은 가능하다.)


- ufsdump 명령어를 이용한 하드디스크 교체

# init 0

ok> setenv auto-boot? false

ok> boot cdrom -s

# ufsdump 0f /dev/rmt/0 /dev/rdsk/c0t0d0s0

# init 5

하드디스크 교체

ok> boot cdrom -s

# format

# newfs /dev/rdsk/c0t0d0s0

# fsck -y /dev/rdsk/c0t0d0s0

# mount /dev/dsk/c0t0d0s0 /a

# cd /a

# ufsrestore rvf /dev/rmt/0

# rm restoresymtable

# installboot /usr/platform/`uname -m`/lib/fs/ufs/bootblk /dev/rdsk/c0t0d0s0

# cd /

# umount /a

# init 6


- ufsdump와 ufsrestore를 이용한 파일 복사

특수한 파일(파이프나 소켓)은 cp 명령어 등을 사용해서 복사할 수 없다. ufsdump 명령어와 ufsrestore를 사용하면 모든 파일을 복사할 수 있다.

# du -sk /etc

# cd /p5

# ufsdump 0f - /etc | ufsrestore vrf -

(‘-’ 는 메모리(SWAP)를 이용하란 뜻. 즉, 실제로 저장할 필요없으니 /etc를 메모리에 올렸다가 내리게 된다.)

# rm restoresymtable

# du -sk ./etc


- cpio 명령어

format: [ command | ] cpio options [ >> filename ]

옵션

의   미

o

arvhive create ( backup )

i

extract (restore)

p

directory 를 그대로 다른 file system 에 복사하고자 할경우

d

-i 나 -p 옵션 사용시 함께 사용하면 디렉토리 자동 생성

B

Block 단위로 작업 ( default = 512byte block )

c

information

H

head information ( -c 와 같이 사용함 )

v

verbose mode

t

file name 의 list 를 보여줌.

m

-i 나 -p 옵션 사용시 함께 사용하면 원래의 날짜를 그대로 유지한다.


# find . -print | cpio -ovcB > /dev/rmt/0lb   (현재 부터 모든것을 백업)

# cpio -ivcB test_file < /dev/rmt/0lb    (test_file만 restore)

# find . -mtime -7 -print | cpio -ovcB > /dev/rmt/0lb (7일이 경과한 파일 백업)

# find . -name 'file*' -print | cpio -ovcB > file.list

(현재부터 file*로 시작되는 모든 list backup)

# cpio -ivt < file.list  (file.list 의 모든 것을 restore)

# find /etc -print | cpio -dpmv /p3

(/p3/etc로 cp로 복사가 불가능한 파일까지 모든 파일이 복사된다.)


- mt 명령어

# mt -f /dev/rmt/0 status  (tape 상태 표시)

# mt -f /dev/rmt/0 eom  (맨 끝으로 이동, 끝부분 헤더로 이동)

# mt -f /dev/rmt/0 rewind  (처음으로 되감기)

# mt -f /dev/rmt/0n fsf count  (count만큼 뒤로 이동)

# mt -f /dev/rmt/0n nfsf count  (count+1만큼 뒤로 이동)

# mt -f /dev/rmt/0n bsf count (count만큼 앞으로 이동)

# mt -f /dev/rmt/0n nbsf count  (count+1만큼 앞으로 이동)

# mt -f /dev/rmt/0 erase  (모든 내용 삭제)

# mt -f /dev/rmt/0 offline  (eject)

 

* 출처 : http://blog.empas.com/syk1000/?c=245590

반응형

'OS > SOLARIS' 카테고리의 다른 글

[펌] [ UNIX ] 각종 명령어  (0) 2005.08.04
[펌] 솔라리스 백업 정책  (0) 2005.07.14
[펌] Solaris Memory 관리  (0) 2005.07.12
[펌] Fast Ethernet Duplex 설정  (0) 2005.07.12
[펌] /etc 파일 설명  (0) 2005.07.12
Posted by [PineTree]
OS/SOLARIS2005. 7. 12. 21:43
반응형

    2. Memory

Doc Rev: 2.0   junsoft.com

2.1   가상 메모리(Virtual Memory)

Solaris는 가상 메모리(Virtual Memory) 시스템을 사용한다. 가상 메모리 시스템이란 물리적 메모리(physical memory)와 하드 디스크(swap device)를 결합하여 하나의 큰 메모리 처럼 사용하는 것을 말한다.
즉, 물리적 메모리가 100M 이고 swap device가 100M이면 가상 메모리량은 약 180MB 정도 된다.

physical memory + swap device - VM management overhead = swap(VM)

		== simple ==

(physical memory + swap device) * about 90% ~= swap(VM)

	(100M + 100M) * 0.9 ~= 180M

Solaris는 이러한 가상 메모리를 관리하기 위하여 메모리를 페이지 단위(8KB)로 나누어 관리한다. 이러한 페이지들을 모아서 세그먼트로 구성하여 사용한다. 프로세스가 동작하기 위해서는 그 프로세스가 필요한 메모리가 있다. 그러나 그 메모리가 물리적 메모리에 모두 적재되어야 실행되는 것은 아니다. 프로세스가 실재 액세스하는 메모리만 물리적 메모리에 적재되어 있어도 프로세스는 실행된다.
그런데 여유 있는 물리적 메모리가 없어서 프로세스에게 필요한 메모리를 줄 수 없을 때 커널은 현재 사용하고 있는 물리적 메모리 중에 최근에 사용되지 않은 메모리를 선택하여, (필요하면, 선택된 메모리를 swap partition에 저장하고) 그 메모리를 그 프로세스에게 준다.

Solaris에서는 가상 메모리(Virtual Memory)를 swap으로 명칭한다(swap partition과 구별해 주십시오). 이 swap(VM)은 운영체제가 사용할 수 있는 메모리이다. vmstat 명령어의 4번째 필드 swap은 사용 가능한 가상 메모리의 크기를 KB 단위로 나타내고 5번째 필드 free는 사용 가능한 물리적 메모리(Physical Memory)를 KB 단위로 나타낸다.

가상 메모리에 대한 자세한 사항은 다음과 같이 swap -s 명령어로 알 수 있다.

# swap -s total: 664720k bytes allocated + 53320k reserved = 718040k used, 485160k available

swap 공간에서 718040KB가 사용되고, 485160KB?사용 가능하다. 사용된 718040KB 중에서 실재 할당 받아서 사용한 것은 664720KB이고 53320KB는 예약된 메모리 이다.
할당 받은 것과 예약한 것의 차이는 다음과 같다.
만일 프로세스가 데이타를 관리하기 위하여 10MB의 메모리가 필요하여 10MB의 메모리를 요청했다면 10MB의 메모리가 그 프로세스가 사용할 수 있도록 예약해 둔다. 그리고 그 프로세스가 메모리를 실재 액세스할 때, 그 메모리가 할당된다.
예를 들어 10MB 메모리를 요청하여 1MB의 메모리만 액세스하였다면, 1M은 allocated된 영역에 더 해지고, 9MB는 reserved 영역에 더 해진다.

응용 프로그램이 동작할 때, 필요한 메모리는 swap(VM)에서 가져온다. 물리적 메모리가 많든 적든 관계없이 swap 공간이 충분하면 프로그램이 실행되는 데에는 전혀 문제가 없다. 만일 물리적 메모리가 절대적으로 부족하다면, 실행속도가 늦어질 뿐, 메모리 부족으로 애플리케이션이 중단되는 일은 없다.

swap partition에 대한 정보는 다음과 같이 swap -l 명령어로 확인할 수 있다.

# swap -l swapfile dev swaplo blocks free /dev/dsk/c0t0d0s1 151,1 16 1638992 933104

blocks은 전체 swap partition의 크기이며 512 바이트 단위의 블럭이고, free는 그 중에 사용 가능한 swap partition의 크기이며 512 바이트 단위의 블럭이다. 즉,

(blocks - free) / 2 = 현재 스왑 아웃된 양(KB)

위의 swap -l 명령어의 결과에서 보면, 352944KB의 메모리가 swapout 되었음을 알 수 있다.

(1638992 - 933104) / 2 = 352944KB ~= 344.67MB

실제 swap이 좀 더 구체적으로 어떻게 관리되는지 자세히 알아보자.


available
swap(VM) = DSP (disk swap partition) + PM (physical memory)
	       (        DA	   ) +    (    MC + MA    )

* Memory allocation:

reserved

allocated

1. request:

p = malloc( 100MB );

100M

0M

2. use:

for( i = 0; i < 10M; i++ ) *(p+i) = 1;

90M

10M

첫번째 프로세스가 메모리를 요청하면, 요청한 메모리 만큼 예약하여 둔다. 그리고 그 메모리를 실재로 액세스할 때 그 메모리가 물리적 메모리에 할당된다.


vmstat 명령어의 결과물에 있는 다음과 같은 필드와 함께 Solaris 메모리 관리 방법을 설명한다.

# vmstat 1 procs memory page disk faults cpu r b w swap free re mf pi po fr de sr aa dd s1 s4 in sy cs us sy id 0 0 0 952128 87416 0 24 35 0 0 0 0 0 2 0 1 264 1327 272 7 2 90 0 0 0 931344 48384 0 2 0 0 0 0 0 0 0 0 0 204 191 94 0 1 99 0 0 0 931344 48384 0 137 0 0 0 0 0 0 0 0 0 204 449 102 12 2 86

swap: 

amount of swap space currently available (Kbytes)

free: 

size of the free list (Kbytes)

re: 

page reclaims

mf: 

minor faults

pi: 

kilobytes paged in

po: 

kilobytes paged out

fr: 

kilobytes freed

de: 

anticipated short-term memory shortfall (Kbytes)

sr: 

pages scanned by clock algorithm

Solaris에서 여유 있는 물리적 메모리를 화일 시스템의 캐쉬로 사용한다. 디폴트로 프리 메모리(free physical memory)가 전체 물리적 메모리 양의 1/64(lotsfree)보?크면, 화일 시스템을 통한 디스크 I/O는 모두 메모리에 남겨두어 화일 시스템의 캐쉬로 사용한다. 프리 메모리가 물리적 메모리 양의 1/64보다 적으면, Solaris는 프리 메모리를 1/64로 채우기 위하여 시스템에 있는 페이지를 조사하여, 최근에 사용되지 않은 페이지를 찾아서 프리시킨다.
이때 운영체제가 조사한 페이지의 갯수가 sr(scan rate)값이다. sr값이 높으면(30초 단위로 측정한 값이 초당 200-300 이상), 그 순간에 메모리가 부족하다고 판단할 수 있다.
프리시킨 페이지 수는 KB 단위로 환산되어 fr(free)에 보여준다. 페이지를 프리시킬 페이지의 내용이 변경되었을 경우, 그 페이지를 disk에 저장한다. (변경된 페이지가 프로그램의 데이타일 경우, 스왑 파티션에 저장되고, 화일 시스템의 케쉬이면 해당 디스크 파티션에 저장된다.) 이때, 디스크에 저장된 페이지를 KB 환산하여 po(page out)에 보여준다.
Solaris에서 화일 시스템은 페이지 서브 시스템을 통하여 이루어 진다. 즉, 화일 시스템의 입출력은 모두 page I/O로 이루어 진다. 화일 시스템을 통하여 화일을 읽을 때, 읽은 양은 KB로 환산되어 pi(page in)에 보여준다.

프로그램을 실행할 경우에 운영체제는 프로세스에 대한 어드레스 맵핑 테이블을 만들고, 프로세스를 실행한다. 프로세스가 실행되다가 필요한 페이지가 자신의 어드레스 맵핑 테이블에 연결되어 있지 않으면, 페이지 폴트가 발생하는데, 그 페이지가 메모리에 있으면(minor page fault라고 함), 그 페이지를 자신의 어드레스 맵핑 테이블에 등록한다. vmstat의 mf(minor fault)는 minor page fault 횟수를 나타낸다.

프리 메모리가 부족할 경우, paging이 발생하여 최근에 사용되지 않은 페이지를 찾아서 프리시켜 부족한 메모리를 보충하게 되는데, 이렇게 프리되는 페이지의 내용은 훼손되지 않고 프리 메모리 영역에서 관리된다. 이렇게 프리된 페이지가 프로세스의 요청에 따라 다시 사용될 수 있다. 이렇게 다시 사용된 페이지 수를 re(reclaim)에 보여준다.

페이지의 크기는 pagesize 명령어로 확인할 수 있다.(sun4u 시스템은 8KB이고 sun4m은 4KB이다)

# pagesize 8192

특별히 메모리를 많이 사용하는 프로그램이 없는데도, 보통 Solaris 시스템의 free memory의 크기가 아주 작게 보인다. 이것은 정상적이라고 말할 수 있다. 이것은 앞에서 설명한 바와 같이 화일 시스템의 캐쉬로 많은 부분이 사용되고 있기 때문이다. 이것을 테스트해 볼 수 있는 방법으로 다음과 같이 할 수 있다. 시스템을 부팅한 직후에는 free memory가 많이 남아 있다. 이 상태에서 화일 시스템 I/O를 많이 발생시키는 tar 명령어를 다음과 같이 실행시키면서 vmstat 명령어로 free memory가 어떻게 줄어 드는지 살펴 보십시오.

# tar cvf /dev/null / ... skip ...

tar 명령어가 루트 디렉토리에서 부터 모든 화일을 읽어 들여서 /dev/null로 저장한다. /dev/null은 특수화일이고, 이 곳에 쓰기를 하면 그 내용은 없어진다.

(Solaris 8부터는 메모리 관리 기법이 조금 다르다. 여기서 기술하는 내용은 Solairs 7 이하에 대하여 언급한다) 다음은 vmstat 명령어의 결과물에서 메모리 관련 값에 대하여 설명한다.

2.2   메모리 튜닝 파라메터

메모리 튜닝 파라메터에는 다음과 같은 것이 있다. 이 값을 잘 못 수정하면, 시스템에 안 좋은 영향을 줄 수 있다. 그러므로 메모리 관리 기법에 대하여 충분한 지식이 없는 경우, 아래에 열거하는 파라메터를 수정하지 않은 것이 바람직 하다.
여기서는 메모리 관리 방법을 이해하기 위하여 설명한다.

cachefree:

cachefree는 priority_paging이 설정되어 있는 경우에 사용되며, 디폴트로 lotsfree의 2 배로 설정되어 있다.

커널은 자유메모리(free memory)가 cachefree 보다 적을 경우, cachefree 만큼 유지하기 위하여 시스템에서 최근에 사용되지 않았던, 메모리를 찾아서 프리시키고, 그 메모리를 자유 메모리에 포함시킨다. 이때, 프리시킬 페이지를 찾기 위해서 커널은 물리적 메모리를 다음과 같은 4가지의 분류로 관리한다.

1. 프로세스의 코드 (process's code)
2. 프로세스의 데이타 (process's data)
3. 화일 시스템의 캐쉬 (file system cache)
4. 자유 메모리 (free memory)

여기서 자유 메모리가 cachefree 보다 작고, lotsfree 보다 크면, 프리시킬 메모리를 화일 시스템의 캐쉬 중에 최근에 사용하지 않은 페이지를 찾는다.

cachefree 보다 적은 부족분을 채우기 위해서 초당 일정량의 페이지를 조사한다. (slowscan, fastscan 참조)

lotsfree + pages_before_pager:

pages_before_pager는 디폴트로 200 설정되어 있다.

만일 자유 메모리가 lotsfree + pages_before_pager 보다 적을 경우, 다음과 같이 동작한다.

- write 수행한 페이지를 프리시킨다.
- UFS와 NFS 화일 시스템에서 sequential read한 페이지를 프리시킨다.
- NFS에서 read-ahead 기능을 중단한다.
- NFS write를 synchronous write 한다.

lotsfree:

lotsfree는 디폴트로 물리적 메모리의 1/64로 설정되어 있다.

만일 자유 메모리가 lotsfree보다 적을 경우에는 메모리의 분류와 상관없이 최근에 사용되지 않았던 메모리를 찾아서 프리시킨다.
이 경우에 프리시킬 메모리가 프로그램의 데이타이고 그 내용이 변경되어 있다면, 그 내용은 swap partition에 저장된다.

desfree:

desfree는 디폴트로 lotsfree의 1/2로 설정되어 있다.

자유 메모리의 크기가 최근 30초 동안 평균이 desfree보다 적으면,
NFS version3 write operation이 중지되고, kernel async I/O도 중지되고, idle process(maxslp(20) 이상 sleep한 프로세스)는 swap out된다(Soft swaping).

이때 Swap out된 프로세스의 정보가 vmstat의 w 컬럼에 보여진다. w의 값은 쓰레드(thread)의 갯수이다. 멀티 쓰레드 프로세스가 아닌 경우에는 하나의 프로세스는 하나의 쓰레드를 가진다. 한번 swap out된 프로세스는 그 프로세스가 다시 실행될 때 메모리로 들어온다. 예를 들어, 프린터 데몬 lpsched가 swap out되었다면, 프린터를 사용하는 작업을 하지 않은 한 메모리로 들어오지 않는다.

minfree:

minfree는 디폴트로 desfree의 1/2로 설정되어 있다.

만일 run queue에 2개 이상의 프로세스가 CPU를 사용하기 위하여 대기하고 있고, 자유 메모리의 크기가 최근 30초 동안 평균이 desfree보다 작고, 최근 5초 동안 평균이 minfree보다 작고, 페이지 I/O가 과도하게(pagein+pageout > maxpgio) 발생하면,
현재 엑티브하지 않은 커넬 모듈과 화일 시스템의 캐쉬를 프리시키고, 그래도 부족한 메모리를 확보하지 못 하면 프로세스를 추가적으로 swap out한다(Hard swaping).

throttlefree:

throttlefree는 디폴트로 minfree의 값으로 설정되어 있다.

치명적인 메모리 요구를 제외한 메모리 요청은 중단된다(blocked).

pageout_reserve:

throttlefree는 디폴트로 throttlefree의 1/2로 설정되어 있다.

모든 메모리 요청이 중단된다(blocked). (pageout and sched thread 제외)

slowscan:
fastscan:

slowscan은 디폴트로 100이다
fastscan은 디폴트로 8192이다

물리적 메모리가 lotsfree 이하로 떨어지면, 부족한 메모리를 보충하기 위하여 일정량의 페이지를 조사한다. 조사할 페이지 수는 부족한 메모리의 양에 따라 slowscan과 fastscan사이의 페이지 수에서 결정된다. 이렇게 결정된 페이지는 1/4씩 page scanner에 의해 1초에 4 차례씩 페이지 수를 조사한다. page scanner가 페이지를 조사할 때, 최대로 사용할 수 있는 CPU 사용율은 CPU 한 개의 95% 이다. 부족한 페이지가 보충된 경우에 scan을 중단한다.

maxpgio:

초당 page out할 수 있는 최대 페이지 수

handspreadpages:

handspreadpages는 디폴트로 fastscan 값으로 설정되어 있다.

클럭 알고리즘에서 front hand와 rear hand사이에 있는 페이지 수

Solaris에서 부족한 메모리을 보충하기 위하여 기존에 사용하고 있던 페이지 중에 최근에 사용하지 않은 페이지를 찾아서 프리시킨다.
최근에 사용하지 않은 페이지를 찾는 방법으로 Solaris에서 클럭 알고리즘을 사용한다. 시스템에 있는 모든 메모리를 연결하여 원을 만들고 시계처럼 두개의 바늘을 둔다. 그 중에 앞 바늘과 뒷 바늘과의 간격이 handspreadpages 이다. 시스템에 물리적 메모리가 부족하면 page scanner 기동한다. 이때 두시계 바늘을 동시에 움직이면서 front hand는 해당 페이지의 access bit를 클리어하고 rear hand는 그 해당 페이지에 access bit가 설정되어 있는지 조사하여 access bit가 설정되어 있지 않으면 그 페이지를 프리시킨다. access bit는 해당 페이지를 access하면 H/W MMU에 의해 자동으로 설정된다.

priority_paging:

priority paging을 사용하려면, 다음과 같은 내용을 /etc/system 화일에 넣고 시스템을 리붙하면 된다.

set priority_paging = 1

priority paging을 사용하면, scan rate가 좀 더 높아진다. 그러나 페이지를 프리할 때, 화일 시스템의 케쉬를 먼저 프리하기 때문에 프로그램의 데이타나 코드가 보호되어 시스템 성능이 향상된다.

Solaris 8에서는 새로운 캐쉬 메카니즘을 사용한다. 또한 priority paging을 지정하면 안 된다. Solaris 8에서는 케쉬로 사용되고 있는 물리적 메모리를 free memory에 포함시킨다.

2.3   시스템 메모리 사용량 확인

시스템이 사용하고 있는 메모리를 확인할 수 있는 시스템 명령어로는 다음과 같은 명령어들이 있다.

# swap -s total: 482240k bytes allocated + 47560k reserved = 529800k used, 674056k available # vmstat 1 2 procs memory page disk faults cpu r b w swap free re mf pi po fr de sr aa dd f0 s1 in sy cs us sy id 0 0 6 1464 4184 0 4 2 0 3 0 1 0 0 0 0 211 715 191 5 1 94 0 0 18 673968 16072 0 2 0 0 0 0 0 0 0 0 0 204 514 199 0 0 100 # sar -r 1 1 SunOS king 5.6 Generic_105181-25 sun4u 12/22/01 09:56:19 freemem freeswap 09:56:20 1922 1308132

사용 가능한 가상 메모리는 각각의 명령어의 결과에서 확인할 수 있다.


	 swap -s     vmstat    sar -r
	------------------------------------------------
	 674056KB   673968KB  1308132 Block(=654066 KB)

사용 가능한 물리적 메모리는 vmstat의 free(단위 KB)와 sar -r의 freemem(단위 Page)에서 확인할 수 있다.

free = freemem * pagesize in Kilobye (UltraSparc의 pagesize는 8KB이다) free = freemem * 8

Parm에 포함된 perfmon과 ParmView의 SWAP(단위 MB)과 FREE(단위 MB)에서도 확인할 수 있다.

2.4   프로세스 메모리 사용량 확인

프로세스가 사용하는 메모리 양은 다음과 같은 시스템 명령어로 확인할 수 있다.

# /usr/bin/ps -eafl
 F S      UID   PID  PPID  C PRI NI     ADDR     SZ    WCHAN    STIME TTY      TIME CMD
 8 S    guest 19345 19325  0  51 20 623ab780   1176 616138ae   Dec 14 ?        5:11 dtwm
 8 S    guest 10699 19347  0  61 20 62ee1678    218 62ee16e8 14:29:07 pts/11   0:00 /bin/ksh
 ... skip ...

# /usr/ucb/ps -aux
USER       PID %CPU %MEM   SZ  RSS TT       S    START  TIME COMMAND
guest    19345  0.5  1.6 9408 7968 ?        S   Dec 14  5:10 dtwm
guest    10699  0.0  0.3 1744 1368 pts/11   R 14:29:07  0:00 /bin/ksh
 ... skip ...  

프로세스가 사용하고 있는 메모리 양는 /usr/bin/ps의 SZ(단위 Page)와 /usr/ucb/ps의 SZ(단위 KB)이다. 그리고 /usr/ucb/ps의 RSS는 프로세스의 메모리(SZ) 중에서 물리적 메모리에 로드된 메모리 양이다. 또한 Parm에 포함된 psinfo 명령어에서도 확인할 수 있다.

psinfo 명령어에는 HP+STK라는 항목이 있는데, 이것은 프로세스의 heap과 stack를 더한 양이다. heap과 stack은 프로세스가 실행되면서 다이나믹하게 할당 받는 공간이며, 다른 프로세스들과 공유되지 않는 공간이다.
프로세스가 실행되면서 다이나믹하게 메모리를 할당 받으면, 그것은 heap 영역에 잡힌다. 메모리 관리를 잘 못 하는 프로세스가 있는지 여부를 판단하기 위해서는 heap 영역의 크기가 얼마인지를 먼저 확인하여야 한다. 그 프로세스가 동작하는 역할에 비하여 너무 많은 heap 영역을 사용하면 메모리 관리에 오류가 있을 가능성이 높다.
Parm의 psinfo 명령어에서 -h 옵션을 사용하면, HP+STK가 큰 순서로 정렬하여 보여준다. 또한 psinfo 명령어의 header에는 전체 프로세스가 사용하는 HP+STK를 합계한 정보도 보여준다.

# /opt/JSparm/bin/psinfo -h
Date.time 1207.17:34:23 proc 518 zomb 339 run 0 lwp 422 cpu 10.06% load1m 0.11 ptime 128742.41 hp+stk 250.1M
  PID  PPID USERNAME   SIZE    RSS HP+STK S NLWP   WCPU%   CPU%  MEM%  ELAPSED        TIME CMDLINE
11455 10585 guest    70.35M 60.51M 48.71M S    1   2.34%  2.34% 12.2%  1d10496    16:06.70 netscape
29795     1 guest    92.63M 76.16M 34.40M S   17   4.06%  4.06% 15.4%  3d25550 02:46:58.48 senddata -p 1200
29135 29110 guest    34.92M 16.95M 27.82M S    1   0.27%  0.27%  3.4%  3d30359    02:14.12 recvdata -p 1201
  323   322 nobody   46.03M 7.164M 27.07M S   71   0.00%  0.00%  1.4%  24d3926       34.04 checkdata
29320 29319 guest    38.35M 24.10M 26.02M S   12   0.00%  0.00%  4.9%  3d29489    03:28.75 /usr/dt/bin/dtmail
17664   395 root     56.68M 41.97M 16.44M S    1   2.06%  2.06%  8.5%  8d84118    23:52.56 savelog -f sv.conf
 ... skip ...  

SIZE와 RSS와 HP+STK 크기 관계는 다음과 같다.

SIZE >= RSS
SIZE > HP+STK

RSS와 HP+STK와의 크기에 대한 상관관계는 없다. 

프로세스의 메모리 상태를 좀 더 자세히 보고 싶으면, pmap 명령어를 사용할 수 있다.

# /usr/proc/bin/pmap -x 10699
10699:  /bin/ksh
Address   Kbytes Resident Shared Private Permissions       Mapped File
00010000     184     184     184       - read/exec         ksh
0004C000       8       8       -       8 read/write/exec   ksh
0004E000      56      56       -      56 read/write/exec    [ heap ]
EF580000     592     584     584       - read/exec         libc.so.1
EF622000      32      32       -      32 read/write/exec   libc.so.1
EF62A000       8       8       -       8 read/write/exec    [ anon ]
EF650000      64      64      64       - read/exec         ko.so.1
EF66E000       8       8       -       8 read/write/exec   ko.so.1
EF680000     456     424     368      56 read/exec         libnsl.so.1
EF700000      40      40       8      32 read/write/exec   libnsl.so.1
EF70A000      16       8       -       8 read/write/exec    [ anon ]
EF720000       8       8       8       - read/exec         methods_ko.so.1
EF730000       8       8       -       8 read/write/exec   methods_ko.so.1
EF740000      16      16      16       - read/exec         libc_psr.so.1
EF750000      16      16      16       - read/exec         libmp.so.2
EF762000       8       8       -       8 read/write/exec   libmp.so.2
EF780000       8       8       -       8 read/write/exec    [ anon ]
EF790000      32      32      32       - read/exec         libsocket.so.1
EF7A6000       8       8       -       8 read/write/exec   libsocket.so.1
EF7A8000       8       -       -       - read/write/exec    [ anon ]
EF7B0000       8       8       8       - read/exec         libdl.so.1
EF7C0000     128     128     128       - read/exec         ld.so.1
EF7EE000      16      16       -      16 read/write/exec   ld.so.1
EFFFC000      16      16       -      16 read/write         [ stack ]
--------  ------  ------  ------  ------
total Kb    1744    1688    1416     272 

2.5   Q & A

  2.5.1   특별히 메모리를 많이 사용하는 것이 없는데 메모리 양이 매우 적게 보입니다.

위에서 언급한 바와 같이 Solaris 운영체제는 물리적 메모리의 여유 공간을 화일 시스템의 캐쉬로 사용한다. 애플리케이션 프로그램이 화일을 읽고 쓸 경우, 커널 메모리를 거쳐서 I/O가 발생한다. 이때 화일을 읽거나 쓴 후에, 커널 메모리에 남아 있는 화일의 내용을 바로 지우는 것이 아니고, 캐쉬 용도로 사용하기 위하여 메모리에 남겨둔다. I/O가 많이 발생하면 화일 시스템의 캐쉬가 시스템의 메모리를 다 사용하게 될 것이다. 이것을 관리하기 위하여 커널은 물리적 메모리 양이 lotsfree(전체 물리적 메모리 양의 1/64(1.5%)) 이하로 줄어들 경우에 시스템에 있는 메모리를 조사하여 최근에 사용하지 않은 페이지를 찾아, 프리시켜서 lotsfree 양 만큼의 메모리를 유지한다.

그래서 일반적으로 시스템의 물리적 메모리의 양은 적게 보인다. 이것으로 시스템의 메모리가 부족하다고 판단할 수 없다. 일반적으로 시스템의 메모리가 부족하다고 판단할 수 있는 근거는 scan rate의 값으로 판단한다. 30초 간격으로 조사하여 약 200 - 300 이상이면 그 순간에 메모리 로드가 있다고 판단한다.

priority_paging을 사용하면 메모리 양이 cachefree(전체 물리적 메모리 양의 1/32(3%)) 보다 적게되면, 시스템이 있는 메모리를 조사하여 최근에 사용하지 않은 페이지를 찾아, 프리시켜서 cachefree 양 만큼의 메모리를 유지한다. 메모리가 lotsfree 양보다 클 경우에는 화일 시스템의 캐쉬로 사용되는 메모리만 프리시킨다. priority_paging가 사용되면, scan rate 값이 좀 더 크게 측정될 수 있다.

(Solaris 8에서는 화일 시스템의 캐쉬로 사용되는 메모리을 물리적 메모리 사용량으로 포함시키지 않는다.)

  2.5.2   어떤 프로세스가 메모리를 비정상적으로 많이 사용하는지 알 수 있읍니까?

애플리케이션 프로그램을 작성하면 프로그램이 사용하는 코드나 초기 데이타의 크기는 고정된다. 그리고 프로그램이 실행되어 프로세스로서 동작하게 되면 다이나믹하게 메모리를 할당 받을 수 있는데, 일반적으로 비정상적으로 메모리를 사용하는 프로세스는 다이나믹하게 메모리를 할당 받고, 그것을 제대로 관리하지 않아서 발생한다. 이렇게 할당 받은 데이타는 프로세스의 힙(heap) 영역에 포함된다. 따라서 힙(heap)이 큰 프로세스가 있다면, 그 프로세스가 그 만큼의 힙(heap)을 사용할 프로세스인지 아니지를 판단하여야 한다. 만일 비정상적으로 힙(heap)을 사용한다고 판단이 되면, 그 프로그램의 개발자에서 알려서 프로그램을 수정하여야 할 것이다.
프로세스가 얼마나 많은 힙(heap)을 사용하는가를 확인하려면, Parm에 포함된 psinfo 명령어로 확인할 수 있다. psinfo에 -h 옵션을 사용하면 힙(heap)을 많이 사용하는 순서로 화면에 보여준다.

# /opt/JSparm/bin/psinfo -h
Date.time 0123.12:27:07 proc 518 zomb 339 run 0 lwp 422 cpu 15.26% load1m 0.20 ptime 128706.45 hp+stk 249.9M
  PID  PPID USERNAME   SIZE    RSS HP+STK S NLWP   WCPU%   CPU%  MEM%  ELAPSED        TIME CMDLINE
19440 19438 guest    131.0M 84.38M 107.4M R    1   4.90%  4.90% 17.0%  8d73139 03:00:59.86 netscape
13217 13216 nobody   44.42M 10.82M 26.12M S   59   0.00%  0.00%  2.2%   1d7702       16.18 ns-httpd -d config
  200     1 root     6.070M 1.555M 2.875M S   10   0.00%  0.00%  0.3% 58d11424       16.60 /usr/sbin/syslogd
  283     1 oracle   63.89M 41.88M 2.547M S    1   0.00%  0.00%  8.5% 58d11409       09.85 ora_pmon_SOL
19345 19325 guest    9.258M 6.805M 2.141M S    7   0.68%  0.68%  1.4%  8d73245    05:59.89 dtwm
19904 19903 guest    7.172M 4.438M 1.594M S    1   0.00%  0.00%  0.9%  8d66806       09.37 dtpad -server
19339     1 guest    4.383M 3.250M 1.266M S    4   0.00%  0.00%  0.7%  8d73246       26.76 senddata -p 1200
  285     1 oracle   63.02M 44.93M 1.258M S   22   0.00%  0.00%  9.1% 58d11409       02.33 ora_dbw0_SOL
  287     1 oracle   62.78M 45.05M 1.203M S   14   0.00%  0.00%  9.1% 58d11409       02.66 ora_lgwr_SOL
  289     1 oracle   62.72M 44.91M 1.172M S   11   0.00%  0.00%  9.1% 58d11409       02.42 ora_ckpt_SOL
  ... skip ...  

HP+STK는 프로세스의 힙(heap)과 스택(stack)을 합계한 크기이다. 만일 프로세스의 메모리 크기 순서(SIZE)로 정열할 경우에 oracle과 같이 큰 공유메모리를 사용하는 프로세스가 있다면, 그 프로세스들이 상위를 차지할 것이다. 전체 크기(SIZE)로 보아서는 그 프로세스가 얼마나 많이 다이나믹한 메모리를 할당 받았는지 알 수 없다.
프로세스 메모리 맵에 대한 자세한 정보는 /usr/proc/bin/pmap 명령어를 사용하여 확인할 수 있다.

  2.5.3   vmstat의 w값이 30으로 계속해서 보입니다.

vmstat의 w가 의미하는 것은 swap out된 쓰레드(thread) 갯수를 나타내며, 멀티 쓰레드 프로세스가 아닌 경우에는 하나의 프로세스는 하나의 쓰레드를 가진다.
한번 swap out된 프로세스는 그 프로세스가 다시 실행될 때 메모리로 들어온다. 예를 들어, 프린터 데몬 lpsched가 swap out되었다면, 프린터를 사용하는 작업을 하지 않은 한 메모리로 들어오지 않는다.
vmstat의 w값에 0이 아닌 값이 나타날 무렵에 시스템의 메모리 로드가 극심했다는 것을 알 수 있다.

이렇게 메모리 로드를 극심하게 야기시킬 수 있는 경우는 다음과 경우가 있을 수 있다.

1. 프로세스를 동시에 많이 실행하여 메모리 요청이 집중되었을 경우
2. 화일 시스템 backup과 같이 광범위하게 많은 양의 화일을 동시에 액세스할 경우
3. 프로세스가 큰 메모리를 요구하여 짧은 시간에 초기화 할 경우

  2.5.4   df -k 에서 swap의 크기가 변합니다

# df -k /tmp Filesystem kbytes used avail capacity Mounted on swap 845712 196248 649464 24% /tmp # ... skip .... # df -k /tmp Filesystem kbytes used avail capacity Mounted on swap 706336 196248 510088 28% /tmp

실제로 df -k 명령어에서 보여주려고 하는 값은 swap의 값이 아니라 /tmp의 값을 보여주려고 한다. / 화일 시스템의 저장공간은 하드 디스크의 특정 파티션(예, /dev/dsk/c0t0d0s0)이고 이 크기는 화일 시스템을 다시 만들기 전까지는 불변이다. 그러나 /tmp 화일 시스템의 저장공간은 하드 디스크의 특정 파티션이 아니고 가상 메모리를 저장공간으로 사용한다. / 화일 시스템은 ufs 라는 화일 시스템을 사용하는 반면에, /tmp 화일 시스템은 tmpfs 라는 특수한 화일 시스템을 사용한다. 이것은 화일 시스템의 저장공간으로 가상 메모리(VM: swap)를 사용한다. 그래서 프로세스들이 메모리를 많이 사용하면 가상 메모리 공간이 줄어든다. 그 결과 /tmp 디렉토리에 화일들이 더 이상 만들어 지지 않았음에도 불구하고 swap 공간이 줄어서 /tmp 디렉토리가 100%로 될 수 있다.

  2.5.5   vmstat 명령어의 결과에서 프리 메모리량에 대하여 그래프를 만들 수 있읍니까?

Parm에는 vmstat, iostat, mpstat, netstat, sar의 결과물에서 주요 필드에 대하여 그래프를 만들 수 있는 명령어들(gvmstat, giostat, gmpstat, gnetstat, gsar)이 있다. 뿐만 아니라, 행과 열로 된 데이타에 대하여 그래프를 만들 수 있는 명령어(mkgraph)가 있다.
vmstat 명령어의 결과를 수집한 화일이 vmstat.log가 있고(09시 정각에 30초 간격으로 수집했다고 가정), 이 화일에 대하여 다음과 같이 free 메모리 그래프를 만들 수 있다.

# gvmstat -t 09:00:00 -i 30 -G free -o output vmstat.log

위의 명령어는 output.gif 화일을 만든다. 다음은 output.gif의 내용이다.

  2.5.6   swap -s 에서 실제로 할당된 메모리의 크기를 모니터하여 그래프를 그려볼 수 있읍니까?

# swap -s total: 664720k bytes allocated + 53320k reserved = 718040k used, 485160k available

swap -s 명령어를 실행하여 allocated 된 부분과 reserved 된 부분과 이 두개를 합계한 used 된 부분에 대하여 다음과 같이 그래프를 만들 수 있다.

# dolog -o swap-s -t -T 30,480 swap -s # ls -l swap-s.021105.091020.30 # mkgraph -G 2::allocated,6::reserved,9::used -A -i 30 -t 091020 -o swap swap-s.021105.091020.30 # ls -l swap-s.021105.091020.30 swap.gif

dolog 명령어는 Parm V6.1에 포함된 명령어이다. 이것은 지정한 명령어를 일정 시간간격으로 실행하여 그 결과을 화일에 저장한다. 이렇게 저장된 결과에 대하여 mkgraph 명령어로 그래프를 그린다.
다음은 swap.gif 화일의 내용이다.

반응형

'OS > SOLARIS' 카테고리의 다른 글

[펌] 솔라리스 백업 정책  (0) 2005.07.14
[펌] 백업과 복구  (0) 2005.07.12
[펌] Fast Ethernet Duplex 설정  (0) 2005.07.12
[펌] /etc 파일 설명  (0) 2005.07.12
[펌] [Solaris] 솔라리스 환경설정  (0) 2005.07.12
Posted by [PineTree]