3.1-2 리눅스 파일 시스템과 부트 과정

Introduction to Linux 2015. 2. 2. 00:04

edx Introduction to Linux Chap 3 정리.. 


1) 리눅스 파일 시스템 기본


Different Types of Filesystems Supported by Linux:

  • Conventional disk filesystems: ext2ext3ext4XFSBtrfsJFS,NTFS, etc.
  • Flash storage filesystems: ubifsJFFS2YAFFS, etc.
  • Database filesystems
  • Special purpose filesystems: procfssysfstmpfsdebugfs, etc.


파티션 : 디스크의 논리적 부분

파일시스템 : 하드디스크의 파일을(보통 파티션에 있는) 저장하고/찾는 방법


윈도우 / 리눅스 파일시스템 비교

 WindowsLinux
PartitionDisk1/dev/sda1
Filesystem typeNTFS/FAT32EXT3/EXT4/XFS...
Mounting ParametersDriveLetterMountPoint
Base Folder where OS is storedC drive/


리눅스는 중요한 자료들을 FHS ( FileSystem Hierachy Standard ) 에 따라 저장한다. 

대소문자 구분



2) Boot Process




리눅스의 부트 과정은 다음과 같다. 


1. BIOS - POST Process ( Power On Self Test )

전원이 눌리면 Basic Input / Output System 이 하드웨어를 초기화하고, (키보드, 마우스를 포함) 메인메모리를 테스트한다. 

이 BIOS 소프트웨어는 메인보드의 ROM 칩에 저장되어 있다. 이후 과정은 운영체제에 의해 관리된다.


2. BootLoader

보통 하드디스크에 저장되어 있으며, 부트섹터에 저장되어 있거나, (전통적인 BIOS/MBR 시스템) EFI 파티션에 저장되어 있다. ( 요즈음 사용되는 확장가능 펌웨어 인터페이스나, EFI/UEFI 시스템에서) 이 단계까지 머신은 어떠한 복잡한 저장장치에도 접근하지 않았다. 그 후에, CMOS Value 로부터 중요한 주변 정보(날짜, 시간)들을 얻어온다. (배터리로 동작하는 메모리를 이용해 전원이 꺼져있어도 시간을 tracking 한다 ) 

리눅스에서 사용되는 부트로더는 다양한데, 가장 흔한 부트로더는 GRUB ( GRand Unified Boot loader ), ISOLINUX (제거 가능한 미디어로부터 부팅을 위함) 리눅스를 부팅할때, 부트로더는 커널이미지를 로드하고 램디스크를 메모리에 올리는 것을 담당한다.


3. Boot Loader in Action

부트로더의 동작을 2가지 단계로 구분할 수 있다.

3-1. 첫번째 단계

BIOS/MBR 시스템에서, 부트로더는 하드디스크의 Master Boot Record (MBR) 이라 불리는 첫번째 섹터에 저장되어 있다. MBR 의 크기는 512 byte 에 그친다. 이 단계에서, 부트로더는 파티션 테이블을 조사하여 부트 가능한 파티션을 검색한다. 검색이 완료 되면, GRUB 과 같은 두번째 단계의 부트로더를 찾아 RAM 에 로드한다. 


EFI/UEFI 시스템에서, UFEI 펌웨어는 자신의 부트 매니저 데이터를 읽어들여 어떤 UEFI 어플리케이션을 어디에서 구동시켜야 할지를 결정한다. (EFI 가 존재하는 파티션에서 구동되어야 한다)  펌웨어의 부트 매니저 부트엔트리에 정의되어있는 GRUB 과 같은 UEFI 어플리케이션을 구동한다. MBR 에 비해 복잡하지만, 더 다재다능한 방법이다. (MBR 은 MBR 을 찾고 부트로더를 찾고 부트로더 구동을 위한 파티션 검색으로 종료되지만.. UFEI 는 펌웨어,엔트리포인트,EFI 가 있는 파티션, UEFI 어플리케이션을 찾고 구동시켜야하니.. ) 


3-2. 두번째 단계

두번째 부트로더는 /boot 경로에 존재한다. 어떤 OS 를 실행시킬 것인지 선택하게하는 스플래쉬 스크린이 출력되고, OS 를 선택한 후에 이 운영 체제를 RAM 에 로드하여 제어를 넘긴다.

리눅스의 경우 커널 이미지를 로드하는데, 거의 항상 압축되어 있으므로 커널이 처음으로 하는 작업은 자기 스스로 압축을 푸는일이다. 

이 후에 하드웨어 시스템을 분석하고 장치드라이버를 초기화한다. 


4. 리눅스 커널

부트로더는 커널과 램기반의 파일시스템을 메모리에 올려서 커널에서 직접적으로 다룰수 있도록 한다.

커널이 RAM 에 올려지고 나면, 컴퓨터의 메모리와 시스템에 연결된 모든 하드웨어를 초기화하고 설정한다. 이 작업은 처리기(processors) 와, 입출력 서브 시스템, 저장장치등을 포함한다. 커널은 또한 유저 공간의 프로그램에 대한 몇몇의 필요한 프로그램도 로드한다.


5. 초반 램 디스크

