서버/Linux II 2016. 3. 3. 17:39

Linux II - 10. Linux 부팅 과정

 

 

 

login as: root
root@192.168.1.2's password:
Last login: Thu Mar  3 18:46:59 2016 from 192.168.1.1
[root@CentOS /root]#

 

 

 

1. 리눅스 부팅 과정

 

① 전원 ON
② ROM BIOS을 통하여 POST 진행

-------------------------------------- 하드웨어 & ROM 담당


③ GRUB 부트로더 실행
④ 커널이미지를 메모리로 로딩 실시 
⑤ init 프로세스 실행

-------------------------------------- 리눅스 운영체제 담당

 

⑥ login

-------------------------------------- 사용자 로그인 실시

 

 

 

2. grub 부트로더 설정파일

 

 - grub는 부트로더를 관리하며, 커널을 메모리에 올려주는 일을 담당한다.

 - 부트로더는 파일 시스템에 저장된게 아니라, 첫번째 디스크 장치(MBR : Master Boot Record)에 저장되어 있다.

 - 멀티 부팅을 지원한다.

 

[root@CentOS /root]# cd /etc
[root@CentOS /etc]# ls grub.conf
grub.conf

[root@CentOS /etc]# ls -l grub.conf
lrwxrwxrwx. 1 root root 22 2016-02-03 01:56 grub.conf -> ../boot/grub/grub.conf

[root@CentOS /etc]# cp grub.conf grub.conf.bak    ('grub.conf' 파일을 백업 실시)


[root@CentOS /etc]# vi grub.conf

  1 # grub.conf generated by anaconda
  2 #
  3 # Note that you do not have to rerun grub after making changes to this file
  4 # NOTICE:  You do not have a /boot partition.  This means that
  5 #          all kernel and initrd paths are relative to /, eg.
  6 #          root (hd0,0)
  7 #          kernel /boot/vmlinuz-version ro root=/dev/sda1
  8 #          initrd /boot/initrd-[generic-]version.img
  9 #boot=/dev/sda (부트로더는 파일시스템에 저장된게 아니라, 장치에 저장되어있음)

 10 default=0 (멀티 부팅시 선택하지 않으면, 첫번째 타이틀의 커널로 부팅 실시)

 11 timeout=5 (부팅시 부트로더 메뉴 대기 시간)
 12 splashimage=(hd0,0)/boot/grub/splash.xpm.gz (부팅시 grub 부트로더 메뉴 그림 출력)
 13 hiddenmenu (부팅시 grub 부트로더 메뉴를 숨김)
 14 title CentOS 6 (2.6.32-504.el6.x86_64) (부팅 이미지 레이블명)
 15     root (hd0,0)  (sda1을 의미한다. hd2,1이라고 하면 3번째 디스크, 2번째 파티션)
 16     kernel /boot/vmlinuz-2.6.32-504.el6.x86_64 ro root=UUID=7c533aa0-0a72-4a    94-b076-382622ad8486 rd_NO_LUKS LANG=ko_KR.UTF-8 rd_NO_MD crashkernel=auto      KEYBOARDTYPE=pc KEYTABLE=ko rd_NO_LVM rd_NO_DM rhgb quiet
 17     initrd /boot/initramfs-2.6.32-504.el6.x86_64.img  (initrd 이미지 이름)
 

 

 

 - 테스트를 하기 위해서 다음과 같이 수정한다.

 

  1 # grub.conf generated by anaconda
  2 #
  3 # Note that you do not have to rerun grub after making changes to this file
  4 # NOTICE:  You do not have a /boot partition.  This means that
  5 #          all kernel and initrd paths are relative to /, eg.
  6 #          root (hd0,0)
  7 #          kernel /boot/vmlinuz-version ro root=/dev/sda1
  8 #          initrd /boot/initrd-[generic-]version.img
  9 boot=/dev/sda

 10 default=0
 11 timeout=60

 12 #splashimage=(hd0,0)/boot/grub/splash.xpm.gz
 13 #hiddenmenu
 14 title CentOS Server 1 (2.6.32-504.el6.x86_64)
 15     root (hd0,0)
 16     kernel /boot/vmlinuz-2.6.32-504.el6.x86_64 ro root=UUID=7c533aa0-0a72-4a    94-b076-382622ad8486 rd_NO_LUKS LANG=ko_KR.UTF-8 rd_NO_MD crashkernel=auto      KEYBOARDTYPE=pc KEYTABLE=ko rd_NO_LVM rd_NO_DM rhgb quiet
 17     initrd /boot/initramfs-2.6.32-504.el6.x86_64.img
 

