1992.11.27

SUBJECT: SunOS 4.x의 Boot Procedure 小考

MEANING OF THIS MEMO:
unOS 4.x의 Boot Procedure에 대해 간단히 살펴보았다.

CONTENTS:
1. Boot Procedure에 대한 도해적 이해
2. /etc/rc.boot에서 mount의 의미

DESCRIPTION:
1. Boot Procedure에 대한 도해적 이해

   * System Initialization

     Kernel
     ┌─┐   Init
     │  │  ┌─┐
     │  │→│  │→┌────┐
     │  │  │  │  │rc.boot │
     │  │  │  │←└────┘
     │  │  │  │→┌────┐→┌────┐
     │  │  │  │  │   rc   │  │rc.local│
     │  │  │  │←└────┘←└────┘
     │  │  └─┘
     └─┘

     ┌────┐   ┌────┐    ┌───────┐    ┌────┐
     │ monitor│→ │ Kernel │ → │ /usr/etc/init│ → │/etc/rc │
     └────┘   └────┘    └───────┘    └────┘
                                          ↓  ↑             ↓  ↑
                                       ┌────┐       ┌────┐
                                       │rc.boot │       │rc.local│
                                       └────┘       └────┘

   * /usr/etc/init의 수행
     - "init"는 /etc/rc.boot를 먼저 수행하면서 machine name을 set하고,
       ifconfig와 hostconfig program은 kernel에 hostname, IP address, NIS domain name,
       default router를 setting한다.  그리고 나서 file system을 check한다.
     - fsck가 성공적으로 끝나면 "init"는 /etc/rc 를 실행한다.
       /etc/rc는 system이 single-user mode인 경우,
       single-user shell이 종료되고 나서야 실행된다.
       rc는 4.2 filesystem을 mount하고 /etc/rc.local의 수행을 위해 shell을 spawn한다.
     - rc에 의해 실행되는 /etc/rc.local은 NFS filesystem을 mount하고 
       sysIDtool(4.1.1. Rev B 이후)로 system configuration 정보를
       local configuration file에 setting하며 local daemon을 구동시킨다.

2. /etc/rc.boot에서 mount의 의미
   * /etc/rc.boot의 첫 주석을 번역해 본다.
   * 여기(rc.boot)에서 root filesystem을 fsck한다는 것은 
     system crash 후 발생할 수 있는 여러 종류의 panic을 방지하는데 
     매우 중요한 역할을 한다.
   * SunOS 4.x에서 'block device'는 'read-write mount된 file system'과
     동일한 의미가 아니다.
     ┌─────────────────────────────┐
     │  "block device"  !=  "read-write mount된 file system"    │ 
     └─────────────────────────────┘
   * system rebooting 동안 'root(= 4.2 UFS) file system'은 신뢰할 수 있는 
     fsck를 수행하기 위해 default로 read-only mount 된다.
     즉 read-only mount함으로써 fsck 수행시 발견하는 corrupt,
     그러나 disk에 write되어서는 안되는 것이 disk 즉 file system에 write되는 것을 방지한다.
   * 'fsck'는 file system이 어떤 손상을 입었는지를 check하기 위해 'raw device'를 사용한다.
     이처럼 'read-only mount된 file system' = 'raw device'을 fsck하는 방식은
     kernel이 '혹시 있을 수도 있는 core file system control 정보의 corrupt'를
     file system에 overwrite하지 않고서, file system damage를 recovery하도록 해준다. 
     ┌────────────────────────────┐
     │  "raw device"  =  "read-only mount된 file system"      │ (?)
     └────────────────────────────┘
   * file system은 disk check가 제대로 수행되고 나서
     /etc/rc.single의 'remount'가 수행될 때까지 read-only mount된 채 남아 있다.
   * 이처럼 fsck가 현재 mount된 file system의 corrupt 부분을 찾아 repair하는 경우는
     system이 바로 reboot되어야 한다. "
 


Revision History
Created       on Nov. 27 ,1992