linux boot procedure(부팅 진행과정)
페이지 정보
작성자 admin 작성일16-02-15 17:11 조회1,570회 댓글1건관련링크
본문
1. 전원 ON. 2. ROM BIOS promgram이 POST 진행 3. 부트로더 실행 4. 커널이미지 메모리 적재 5. init 프로세스 실행 6. login |
1번과 2번은 하드웨어에 관련된 부분
리눅스와 직접 관련된 3 ~ 6 부분
컴퓨터 전원을 켜면 롬에 저장되어 있는 프로그램에 의해 POST(Power On Self Test) 를 진행한다.
cpu,디스크,주변장치,메모리등 기본적인 하드웨어 진단을 한다. 이 과정에서 특별한 문제가 없다면
하드디스크 또는 다른 부팅매체의 0번 섹터(MBR(Master Boot Record)라고 한다)의 부트프로그램을 읽는다.
grub 부트로더 설정파일
아래는 커널소스파일을 다운로드 받아서 설치해서 커널을 추가로 grub.conf 에
등록한 경우이다.
-- /etc/grub.conf --
# grub.conf generated by anaconda
#
# Note that you do not have to rerun grub after making changes to this file
# NOTICE: You do not have a /boot partition. This means that
# all kernel and initrd paths are relative to /, eg.
# root (hd0,2)
# kernel /boot/vmlinuz-version ro root=/dev/sda3
# initrd /boot/initrd-[generic-]version.img
#boot=/dev/sda ; 부트로더가 설치되어 있는 장치
default=1 ; 부팅할때 두개의 커널중 아무것도 선택하지 않으면 두번째 title의 커널로 부팅.
timeout=5 ; 부팅할때 부트로드 메뉴에서 대기시간(5초를 기다렸다가 커널 로딩)
splashimage=(hd0,2)/boot/grub/splash.xpm.gz (부트로드 메뉴의 백그라운드 이미지파일)
hiddenmenu ; 부팅할때 부트로드 메뉴를 숨긴다.
----------------------- 새로운 커널 설치후 추가된 항목 ------------------------------------------
title CentOS (3.2.76) ;
root (hd0,2)
kernel /boot/vmlinuz-3.2.76 ro root=UUID=55c7f442-1c10-48e8-9029-bd60e23ca0ff 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
initrd /boot/initramfs-3.2.76.img
----------------------- 새로운 커널 설치후 추가된 항목 끝.------------------------------------------
title CentOS (2.6.32-431.el6.x86_64) ; 기존의 타이틀
root (hd0,2)
kernel /boot/vmlinuz-2.6.32-431.el6.x86_64 ro root=UUID=55c7f442-1c10-48e8-9029-bd60e23ca0ff 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
initrd /boot/initramfs-2.6.32-431.el6.x86_64.img
/root#
grub boot 로더에 암호설정
/root# grub
Probing devices to guess BIOS drives. This may take a long time.
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> md5crypt
md5crypt
Password: mypass
mypass
Encrypted: $1$Igefe$CqzxnOdtKfNqA6FTqM.xV.
grub> quit
quit
/root#
encrypt 된 암호를 복사한다음 아래처럼 gurb.conf 파일에 붙여넣으면
grub 부트로더 메뉴를 편집할때 암호를 요구한다.
# grub.conf generated by anaconda
#
# Note that you do not have to rerun grub after making changes to this file
# NOTICE: You do not have a /boot partition. This means that
# all kernel and initrd paths are relative to /, eg.
# root (hd0,2)
# kernel /boot/vmlinuz-version ro root=/dev/sda3
# initrd /boot/initrd-[generic-]version.img
#boot=/dev/sda
default=1
timeout=5
splashimage=(hd0,2)/boot/grub/splash.xpm.gz
password --md5 $1$Igefe$CqzxnOdtKfNqA6FTqM.xV. ; 암호설정
hiddenmenu
title CentOS (3.2.76)
root (hd0,2)
kernel /boot/vmlinuz-3.2.76 ro root=UUID=55c7f442-1c10-48e8-9029-bd60e23ca0ff 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
initrd /boot/initramfs-3.2.76.img
title CentOS (2.6.32-431.el6.x86_64)
root (hd0,2)
kernel /boot/vmlinuz-2.6.32-431.el6.x86_64 ro root=UUID=55c7f442-1c10-48e8-9029-bd60e23ca0ff 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
initrd /boot/initramfs-2.6.32-431.el6.x86_64.img
- 암호설정을 하면 부팅할때 암호를 모르면 부트로더 메뉴를 편집할 수 없으므로 아무나 허가받지
않은 사용자가 single user mode 로 부팅하는것을 차단할 수 있다.
*. 만약 부팅시 부트로드 메뉴 편집과 상관없이 부팅할때 마다 암호를 물어보도록 설정하려면
password 옵션을 grub.conf 파일 맨 아래쪽에 추가 하면 된다.
부트로더가 성공적으로 실행이 되면 다음 단계는 커널이 로딩되는 단계이다.
부팅할때 커널의 역할
/ 파일시스템을 read olny 로 마운트한다.
필요한 장치 드라이버를 로드한다.
init 프로세스를 생성한다.
부팅된후 실행된 모듈은 lsmod 명령어로 확인할 수 있다.
소스커널을 다운로드 받아서 커널을 업그레이드 하거나 추가로 여러개의
커널을 설치하여 grub.conf 에 등록하여 사용할 수도 있다.
/etc/fstab 에 등록된 파일시스템 레이블을 사용하려면 초기 ramdisk 가 필요하다.
init 프로세스 단계
부팅할때 커널의 마지막 단계에서 init 프로세스가 생성된다.
init 프로세스는 부팅시 run-level 결정
centos6 에서는 init 의 역할의 upstart 로 변경되었으며
init 설정파일인 /etc/inittab 에는 기존에 설정된 가상 콘솔 설정등 모든 부분들이 없어지고
부팅시 디폴트 runlevel 설정부분만 남아 있다.
upstart 는 우분투 배포판을 위해서 처음 개발되었으며 전통적인 init 역할을 이벤트 기반으로
처리하는 방식이다. 부팅시 자동 실행되는 서비스를 결정하는 chkconfig 의 역할을 대신 수행할 수도 있다.
런레벨
리눅스는 몇가지 런레벨을 갖고 있으며 run-level 은 부팅할때 결정되면 부팅후 변경할 수도 있다.
리눅스 시작과 종료 또한 런레벨의 결과로 볼수 있다.
리눅스 부팅 : run level 0 -- 변경 --> run level 1, 2, 3, 5 등
리눅스 종료 : 현재 런레벨 - 변경 --> run level 0
/etc/inittab 파일에 정의 되어 있는 리눅스 runlevel 은 아래와 같다.
# 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:3:initdefault: <-- 부팅시 default run level 을 변경하려면 숫자를 변경하면 된다.
현재 run level 확인
/root# who -r
run-level 3 2016-02-15 14:43
/root#
/root# pgrep -fl Xorg
/root# who
root pts/0 2016-02-15 14:57 (192.168.10.1)
현재 런레벨은 3 이며 런레벨 3은 모든 서비스를 지원한다.
런레벨 5와 다른점은 부팅할때 Xwindow 를 자동 실행하지 않는다는것.
부팅후 현재 run level 변경은 init 및 telinit 명령어로 변경할수 있다.
/root# telinit 5
/root# who -r
run-level 5 2016-02-15 16:47 last=3
/root# pgrep -fl Xorg
8415 /usr/bin/Xorg :0 -br -verbose -audit 4 -auth /var/run/gdm/auth-for-gdm-vtmex7/database -nolisten tcp
/root#
Xserver(Xorg) 프로세스가 실행이 되었다.(Xwindow 가 실행이 되었다)
런레벨 3에서 Xwindow 를 사용하려면 startx 명령을 실행하면 된다.
그리고 xwindow 에서 logout 하면 xwindow는 재실행되지 않고 종료된다.
Xwindow 를 자주 사용하지 않는다면 런레벨 3 으로 부팅하는것이 너 낫다.
부팅장애 문제 처리
리눅스 파일시스템에 문제가 있거나 fstab 파일 설정의 에러로 부팅이 안될 수 있다.
이런경우에는 부팅시 grub 메뉴를 편집하여 싱글유저 모드로 부팅하여 장애처리를
할수 있다.
ex) root 암호를 잊어버려서 관리자로 로그인 못하는 경우..
댓글목록
mycolor님의 댓글
mycolor 작성일
centos 7.X 버전에서는 systemctl 명령어로 서비스를 제어하고 런레벨 변경도
systemctl 명령어로 한다
* systemctl 명령어
systemctl start httpd
systemctl restart httpd
systemctl reload httpd
systemctl stop httpd
systemctl enable httpd
systemctl disable httpd
systemctl mask httpd
systemctl unmask httpd
-----------------------
run level 변경
systemctl isolate graphical/multi-user/rescue/emergency.target
systemctl set-default " "
centos7 / redhat7 root 암호 재설정
1. 부트로더화면 편집
-> e --> linux16 으로 시작하는 행 맨 끝에 rd.break 추가
2. ctrl + x ; 부팅되고 root 로 자동 login 됨
3 console 에서 한글 출력이 안되므로 영어로 변경 export LANG=C
4. mount -o remount,rw /sysroot <-- / 파일시스템이 /sysroot 에 읽기 전용으로 마운트 되어 있음
5. chroot /sysroot / 파일시스템이 마운트되어 있는 /sysroot 를 원래의 / 에 마운트되도록 함.
6. root 암호 설정
7. touch /.autorelabel ---> selinux relabel
8. reboot (*. reboot, poweroff 등의 종료 명령이 실행안됨)
--> exit 를 두번 입력하면 reboot 됨