RSS구독하기:SUBSCRIBE TO RSS FEED
즐겨찾기추가:ADD FAVORITE
글쓰기:POST
관리자:ADMINISTRATOR
'부트로더'에 해당되는 글 1

출처 : 대전국제IT교육센터 정성재 강사

 

1.시스템 부팅의 개요
(1) 리눅스로더(LILO:Linux Loader) : 부팅시에 리눅스 커널이나 다른 운영체제가 구동될 수 있도록
                                    역할을 하는 부트매니저 프로그램을 말한다. 초기에는 LILO를
                                    사용하였으나 최근에는 grub 이라는 프로그램을 많이 사용하고
                                    있다.
(2) 부팅시 커널 매개변수 : 리눅스 커널은 부팅 시에 일종의 명령행을 통해 몇가지 정보를 받아들
                           일 수 있다. 이 개념은 프로그램에 '매개변수=값'과 같은 형식으로
                           인자를 전달하는 것과 흡사하다. 이러한 값들은 커널이 스스로 결정할
                           수 없는 값을 지정하기 위해 사용된다. 또한 커널 매개변수는 기존의
                           값을 덮어쓸 때도 사용된다. 이 두 경우 모두 하드웨어 드라이버에 대한
                           중요한 정보를 커널에게 전달한다.
   예) 다른 루트 파티션으로 부팅할 경우의 예 : LILO프롬프트를 사용
      boot: linux root=/dev/hda9
       => 이 명령은 linux라는 이름으로 커널을 부팅하며 기본값 /dev/hda1 대신 /dev/hda9 파티션을
         루트 파일시스템으로 사용한다.
(3) 커널 모듈 설정에 대한 소개 : 리눅스 커널은 모듈화되어 있으며 필요시에 적절한 모듈(예를 들면
                              사운드 드라이버,랜카드 드라이버 등)이 커널에 적재된다. 모듈은
                              커널과 분리되어 있으며 슈퍼유저는 필요에 따라 커널에 삽입하거나
                              제거할 수 있다. 리로설정파일과 리로 명령행의 매개변수가 커널에
                              영향을 끼치지만 커널 모듈을 제어할 수 없다.
   1) 관련파일 : /etc/modules.conf (다른 배포판에서는 /etc/conf.modules)
              커널 모듈에 매개변수를 전달할 때 사용하는 텍스트 형식의 파일이다. 모듈 설정파일
              에서 찾아볼 수 있는 옵션으로는 입출력주소, 인터럽트, 사운드 장치를 위한 DMA채널
              설정 등이 있다.
   2) 커널 부트 메시지 : 리눅스 커널이 부팅될 때 자세한 진행 상황이 콘솔에 메시지 형태로 나타
                     나고 적재된 모듈들이 상태 정보로 출력된다. 이러한 메시지들은 하드웨어
                     상태와 설정에 대한 중요한 정보를 담고 있으며, 주된 내용은 다음과 같다.
     ㄱ. 커널정보
     ㄴ. 메모리와 CPU정보
     ㄷ. 마우스, 시리얼 포트, 디스크 등의 검색된 하드웨어에 대한 정보
     ㄹ. 파티션 정보와 점검사항
     ㅁ. 네트워크 초기화
     ㅂ. 부트시 적재된 커널 모듈의 결과
   3) 관련명령 : dmesg로 부팅시에 나타나는 메시지를 확인하는 명령이다. 또는 /var/log/dmesg
                라는 파일에서 확인할 수 있다.
   4) 시스템 로그확인 : 커널 메시지 이외의 부트시 또 다른 메시지들은 syslog 데몬에 의해 기록된
                       다. 이러한 메시지는 /var/log/messages 등과 같은 시스템 로그 파일에서 살
                       펴볼 수 있다. 즉 차이점은 dmesg는 네트워크 카드가 초기화될 때의 정보를
                       보여주고 그 장치설정과 상태는 네트워크 서비스가 시작될 때 /var/log/mess
                       ages에 기록된다. 시스템의 부트 상황을 점검하거나 문제를 해결할 때는 이
                       두 가지 정보를 모두 점검해야 한다.