: wq!

 

 

 - 'grub.conf' 수정 내용 오류 검사 실시


[root@CentOS /etc]# mount -a

 

 

 - 시스템 종료

 

[root@CentOS /etc]# init 0

 

 

 

 

[참고] 부트로더 모드

 

 - rhgb quiet 1 : 싱글 유저 모드

 - rhgb quiet 3 : 모든 기능을 지원하는 다중 유저 모드 (텍스트 콘솔 부팅, 'startx' 명령어 사용 -> Xwindow 사용 가능)

 - rhgb quiet 5 : 모든 기능을 지원하는 다중 유저 모드 (Xwindow 부팅)

 

 

 

 

3. 싱글 유저 모드

 

 - 싱글 유저 모드란 윈도우의 안전 모드와 비슷하며, 오직 root 계정 사용자만 사용할 수 있는 모드이다.

 - 또한, 패스워드 복구시에도 사용 가능한 모드이다.

 

 

Ex) 리눅스 패스워드 복구

 

 

플레이 버튼 클릭

 

 

 

 

 

히든 메뉴를 주석처리 했기 때문에 히든 메뉴가 나옴

 

 

 

 

 방향키 위 또는 아래를 눌르면, 메뉴 타임아웃이 멈추며, 'e'를 눌르면 타이틀 메뉴으로 입장됨

 

 

 

 

'grub.conf' 타이틀 메뉴가 나오며, 2번째를 선택하여 'e'를 눌른다.

 

 

 

 

 quiet에서 한칸 띄우고 '1'를 입력한 다음 엔터를 실시함 (1은 슈퍼 유저 모드 부팅)

 

 

 

 

 타이틀 메뉴로 되돌아 왔다면, 'b'를 눌러서 싱글 유저 모드로 부팅을 실시함

 

 

 

 

부팅 진행중

 

 

 

 

 싱글 유저 모드로 부팅 성공

 

 

 

 

 싱글 모드는 로그인 인증 단계 없이 바로 'root'로 접속된다. 그렇기 때문에 패스워드 복구시 사용 가능한 모드이다.

 

 

 

 

기존 패스워드는 암호화되었기 때문에 복구가 불가능하다. 그래서 'passwd' 명령어를 이용하여 'root'의 새로운 패스워드를 설정한다. 그럼 패스워드를 'centos1'로 재설정하도록 하자.

 

 

 

 

 'tty' 명령어를 이용하여 확인하면, 싱글 유저 모드는 가상 콘솔이 아닌 실제 콘솔로 연결된것으로 나온다.

 

 

 

'reboot'를 실시하여, 재부팅을 실시한다.

 

 

 

 

login as: root
root@192.168.1.2's password:
Last login: Thu Mar  3 18:47:19 2016 from 192.168.1.1
[root@CentOS /root]#

 

 

 

 

4. 싱글 유저 모드 암호 설정

 

 - 싱글 유저 모드로 입장하기 이전에 패스워드를 물어보게 할 수 있다. 패스워드 설정은 'grub.conf' 파일에 추가하면 된다.

 - 패스워드를 평문으로 설정할 경우, 보안상 취약하기 때문에 MD5 해시값을 생성하여 설정하는 것을 권장한다.

 

 

[root@CentOS /root]# grub
Probing devices to guess BIOS drives. This may take a long time.
Unknown partition table signature
Unknown partition table signature
Unknown partition table signature
Unknown partition table signature
Unknown partition table signature


    GNU GRUB  version 0.97  (640K lower / 3072K upper memory)

 [ Minimal BASH-like line editing is supported.  For the first word, TAB
   lists possible command completions.  Anywhere else TAB lists the possible
   completions of a device/filename.]
grub>

 

grub> md5crypt
md5crypt
Password: centos1
centos1
Encrypted: $1$blIcg$vHedJjAJ0DibO8XocqQ8l/
grub>

 

grub> quit
quit
[root@CentOS /root]#

 

 

