본문 바로가기

개발/unix

Solaris 정리 1 - [ Solaris 부팅 순서 ]

Solaris 부팅 순서
1. PROM이 POST를 실행
2. boot device 결정
3. 부트프로그램인 bootblk를 load
4. bootblk는 2번째 부트프로그램인 ufsboot를 load
5. ufsboot는 kernel을 load (32bit or 64bit)
6. kernel은 자신을 초기화하고 module을 load
7. configuration 파일인 /etc/system을 읽음
8. kernel이 /sbin/init을 실행

boot PROM 단계 : 1,2,3
boot program 단계 : 4,5
kernel 초기화 단계 : 6,7
init 단계 : 8

5) ufsboot -> 32bit or 64bit kernel을 load한다.
32bit kernel directory : /platform/`uname-m`/kernel
64bit kernel directory : /platform/`uname-m`/kernel/sparcv9

- 시스템이 32/64bit kernel로 운영중인지 확인 방법
# isainfo -kv

- solaris7에서 64bit kernel로 지정
# vi /platform/sun4u/boot.conf
ALLOW_64BIT_KERNEL_ON_UltraSPARC_1_CPU=true
# reboot

- 32bit->64bit
ok> setenv boot-file kernel/sparcv9/unix

- 64bit->32bit
ok> setenv boot-file kernel/unix
or
# eeprom boot-file=kernel/unix
# reboot

- null값에 의해 자동으로 32,64bit로
# eeprom boot-file=
# reboot

6) /kernel 디렉토리
기본값으로 load하는 kernel module은 /kernel, /usr/kernel, /platform/`uname -m`/kernel   or /platform/`uname -i`/kernel에서 찾는다.

- /kernel내의 모듈 유형
drv : device driver와 pseudo device driver
exec : 여러 실행 가능한 파일들ㅇ르 이용하는 모듈.
fs : ufs, nfs, proc 등의 파일 시스템 모듈.
misc : 가상기억연산과 프로세스간의 통신을 위해 필요한 여러 모듈.
sched : scheduling classes와 상응한 dispatch tables 모듈.
strmod : STREAMS 모듈.
sys : 로드 할 수 있는 시스템 호출.

/usr/kernel 디렉토리
kernel 모듈을 저장하고 있는 디렉토리
/kernel을 먼저 읽은 후 /usr/kernel을 찾는다.

7) /etc/system
부팅할 때 커널에 의해 로드되는 모듈들과 파미터를 정의하는 파일.
/etc/system 파일 내부에서 사용되는 변수
- moddir : 커널 모듈의 경로를 변경하여 지정하고자 할 경우 커널 모듈의 변경경로지정.
- root device and root filesystem configuration
  root devicedhk root 파일 시스템 정의
- exclude : 배제하는 모듈명 지정.
- forceload : 부팅시 무조건 메모리로 올릴 모듈명 지정.
- set : 시스템의 파라미터를 변경할 때 사용.

8) 커널이 /sbin/init 실행
커널이 /sbin/init 실행 ->
/sbin/init은 /etc/inittab 파일에 등록된 정보를 참고로 하여 rc script or 실행 가능한 다른 스크립트들을 차례로 실행. ->
init 수행 후 login 프롬프트 보여줌.

- /etc/inittab 파일
시스템 부팅시 init이나 shutdown 명령어에 의해 run level을 변경하고자 할 때 init 데몬은   /etc/inittab 파일로부터 정보를 얻어 프로세스 실행.

- /sbin/init(/etc/init와 링크) 프로세스의 /etc/inittab 파일 참조 부팅 순서
init process는 inittab 파일 load.
init process는 default run level3으로 정의된 initdefault entry load.
init process는 /sbin/autopush와 같은 action entry에서 sysinit을 가진 entry의 명령이나   스크립트 수행.
init process는 rstate entry에서 3을 가진 entry에 대한 스크립트들(/sbin/rc2, /sbin/rc3,    /usr/lib/saf/sac, /usr/lib/saf/ttymon 등)을 수행. sac와 ttymon은 console과 tty device의   로그인 서비스 제공.


- /etc/inittab 파일의 4개 필드
  id : rstate : action : process
  id : 최대 4자 가능. entry정의.
rstate : entry가 수행 될 run level 지정.
        공란 지정시 run level에 관계없이 언제나 수행.
action : initdefault : 기본 run level 정의 (default 3)
        respawn : 프로세스가 종료되면 다시 시작하여 해당프로세스가 존재하지 않을시                       에 inittab파일을 load해서 process 시작.
        wait : 자신에 의해 수행될 명령이 종료될때까지 그 다음 entry를 수행하지 말고                   대기하도록 함.
        sysinit : 콘솔에 접근하려고 시도하기전에 process 실행.
                 run level에 상관없이 실행.
        respawn : 항상 process 실행.
        powerfail : init이 power fail signal을 받을때만 실행.
process : 실제로 수행 될 응용프로그램 or shell 스크립트 정의.

init0 = halt
init5 = poweroff
init6 = reboot

- run control 스크립트
process를 start하고 stop 시키는 run level과 밀접한 관계가 있는 rc 제공.
/sbin 디렉토리에 존재. rc0,rc5,rc6은 하드링크 되어 있음.
/etc 디렉토리의 rc script와 심볼릭 링크.

/etc/rc#는 /etc/rc#.d 아래에 해당하는 파일 존재.

/etc/init.d는 start or kill 시키는 실질적인 run control 파일 존재.
/etc/rc#.d 디렉토리와 하드링크 되어 있음.

스크립트 실행 순서
# init 2 -> /etc/inittab -> /sbin/rc2 -> /etc/rc2.d/S* or K*
                                        /etc/init.d와 하드링크

- run control 파일 추가하기
# more /etc/init.d/sample
  echo hello solaris
# cd /etc/rc3.d
# ln /etc/init.d/sample S22sample
# /sbin/rc3