2.리눅스 부팅의 단계
(1)커널의 인식 : 리눅스 시스템 부팅시 커널이 올라오면 커널은 우선 루트파일 시스템(/)을 read-
                 only형태로 마운트하고 검사후 이상이 없으면 read-write로 재마운트한다.
(2)init프로세서의 실행
   1) init프로세서의 실행 : init프로세서는 /etc/inittab라는 설정파일을 읽어서 설정된 내용대로
                           부팅절차를 시작한다.
   2) /etc/rc.d/rc.sysinit 스크립트 실행 : /etc/inittab의 내용에 의하여 먼저 시스템을 초기화하
                                          기 위해서 /etc/rc.d/rc.sysinit스크립트파일을 실행시
                                          킨다. 여기서는 호스트명 설정, 스와핑 설정, 시스템
                                          점검, 커널 모듈 로딩 등을 한다.
   3) /etc/rc.d/rc스크립트 실행 : rc.sysinit에 의해 시스템이 초기화 되었으면 /etc/rc스크립트를
                                 통해서 기본 실행레벨별로 등록된 데몬 프로그램을 실행시킨다.
   4) /etc/rc.d/rc.local : 실행레벨 2,3,5에서의 마지막에 이 스크립트가 실행된다.
   5) login이나 X-window 구동 : 해당 실행레벨별로 텍스트 형태의 login과정이나 X-window가 구동
                               된다.

3.Runlevel
(1) 설명: Runlevel이란 리눅스의 여러가지 부팅단계를 말한다. 보통 윈도우에서도 처음 부팅시
          [F8]키를 누르면 여러가지 부팅의 단계가 나오는 것과 유사하다. 실행레벨에 관계된 설정
          은 /etc/inittab 라는 파일에서 확인할 수 있고, 크게 6개의 실행레벨로 구성되어 있다.
          이러한 실행레벨의 실행은 init프로세스가 담당하며 일반적으로 3이나 5를 사용한다.
(2) 일반적인 실행레벨
   0 : 시스템의 중지에 사용된다. (기본값으로 설정해서는 안된다.)
   1 : 단일사용자모드(Single User Mode) 또는 관리자모드로서 윈도우의 안전모드와 유사한 개념이
      다. login과정을 거치지 않고 네트워크, 웹서버, 파일 공유등과 같은 시스템 서비스는 하지
      않는다. 대개 파일시스템 복구를 위해 사용된다.
   2 : 네트워크 사용하지 않는 다중사용자모드이다. 만약 네트워크 연결이 안되었으면 level 3과 동
      일하다.
   3 : 다중 사용자모드(Multiuser Mode)로서 여러 사용자가 사용할 수 있다. 보통 기본 설정값이다.
   4 : 사용되지 않으나, 사용자가 정의하여 사용할 수 있다.
   5 : X-windows 시스템 실행 모드이다.
   6 : 시스템 재부팅 모드이다. (기본값으로 설정해서는 안된다.)