initramfs 파일시스템 이미지는 루트파일시스템 마운트를 위한 모든 프로그램과 바이너리 파일들을 포함하고있다. 예를 들면, 파일시스템에서 요구하는 커널 기능이나, 어떤 장치가 현재 연결되어 있고 드라이버의 위치를 확인하여 메모리에 로드하는 기능을 관할하는 udev(User Device) 를 제공하는 복잡한 장치 제어기를 위한 디바이스 드라이버와 같은 것이다. 루트 파일시스템을 찾으면 에러는 없는지 확인후 로드한다. 


마운트 프로그램은 운영체제에게 파일시스템이 사용할 수 있도록 준비가 되었음을 알리고, 마운트 지점인 최상위 계층구조를 운영체제에 연결한다. 만약 작업이 성공적으로 종료되면, initramfs 는 신속하게 램에서 제거되고, 루트 파일시스템의 초기화 프로그램이 (/sbin/init) 실행된다. 


이 초기화는 최종 루트 파일시스템위에서 마운팅과 피봇팅을 처리한다. 만약 복잡한 저장장치에 접근하기 위해 특별한 하드웨어 드라이버가  필요하다면, inittramfs 이미지에 존재해야한다. 


6. /sbin/init 과 서비스들

일단 커널이 모든 하드웨어를 준비하고 루트 파일시스템을 마운트하면, 커널은 /sbin/init 프로그램을 실행한다. 이게 초기화 작업을 수행하며, 시스템의 구동을 위한 다른 프로세스들을 실행한다. 대부분의 다른 프로세스들은 그들의 근원,궁극적으로 init을 추적한다; 커널프로세스는 예외인데, 내부의 운영체제 세부 사항을 관리한다.


전통적으로 이 과정은 System V Unix 로부터 내려온 컨벤션을 따르는데, 서비스들을 시작하고 종료하는 스크립트의 집합을 보유하고 있는 runlevles 의 연속을 통해 시스템을 전개 (passing) 한다.  각각의 런레벨은 시스템을 구동하는 다른 모드를 지원한다. 각각의 런레벨 내부에서, 개별의 서비스들이 시작되도록 설정될 수 있고, 구동되고 있다면 종료되도록 설정될수 있다. 더 새로운 배포들에는 System V standard 는 제거되고, 이 작업은 호환 목적으로 존재하는 편이다.


시스템을 시작하는 것과 함께 init 은 시스템 구동을 유지하는 것과 깨끗하게 종료하는 것에도 책임이 있다. 커널이 아닌 프로세스들의 "최후의 매니저"로서 동작하며, 필요한경우 깔끔하게 정리하고, 유저 로그인 서비스가 필요할때 이를 재시작한다.



7. 텍스트모드 로그인

부팅 과정의 끝부분에서, init 은 많은 텍스트모드 로그인 프롬프트 (getty 프로그램을 통해)를 실행한다. 유저네임을 타이핑하고, 패스워드를 입력하여, 마침내 커맨드 쉘을 맞이한다.


보통, 기본 커맨드 쉘은 bash (the GNU Bourne Again Shell) 이지만, 많은 진일보한 커맨드 쉘들이 사용가능하다. 쉘은 텍스트 프롬프트를 프린트하여 커맨드를 입력받을 준비가 되었음을 알려 유저가 명령어와 엔터키를 입력하면 커맨드가 실행되도록 하고 명령이 수행된 후 다시 다른 프롬프트를 출력한다. 


Command Line Operation 챕터에서 배우게 될 것이지만, 터미널은 ALT + function 키로 띄울 수 있으며 커맨트 쉘을 실행하게 된다. 대부분의 배포들은 6개의 텍스트 터미널을 제공한다. F1 이나 F2 를 통해 실행시킬수 있는 그래픽 터미널이 있는데, 그래픽 환경이 실행된 후에, 텍스트 콘솔로 전환할 수 있는데 CTRL-Alt+ 적절한 펑션키 (F7 이나 F1) 를 통해 가능하다. 이후에 잠깐 보게 될 것 이지만, startx 커맨트를 그래피컬 데스크톱을 실행하거나 재시작하기 위해 순수 텍스트모드에서 실행할 수 있다. 


8. X Window System

일반적으로 리눅스 데스크탑 시스템, X Windows System 은 부트 과정의 가장 마지막에 로드된다. 

디스플레이 매니저라 지칭되는 서비스는 디스플레이가 제공되는지를 추적하며, X Server (그래픽 서비스를 X client 라고 불리는 어플리케이션들에게 제공하기 때문에 이렇게 불린다) 를 로드한다. 이 디스플레이 매니저는 또한 그래픽 로그인을 제공하고 유저가 로그인한 후에 적절한 데스크톱 환경을 시작한다. 


9. X Window System 에 대한 추가

데스크톱 환경은 세션매니저를 포함하는데, 이것은 그래픽 세션의 컴포넌트를 유지하고 윈도우의 움직임을 관할 하는 윈도우 매니저, 윈도우 타이틀바, 그리고 control 들을 제공한다.


유틸리티의 집합인 세션매니저, 윈도우 매니저, 이것들이 하나의 단위로 섞여 함께 매끄러운 데스크톱 환경을 제공할수 있다.


만약 디스플레이 매니저가 기본 런레벨의 기본으로 실행된 것이 아니라면, X 를 텍스트모드 콘솔의 로그인후에 startx 명령어를 통해 실행할 수 있다.