Linux II - 10. Linux 부팅 과정
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 10 default=0 (멀티 부팅시 선택하지 않으면, 첫번째 타이틀의 커널로 부팅 실시) 11 timeout=5 (부팅시 부트로더 메뉴 대기 시간) |
- 테스트를 하기 위해서 다음과 같이 수정한다.
1 # grub.conf generated by anaconda 10 default=0 12 #splashimage=(hd0,0)/boot/grub/splash.xpm.gz : 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 : 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. : 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 <- 시스템 재부팅