(3) 단일 사용자 모드
   1) 설명: 실행레벨 1인 모드로 s나 S, emergency 등으로 나타낼 수 있다. 아이디와 패스워드없이
           로그인되는 모드로 로그인한 사용자권한이 단일사용자이므로 root 이다. 보통 이 모드는
           시스템을 관리하기 위해 사용되며 어떠한 서비스도 제공하지 않는다. 단일 사용자 모드를
           사용하는 경우는 시스템이 파일시스템의 문제를 자동으로 해결하지 못하거나 root 패스워
           드를 잃어버렸을 경우 사용한다.
   2) 단일사용자 모드로 들어가기
    ㄱ. 설명: LILO프롬프트에서 linux single이나 linux 1을 입력하면 된다.
    ㄴ. 사용법
     예) boot: linux single
         또는
         boot: linux 1
    ㄷ. 참고
       부트로더로 LILO를 사용하는 경우 레드햇 7.0 이후에서는 사용자의 편의를 위해 그래픽형태
      의 LILO 메뉴를 제공한다. 따라서 단일사용자 모드로 들어가려면 텍스트 형태의 lilo 프롬프
      트가 나타나도록 해야 하는데 이 경우 별도의 키입력이 필요하다. 그래픽 메뉴에서 잘 살펴보
      면 나타난다. 참고로 와우리눅스는 [ESC]이고 레드햇 리눅스는 [CTRL]+[X]이다.
   3) 로그인중에 단일사용자 모드로 변경
    ㄱ. 설명: 로그인한 상태에서 단일사용자로 변경하려면 root 권한상태에서 init 명령을 이용한
             다.
    ㄴ. 사용예
       init 1
(4) 기본 실행레벨 설정 : 부팅시의 기본 실행레벨을 결정하기 위해 init은 /etc/inittab파일에서
                       initdefault라는 부분을 포함한 곳을 찾아 실행한다.
   1) /etc/inittab의 내용
     #Default runlevel. The runlevels used by RHS are:
     #   0-halt(Do NOT set initdefault to this)
     #   1-Single user mode
     #   2-Multiuser, without NFS(The same as 3, if you do not have networking)
     #   3-Full multiuser mode
     #   4-unused
     #   5-X11
     #   6-reboot(Do NOT set initdefault to this)

     id:5:initdefault:
      => 위 예에서 '#'부분은 주석이라고 부르는 부분으로 파일의 실행과 관계없이 어떠한 설명이나
        참조 글을 첨부할 때 쓴다. 따라서 실질적인 부분은 'id:5:initdefalut:'이다. 현재 설정값
        은 레벨 5인 X-window구동이다. 즉 부팅을 시키면 자동으로 X-window가 구동된다. 만약 콘솔
        모드(텍스트모드)형태의 login 메뉴로 부팅을 시키려면 값을 3으로 설정한다. 그 후 재부팅
        시키면 X-window가 구동되지 않고 login이 뜬다. 만약 login후에 X-window를 구동시키려면
        startx라고 치면 X-window가 구동된다.
   2) 실행레벨의 확인
    ㄱ. 설명: 실행레벨에 대한 정보를 보기 위해서는 runlevel명령을 이용한다. runlevel 명령이
             실행되면 이전의 실행레벨과 현재 실행레벨이 공백으로 구분되어 표준출력으로 보여진
             다. 만약 실행레벨이 변경되지 않았다면 이전이 실행레벨은 N으로 표시된다.
    ㄴ. 사용예
      a. [root@www rc.d]# runlevel
         3 5
          => 이전 실행레벨이 3이고 현재 실행레벨이 5라는 뜻이다.
      b. [root@www rc.d]# runlevel
         N 5
          => 기본 실행레벨 5로 시스템이 재부팅 되었을 경우이다.
   3) 실행레벨의 변경 : init프로세스는 모든 프로세스의 조상이 되는 최상위 프로세스이지만 명령
                     행에서 사용하면 해당 값으로 실행레벨을 변경한다. 이 명령의 실행은 root
                     만 가능하다.
     ㄱ. init : 0에서 6까지의 정수와 S, s, q 등의 문자를 이용하여 실행레벨을 변경한다. 해당
               번호에 따라 init는 실행레벨을 변경하며 S, s 등은 실행레벨1과 동일하다. q는
               init이 /etc/inittab설정 파일을 다시 읽는다.
        - 사용법
         init 실행레벨번호
        - 사용예
          1. init 0 => 시스템을 즉시 종료한다.
          2. init 6 => 시스템을 즉시 재부팅한다.
          3. init 1 => 시스템을 단일 사용자모드로 즉시 변경한다.
     ㄴ. telinit : init과 동일한 파일이다. telinit는 init의 하드링크이므로 서로 바꿔서 사용할
                  수 있다.
     ㄷ. 실행레벨을 변경하는 경우
        a. 실행레벨 0으로 시스템을 종료할 경우
        b. 실행레벨 1로 단일 사용자 모드로 변경할 경우
        c. 실행레벨 6으로 시스템을 재부팅할 경우
        d. 실행레벨 3과 5로 텍스트 로그인과 X11 GUI 로그인 방식을 변경할 경우

