* SUN의 부팅과정
SUN은 - PROM(programmable read-only memory) :chip
Monitor - program
로 구성되어, 부팅을 하게 됩니다.
시스템전원이 on 되면 Monitor라는 제어프로그램이 실행되어 시스템상의
하드웨어및 메모리를 체크하는 Quick-self test Procedure가 진행됩니다.
이과정에서 오류가 발생되지 않는다면 system에 설정된 automatic boot
process를 시작하게 됩니다. ( Prom은 일반 PC의 CMOS 정도로 보시면 비슷
할것 같네요)
Monitor 에 대해서는 다음번에 세부적으로 살펴보겠습니다. 일단 이정도에서...
부팅과정을 세부적으로 보면
① Prom run - self-test,diagnostics
② Prom load - /usr/platform/'uname -m'/lib/fs/ufs/bootblk
- /usr/platform 에 가보시면 'uname -m'을 통해나온
machine hardware name 에 해당 디렉토리가 있습니다.
③ bootblk program load - /platform/'uname -m'/ufsboot
④ kernel load
⑤ kernel 초기화 및 self-test, root파일 시스템을 마운트 하기위해 필요한
모듈을 load
⑥ kernel start, init process 실행
- /sbin/init 실행, /etc/inittab을 read
⑦ init process가 run control (RC) script를 실행
- /sbin/rc* 를 실행, file system mount , 기타 다른 process를 start
위와 같이 진행되며 정상적으로 실행되었을때
사용자가 사용할수 있는 상태인 'login : ’프롬프트가 나타나게
됩니다.
좀 복잡하죠?
또한, Unix 기종들은 사용자가 작업하는 성격에따라 알맞는 수준(Level)에서
사용할수 있도록 Run Level을 제공합니다.(부팅할때 결정)
예를 들어 시스템프로그램을 인스톨하고 주변장치에 대해 작업하고 있는
데 여러사용자가 시스템에 접속하여 해당부분을 엑세스 한다면 문제가 되겠지요..
그래서 부팅할때 시스템이 운영되어야할 상태를 설정할수 있습니다.
이런것을 Run Level 이라고 합니다.
Run level을 결정하고 이에 알맞는 스크립트를 구성하는 것은
일반 PC에서 config.sys나 Autoexec.bat을 구성하는 것과 같다고
생각하시면 됩니다.
* Run Level ( = init state )
- 사용자가 사용할수 있는 service와 resource를 정의
- 시스템 가동시 한개의 Level만 적용할수 있다.
- 솔라리스는 8개의 run level를 운영할수 있다.
- /etc/inittab화일에 해당 level에 대한 내용을 기술
1) run level 의 확인
===========================================================
$ who -r
. run-level 3 1월 2 13:53 3 0 S
- run-level 3 : 현재 run level 상태
- 1월 2 13:53 : 마지막으로 바뀐 날짜
- S : 전에 사용된 run level
===========================================================
2) /etc/inittab file
- run level 을 변경하기 위해서는 system을 다신 boot(init or
shutdown)해야한다.
- boot시 실행되는 init프로세서는 /etc/inittab화일에 저장된 정보를
읽어 실행되게된다.
- /etc/inittab화일에는 다음과 같은 정보를 정의해야 한다.
① system default run-level
② 시스템이 중단될경우 실행해야할 프로그램들
③ 새로운 run-level적용시 실행되어야 할 내용들
============================================================================
예) /etc/Inittab File
1 ap::sysinit:/sbin/autopush -f /etc/iu.ap
2 fs::sysinit:/sbin/rcS >/dev/console 2>&1 3 is:3:initdefault:
4 p3:s1234:powerfail:/usr/sbin/shutdown -y -i5 -g0 >/dev/console 2>&1
5 s0:0:wait:/sbin/rc0 >/dev/console 2>&1 6 s1:1:wait:/usr/sbin/shutdown -y -iS -g0 >/dev/console 2>&1 7 s2:23:wait:/sbin/rc2 >/dev/console 2>&1 8 s3:3:wait:/sbin/rc3 >/dev/console 2>&1 9 s5:5:wait:/sbin/rc5 >/dev/console 2>&1 10 s6:6:wait:/sbin/rc6 >/dev/console 2>&1 11 fw:0:wait:/sbin/uadmin 2 0 >/dev/console 2>&1 12 of:5:wait:/sbin/uadmin 2 6 >/dev/console 2>&1 13 rb:6:wait:/sbin/uadmin 2 1 >/dev/console 2>&1 14 sc:234:respawn:/usr/lib/saf/sac -t 300
15 co:234:respawn:/usr/lib/saf/ttymon -g -h -p "`uname -n`
console login: "-T sun -d /dev/console -l console -m ldterm,ttcompat
===========================================================================
1. STREAMS module initialization
2. File system Check
3. Default run-level
4. Run level 0
5. Run level 1
6. Run level 2
7. Run level 3
8. Run level 4
9. Run level 5
10. Run level 6
11. Firmware
12. OFF
13. Reboot single-user ( RB 이면 Reboot )
14. Service access controller initialization
15. Console initialization
이정도면 해당레벨에 따라 어떤짓을 하는지는 대강 아시겠죠..??
그러면 좀더 세분화 해서 Run Level과 해당 레벨을 수행할때 실행되는
스크립트들의 구성에 대해 살펴보겠습니다.
* Run level 종류
Run level init state Type Use This Level
------------------------------------------------------------------------
0 Power-down Power-down
1 Administrative state single-user
2 Multiuser state multiuser NFS,syslog 제외
3 Multiuser with NFS
resources shared multiuser
4 Alternative multiuser state
5 Power-down state power-down
6 Reboot state Reboot
s or S Single user state Single user
-------------------------------------------------------------------------
Run level이 결정되면 시스템을 정해진 환경으로 Setting하여야 하는데
이작업은 Run Control Script(RC)에 기술해 놓게 됩니다.
이름만 RC일뿐이지 일반 쉘 프로그램이 부팅될때 실행된다고 생각하시면
됩니다.
그럼 각각의 RC가 어떻게 구성이 되는지 살펴보면,
* Run Control Script (Rc)
. rc 스크립트들은 /sbin 밑에 위치하며 /etc/rc* 에 링크되어 있습니다.
. /etc/rc[n].d 에는 각 run level수준에서 수행되는 파일들을 포함하고
있습니다.
========================================================================
예> /etc/rc2.d
enterprise:/etc/rc2.d>ls
K20lp* S47asppp* S74autofs* S89bdconfig@
K60nfs.server* S69inet* S74syslog* S91leoconfig*
README S70uucp* S75cron* S92rtvc-config*
S01MOUNTFSYS* S71rpc* S76nscd* S92volmgt*
S05RMTMPFILES* S71sysid.sys* S80PRESERVE* S93cacheos.finish*
S20sysetup* S72autoinstall* S80lp* S98upsd*
S21perf* S72inetsvc* S88sendmail* S99audit*
S30sysid.net* S73nfs.client* S88utmpd*
=========================================================================
- k로 시작하는 파일들은 각 시스템 프로세스들을 중단(kill)하는 script
- S로 시작하는 파일들은 각 시스템 프로세스들을 시작하는 script
- /etc/init.d 안의 스크립트 파일들과 같이 링크되어 있다.
- 각각의 /etc/rc[n].d 파일들 안에 있는 README에 추가적인 정보들이 들어 있다.
- 참고로 rc3.d 안의 파일들은 rc2.d와 대부분이 중복되어 있기 때문에 구분되는
파일들만 있습니다.
- RC를 추가하는 방법
. cp sample /etc/init.d
. cd /etc/init.d
. ln sample /etc/rc2.d/S100sample
. ln sample /etc/rc2.d/K100sample
부팅할때 화면에 나타나는 내용은 바로 RC문에 실행되면서 표시되는
내용들입니다.
각 RUN level 에 해당하는 RC들을 정리해보면...
====================================================================
ⓛ /sbin/rc0 Script
- service 와 데몬프로그램을 중단
- 실행중인 모든 프로세스를 중단
- 모든 파일시스템을 Unmount시킴
② /sbin/rc1 Script
- /etc/rc1.d 스크립트들을 수행
- 서비스와 데몬들을 중단
- 실행중인 모든 프로세스들을 중단
- 모든 파일시스템을 Unmount한다.
- Single-user mode상태로 ..
③ /sbin/rc2 Script
- /etc/rc2.d 스크립트들을 수행
- 모든 local 파일시스템들을 mount
- quota 적용
- /usr/preserve안의 에디터 임시화일들에 대한 Save
- device관련된 entries들에 대해 재구축
- system Accounting 구성
- Default Router 구성
- NIS Domain 및 Ifconfig netmask 구성
- NIS Daemon(ypbind),NIS+ Daemon(rpc.nisd) start
- keyserv,statd,lockd,upmpd start
- NFS mount
- ncsd(name services cache daemon) start
- automount,cron,LP,sendmail,upmpd,vold daemon start
④ /sbin/rc3 Script
- /etc/rc3.d 스크립트들을 수행
- Cleans up sharetab
- nfsds start
- mountd start
- rarpd,rpc.bootpraramd,rpld start
⑤ /sbin/rc5 Script
- /etc/rc0.d 스크립트들을 수행
- printer,syslog 데몬 중단
- 로컬 및 remote file system unmount
- NFS server 및 client service 중단
- NIS,RPC,cron services 중단
- 운영중인 모든 process 중단.
⑥ /sbin/rc6 Script
- /etc/rc0.d/K* 스크립트 수행
- 운영중인 모든 프로세스 중단
- File System 중단
- /etc/inittab 파일에 정의된 initdefault entries 를 수행
⑦ /sbin/rcS Script
- /etc/rcS.d 스크립트들을 수행
- 최소한의 네트웍연결상태 유지
- 필요에 의해 /usr mount
- system name set
- root (/),/usr file system check
- /proc,/dev/fd 같은종류의 파일시스템 Mount
- 변경된 정보를 가지고 부팅하기 위해 device entries를 재구성
- 기타 파일시스템 check
====================================================================
와 같이 구성되어 있습니다.
일반적인 업무용 시스템들은 rc3에서 운영되고 있을것입니다. 해당 RC
스크립트들을 자세히 보시면 시스템에서 서비스 되는 데몬 프로세스들을
어떻게 실행하고 중단시킬수 있는지 쉘 스크립트 상에 잘 나와 있습니다.