[root@CentOS /root]# vi /etc/grub.conf

 

  1 # grub.conf generated by anaconda
  2 #
  3 # Note that you do not have to rerun grub after making changes to this file
  4 # NOTICE:  You have a /boot partition.  This means that
  5 #          all kernel and initrd paths are relative to /boot/, eg.
  6 #          root (hd0,0)
  7 #          kernel /vmlinuz-version ro root=/dev/mapper/vg_centos-lv_root
  8 #          initrd /initrd-[generic-]version.img
  9 boot=/dev/sda
 10 default=0
 11 timeout=60
 12 #splashimage=(hd0,0)/grub/splash.xpm.gz
 13 password --md5 $1$blIcg$vHedJjAJ0DibO8XocqQ8l/      <- 추가
 14 #hiddenmenu
 15 title CentOS Server 1 (2.6.32-504.el6.x86_64)
 16     root (hd0,0)
 17     kernel /vmlinuz-2.6.32-504.el6.x86_64 ro root=/dev/mapper/vg_centos-lv_root rd_NO_LUKS LANG=ko_KR.UTF-8 rd_LVM_LV=vg_centos/lv_swap rd_NO_MD rd_LVM_    LV=vg_centos/lv_root rd_NO_DM  KEYBOARDTYPE=pc KEYTABLE=ko rhgb quiet
 18     initrd /initramfs-2.6.32-504.el6.x86_64.img
~
 

: wq!

 

 

 

- 시스템 종류 및 다시 시작 실시

 

[root@CentOS /root]# init 0

 

 

플레이 버튼 클릭

 

 

 

 

 'e'가 아니라 'p'가 나온다. 'p'를 눌르면, 이전에 설정했던 MD5 패스워드를 물어봄

 

 

 

 

'centos1'를 입력한다.

 

 

 

 

이제 'e'가 보인다. 'e'를 눌르면 타이틀 메뉴로 입장됨

 

 

 

 

 'grub.conf' 타이틀 메뉴가 나오며, 2번째를 선택하여 'e'를 눌른다.

 

 

 

 

 quiet에서 한칸 띄우고 '5'를 입력한 다음 엔터를 실시함 (5는 기본 모드 부팅)

 

 

 

 타이틀 메뉴로 되돌아 왔다면, 'b'를 눌러서 기본 모드로 부팅을 실시함

 

 

 

 

 

5. 커널 부팅

 

 - 커널이 메모리에 올라가면, 커널이 부팅되면서 각종 장치 드라이버들을 메모리에 올려준다.

 - 다음 정보 확인을 통하여 커널이 메모리에 올린 장치 드라이버들을 확인할 수 있다. 


[root@CentOS /root]# lsmod
Module                  Size  Used by
lp                      9242  0
autofs4                26609  3
8021q                  25527  0

~ 중간 생략 ~


cdrom                  39085  1 sr_mod
sd_mod                 36998  3
crc_t10dif              1305  1 sd_mod
pata_acpi               3701  0
ata_generic             3837  0
ata_piix               24409  0
mptspi                 16411  2
mptscsih               36636  1 mptspi
mptbase                93615  2 mptspi,mptscsih
scsi_transport_spi     25447  1 mptspi
dm_mirror              14384  0
dm_region_hash         12085  1 dm_mirror
dm_log                  9930  2 dm_mirror,dm_region_hash
dm_mod                 95622  8 dm_mirror,dm_log

 

 


 

6. Init 프로세스 실행

 

 - 커널은 부팅이 완료되면, 마지막으로 init 프로세스를 생성한다.

 - Init 프로세스는 서버를 올려주거나, 파일 시스템 마운트, 네트워크 설정 등 관리자가 필요한 서비스 대한 동작 실시를 담당한다.

 - 또한, Init 프로세스는 부팅시 run-level 결정한다.

 

[root@CentOS /etc]# ps -ef | head -4
UID        PID  PPID  C STIME TTY          TIME CMD
root         1     0  0 13:28 ?        00:00:01 /sbin/init
root         2     0  0 13:28 ?        00:00:00 [kthreadd]
root         3     2  0 13:28 ?        00:00:00 [migration/0]

[root@CentOS /root]# pgrep -fl sshd
2188 /usr/sbin/sshd
2706 sshd: root@pts/0

[root@CentOS /root]# df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/mapper/vg_centos-lv_root
                       35G  3.7G   30G  12% /