(참고) init 명령과 shutdown 명령
  init명령을 이용하여 실행레벨을 변경할 경우 다른 사용자가 접속했거나 다른 여러 웹서비스를 할
경우에는 아무런 공지없이 즉시 실행하게 된다. 따라서 이러한 경우에는 shutdown명령을 사용해야
한다.

4. /etc/rc.d디렉토리와 init프로세스
실행레벨만으로는 원하는 대로 서비스를 설정할 수 없다. System V계열에서는 각 실행레벨에 따른
init동작방식을 /etc/rc.d 아래에 디렉토리와 스크립트로 제어하였는데 리눅스에서도 이 방법을
사용한다.
(1) rc.sysinit : 부팅할 때에 init에 의해 실행되는 스크립트로 파일시스템 마운트 등과 같이 사용
                 자가 시스템을 사용하는 데 필수 작업을 처리한다.
(2) rc : 실행레벨을 변경할 때 사용되는 스크립트이다.
(3) rc.local : rc.sysinit에 의해 호출되는 파일로 시스템 기동할 때에 영향을 받는 사용자 작업과
               rc.sysinit 이외 추가 작업이 포함된다. rc.sysinit에 작업내용을 입력했을 경우에는
               업그레이드 중에 내용이 지워질 염려가 있으나 rc.local파일은 업그레이드해도 내용이
               변경되지 않는다. 부팅시 마다 자동으로 실행할 필요가 있다면 이 파일에 설정하면
               된다.
(4) init.d
   1) 설명: 이 디렉토리에는 시스템에서 제공되는 서비스에 대한 각 시작과 중지를 위한 스크립트를
          포함하고 있다. 예를 들면 /etc/rc.d/init.d/httpd는 아파치 웹서버를 안전하게 시작하거
          나 중지하는 스크립트이다. 이들 스크립트는 기본 형식이 있으며 인자 하나만을 이용한다.
          가장 간단한 인자가 start와 stop이다. 이 외에도 restart, status, reload(서비스를 종료
          하지 않고 변경된 설정 파일만 적용할 때 사용)등이 있다.
   2) 사용예
     ㄱ. /etc/rc.d/init.d/httpd stop    : 아파치 서비스를 멈춘다.
     ㄴ. /etc/rc.d/init.d/httpd start   : 아파치 서비스를 시작한다.
     ㄷ. /etc/rc.d/init.d/httpd restart : 아파치를 멈추고 시작한다. 위의 ㄱ작업과 ㄴ작업을
                                         한번에 한다.
     ㄹ. /etc/rc.d/init.d/httpd reload  : 아파치를 계속 운영하며 설정 파일만 다시 읽게 한다.
                                         이 경우는 설정 파일을 다시 읽도록 실행중인 httpd
                                         데몬에게 SIGHUP시그널을 보낸다.
   3) 관련명령어: service
    ㄱ. 설명: /etc/rc.d/init.d 디렉토리에 존재하는 스크립트를 쉽게 시작시키거나 중지시킬 수
             있는 스크립트이다.
    ㄴ. 사용예
       service sendmail start
   4) 참고
     리눅스에서 부팅과 관련된 디렉토리는 /etc/rc.d 디렉토리이지만 이 디렉토리에 존재하는 디렉
    토리와 파일들이 /etc 디렉토리 바로 하위에 심볼릭링크로도 설정되어 있다. 따라서 실행할 때
    /etc/init.d/httpd start 해도 된다.
     예) /etc/init.d => /etc/rc.d/init.d
         /etc/rc3.d => /etc/rc.d/rc3.d

(5) rc0.d ~ rc6.d 디렉토리 : /etc/rc.d/init.d디렉토리에 있는 초기화 스크립트들은 init프로세스
                            에 의해 직접 실행되지 않는다. 대신 rc0.d에서 rc6.d까지 디렉토리에
                            각 실행레벨에 이들 스크립트에 대한 심볼릭 링크가 만들어져 있다.
                            init프로세스가 실행레벨 n을 시작하면 rcn.d디렉토리에 존재하는 모든
                            링크를 점검한다. 이들 링크는 특별한 형식을 가지고 있다.
   1) 형식
    [K | S][번호][init.d_이름]
   2) 의미
     ㄱ. K : Kill를 의미하며 실행되지 않을 서비스를 말한다.
     ㄴ. S : Start를 의미하며 해당 실행레벨에서 실행되어야 하는 서비스를 말한다.
     ㄷ. 번호 : 순차적인 번호로 링크명에서 이 부분은 정수가 2자리(필요한 경우 0을 앞에 붙일 수
              있음)로 되어 있으며 시작이나 중지 순서를 나타내는 상대 번호이다. 번호가 작을수록
              init에 의해 먼저 실행되며 클수록 나중에 실행된다. 번호를 부여하는 규칙은 없지만
              새로운 서비스를 추가할 경우 반드시 필요한 서비스들이 앞서 실행되도록 해야 한다.
              만일 두 서비스가 동일 번호가 있다면 순서가 결정되기 어렵겠지만 대부분 알파벳순
              으로 실행한다.
     ㄹ. init.d_이름 : 관습에 따라 링크가 되는 스크립트명을 사용한다. init은 이 이름을 사용
                     하지 않지만 관리자가 이해하기 쉽게 스크립트명을 붙인다.
   3) 확인 : /etc/rc.d/rc3.d 디렉토리 확인해보기
     [root@www rc.d]# ls rc3.d
     K05innd        K35dhcpd      K65kprop     S10network   S56rawdevices
     K12mysqld      K35smb        K65krb524    S12syslog    S56xinetd
     K15proftpd     K35vncserver  K65krb5kdc   S13portmap   S60lpd
     K16rarpd       K40mars-nwe   K74nscd      S14nfslock   S80isdn
     K20bootparamd  K45arpwatch   K74ntpd      S17keytable  S80sendmail
     K20nfs         K45named      K74ups       S20pcmcia    S85gpm
     K20rstatd      K50snmpd      K74ypserv    S20random    S85nessusd
     K20rusersd     K50tux        K75gated     S25netfs     S90crond
     K20rwalld      K54pxe        K96irda      S26apmd      S90xfs
     K20rwhod       K55routed     S05kudzu     S28autofs    S95anacron
     K25squid       K61ldap       S06reconfig  S40atd       S99linuxconf
     K28amd         K65identd     S08ipchains  S40snortd    S99local
     K34yppasswdd   K65kadmin     S08iptables  S55sshd
   4) 실행 : init프로세스가 실행레벨 3으로 부팅하면 /etc/rc.d/rc3.d 디렉토리에서 S로 시작되는
            모든 링크들을 번호 순서대로 실행된다. 각 서비스는 start인자를 이용해 실행되며 마지
            막 스크립트가 실행된 후에는 실행레벨3에 필요한 준비를 마친다.

(참고2) root패스워드를 잊어먹었을 경우
root패스워드를 잊어먹었을 경우에는 login을 물어보지 않는 단일 사용자 모드로 부팅하여야 한다.
만약 lilo를 부트 매니저 프로그램으로 사용한다면 처음 부팅시 boot: 라는 메뉴가 나오는데 이 때
'linux single' 또는 'linux 1' 등 이라고 입력하면 login이라는 절차를 물어보지 않고 바로 부팅과
동시에 프롬프트상태가 된다. 이 상태에서 패스워드를 변경하면 된다. 패스워드 변경명령어는
'passwd'이다.