tmpfs                1000M   72K 1000M   1% /dev/shm
/dev/sda1             477M   34M  419M   8% /boot

[root@CentOS /root]# ifconfig eth0
eth0      Link encap:Ethernet  HWaddr 00:0C:29:17:E0:C6
          inet addr:192.168.1.2  Bcast:192.168.1.255  Mask:255.255.255.0
          inet6 addr: fe80::20c:29ff:fe17:e0c6/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:392 errors:0 dropped:0 overruns:0 frame:0
          TX packets:369 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:41017 (40.0 KiB)  TX bytes:40976 (40.0 KiB)

 

 

 

 1) Init 프로세스

 

 - Init 프로세스는 자신의 프로세스 아이디는 '1'이지만, 커널이 생성한 것이기 때문에 부모 프로세스 아이디는 '0'이다.

 - 그렇기 때문에 제어 및 수정이 불가능하다. 

 

[root@CentOS /etc]# ps -ef | head -4
UID        PID  PPID  C STIME TTY          TIME CMD
root         1     0  0 13:28 ?        00:00:01 /sbin/init
root         2     0  0 13:28 ?        00:00:00 [kthreadd]
root         3     2  0 13:28 ?        00:00:00 [migration/0]

 

[root@CentOS /root]# pstree | head -4
init-+-NetworkManager-+-dhclient
     |                `-{NetworkManager}
     |-abrtd
     |-acpid

 

 

 2) Inittab 파일 및 Run-Level

 

  - Init 프로세스 관련 내용들을은 '/etc/inittab' 설정 파일로 관리한다.

 

[root@CentOS /root]# cd /etc
[root@CentOS /etc]#
[root@CentOS /etc]# ls -l inittab
-rw-r--r--. 1 root root 884 2016-01-12 00:27 inittab


[root@CentOS /etc]# cp inittab inittab.bak    <- 백업 실시

 

[root@CentOS /etc]# vi inittab

  1 # inittab is only used by upstart for the default runlevel.
  2 #
  3 # ADDING OTHER CONFIGURATION HERE WILL HAVE NO EFFECT ON YOUR SYSTEM.
  4 #
  5 # System initialization is started by /etc/init/rcS.conf
  6 #
  7 # Individual runlevels are started by /etc/init/rc.conf
  8 #
  9 # Ctrl-Alt-Delete is handled by /etc/init/control-alt-delete.conf
 10 #
 11 # Terminal gettys are handled by /etc/init/tty.conf and /etc/init/serial.conf,
 12 # with configuration in /etc/sysconfig/init.
 13 #
 14 # For information on how to write upstart event handlers, or how
 15 # upstart works, see init(5), init(8), and initctl(8).
 16 #
 17 # Default runlevel. The runlevels used are:
 18 #   0 - halt (Do NOT set initdefault to this)
 19 #   1 - Single user mode
 20 #   2 - Multiuser, without NFS (The same as 3, if you do not have networking)
 21 #   3 - Full multiuser mode
 22 #   4 - unused
 23 #   5 - X11
 24 #   6 - reboot (Do NOT set initdefault to this)
 25 #
 26 id:5:initdefault:   <- 현재 부팅된 Run-Level 값
~

: q!

 

 

 

 - 현재 Run-Level 확인


[root@CentOS /etc]# who -r
         run-level 5  2016-03-04 13:28

 

 - 만약, Run-Level를 변경할 경우, 다음과 같이 'init' 명령어를 사용하면 된다.

 

[root@CentOS /etc]# init 0    <- 시스템 종료

 

[root@CentOS /etc]# init 3    <- Xwindow 사용 불가능한 모드로 시작

 

[root@CentOS /etc]# init 5    <- Xwindow 사용 가능한 모드로 시작

 

[root@CentOS /etc]# init 6    <- 시스템 재부팅

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

'서버 > Linux II' 카테고리의 다른 글

Linux II - 12. RPM 패키지 관리  (0) 2016.03.04
Linux II - 11. 백업 & 복구  (0) 2016.03.04
Linux II - 09. Linux Shell  (0) 2016.02.26
Linux II - 08. 디스크 Quota  (0) 2016.02.23
Linux II - 07. RAID 관리  (0) 2016.02.23
Posted by 김정우 강사(카카오톡 : kim10322)
,


Q