5. 시스템의 재부팅과 종료
(1) 시스템 재부팅하기
   1) shutdown : 시스템을 재시작하거나 전원을 종료하는 명령어로 root권한자만 가능하다. 다른
                방법에 비해 안전하고 조직적인 방법으로 시스템을 종료한다. shutdown은 기본적으로
                단일 사용자모드로 전환하며 옵션을 이용해 시스템을 종료하거나 재부팅할 수 있다.
                이 명령은 해당 옵션에 따라 적당한 실행레벨을 이용하여 init을 호출한다.
     ㄱ. 사용법
        shutdown option 시간 [경고메시지]
     ㄴ. option
       -r : 셧다운후 시스템을 재부팅한다. (=reboot)
       -h : 셧다운후 시스템을 종료한다. (=halt)
       -c : 예약된 셧다운 명령을 취소
       -f : 빠른 부트 모드로 다음 번 부팅 시에 파일시스템을 검사하지 않는다.
       -F : 다음 번 부팅 시에 파일시스템을 강제로 검사한다.
       -k : 실제로 셧다운 하지 않고 경고 메시지만을 전한다.
       -t secs : shutdwon전에 프로세스들이 하던 작업을 마무리 짓도록 secs초 간의 delay를 준다.
       +m : m분 후에 shutdown한다.
     ㄷ. 사용예
        1. shutdown -r now : 시스템을 즉시 재부팅한다.
        2. shutdown -h now : 시스템을 즉시 종료한다.
        3. shutdown -h +10   : 10분뒤에 시스템을 종료하라는 뜻
        4. shutdown -c     : 예약된 셧다운 명령을 취소
        5. shutdown -r +10 : 10분후에 시스템을 재시동하라는 뜻
        6. shutdown -h 23:59 => 자정 직전에 시스템을 종료한다.
        7. [root@www /root]# shutdown -k 1 '1분뒤에 종료합니다.'

           Broadcast message from root (pts/0) Mon Jun  3 01:00:53 2002...

           1분뒤에 종료합니다.
           The system is going DOWN to maintenance mode in 1 minute !!
      (문제) 사용중인 리눅스 시스템을 재부팅하려고 서버에 접속한 사용자에게 "system shutdown
         after 5min!" 이라는 메시지를 주고 5분 후에 재부팅하려면 명령을 어떻게 내려야 하는가?
           => shutdown -r +5 system shutdown after 5min!
    2) CTRL+ALT+DEL누르기 : root권한으로 CTRL+ALT+DEL를 누르면 재부팅된다. (권장안함)
    3) 'init 6'명령내리기 : 역시 권장할 만 한 방법이 아니다.
    4) reboot: 이 명령은 로컬(Local)에서 접속한 사용자라면 모두 사용가능하다. 즉 root 권한자나
              일반사용자도 이 명령을 내리면 재부팅된다.
(2) 시스템의 종료 : 'halt'명령을 내리거나 'shutdown -h now' 명령을 내린다. 또는 'init 0'을
                   실행시킨다.

(참고) 일반적으로 shutdown 관련 명령은 루트권한자 이외에는 사용할 수 없다. 리눅스는 PC용으로도
      많이 사용되므로 로컬(Local)에서 접속했을 경우 root가 아니고 일반사용자라도 재부팅하거나
      전원을 끌 수 있다. 재부팅할때는 reboot, 시스템을 종료할 때는 halt 명령을 내리면 된다.
      물론 X-window을 사용하는 경우 메뉴를 이용하여 전원을 재부팅하거나 종료시킬 수 있다.

Trackback
Reply
우주곰:지구곰이 아닙니다.
지구곰이 아닙니다.
Categories (190)
Information (5)
About uzoogom (5)
My Advanced Linux (73)
Learning Linux (96)
OperatingSystem (5)
Databases (4)
OpenSource (1)
Tips! (1)
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31