1. 부트 매니저
[1] 부트 매니저의 개요
1) 부트매너저의 정의
- 부트 매니저는 보조기억장치에 위치한 운영체제를 주기억장치로 로드하기 위한 프로그램
- 부트로더라고도 함
2)부트 매니저의 동작원리
- 시스템 켜질때 BIOS가 디스크의 첫번째섹터(0번섹터)인 부트섹터에서 512바이트의 MBR(Master Boot Record)을 읽는다. MBR은 크기가 제한되기 때문에 IPL(Initial Program Loader)이라 불리는 부트로더의 일부가 먼저 실행된다. IPL은 파티션 테이블을 검사하여 부트로더의 나머지 코드의 위치를 알아내 실행
- 리눅스 대표 부트 매니저 프로그램은 LILO(Linux Loader), GRUB(Grand Unified BootLoader),GRUB2가있다
[2] 부트 매니저의 종류
1) LILI(Linux Loader)
- 가장 오래된 부트로더, 리눅스 커뮤니티의 지속적인 지원받고있음
- LILO 설정은 /etc/lilo.conf 설정파일에서 함
- 설정 파일변경 후 LILO stage 1 부트로더를 MBR로 다시 쓰기 위해 lilo명령을 반드시 수행해야함
2) GRUB(Grand Unified Boot Loader) = GRUB Legacy
- GNU 프로젝트에서 만든 부트로더
- LILO와 달리 대화형 명령어 인터페이스 제공, 네트워크 부팅제공
- 설정파일은 배포판마다 다르며 CentOS6의 경우 /boot/grub/grub.conf
- LILO와 달리 GRUB는 설정파일 변경후 특별한 조치없이 적용
3) GRUB2
- 기존 GRUB한계를 해결하기 위해 GRUB2를 완전히 다시 작성
- 기존 GRUB를 GRUB Legacy라고 함
- GRUB Legacy는 x86 및 x86-64 아케텍처만을 지원했지만 GRUB2는 이뿐 아니라 PowerPC,SPARC(Scalable Process Architecture)와 같은 다양한 아키텍처를 지원
- 다양한 펌웨어 유형 지원
- GRUB는 공식적으로 MBR을 통한 부트로더 동작만을 지원하고 GPT(GUID Partition Table)을 비공식적으로만 지원하고 있었으나, GRUB2는 정식으로 GPT를 지원
- GRUB2는 RAID 및 LVM(Logical Volume Manager)을 지원한다
- Apple사의 HFS+(Hierachical File System), 마이크로소프트의 NTFS 파일시스템, 썬(Sun)의 ZFS등 다른 벤더의 파일시스템도 지원
- 리눅스, FreeBSD, NetBSD, OpenBSD와 같은 운영체제뿐 아니라 macOS 및 Darwin커널과 같은 XNU도 부팅가능
- GRUB2의 환경설정 파일의 기본경로는 GRUB Legacy와 마찬가지로 /boot/grub/grub.cfg나 일부 리눅스 배포판은 GRUB Legacy와 동시 설치가 가능하도록 /boot/grub2/grub.cfg를 사용하고 있다
- centos7부터 GRUB2사용
[3] GRUB2 사용해보기
1) GRUB2 초기화면
- esc 카운트다운 멈춤 안누르면 선택된 메뉴 항목으로 부팅
- e키 : 선택한 항목 편집
- c키 : 명령 줄 모드로 진입
2) GRUB2 편집화면
- 'e' 키를 누르면 선택한 메뉴항목에 대한 환경설정화면이 표시되며 수정할 수 있다
- 이 환경 설정은 /boot/grub2/grub.cfg 의 정의된 내용과 동일
- 변경을 원하는 항목에 대해 수정 후 Ctrl - x 를 누르면 수정된 내용으로 부팅 시작
- 이 화면에서 수정하는게 /boot/grub2/grub.cfg 파일에 저장되는것은 아님. 즉 영구적용이 아니라 임시수정
3) GRUB2 환경설정 파일
# /boot/grub/grub.cfg 파일에 저장되는 기본 설정
# 기본 제목과 제목 색상 설정
set menu_color_normal=white/black
set menu_color_highlight=black/light-gray
set menu_font=unicode
# 부트 로더 메뉴 제목
set default=0
set timeout=5
menuentry "Ubuntu" {
set root=(hd0,1)
linux /vmlinuz root=/dev/sda1 ro quiet splash
initrd /initrd.img
}
# 다른 운영 체제를 부팅하기 위한 추가 메뉴 항목
menuentry "Windows" {
set root=(hd0,2)
chainloader +1
}
- GRUB2의 환경설정 파일은 /boot/grub2/grub.cfg
- 또한 /etc/grub2.cfg파일이 해당 파일로 심볼릭 링크도되어있다
- 이 파일은 직접 수정하면 안되고 grub2-mkconfig 명령어를 사용해아함
- 이 명령어는 /etc/grub.d 에 있는 스크립트로 작성된 템플릿 파일들과 /etc/default/grub에 정의된 GRUB2메뉴를 위한 설정값을 가지고 /boot/grub2/grub.cfg 파일을 만들어 낸다
- set : 각 옵션에 대한 값을 설정할 수 있다
- timeout : 메뉴 항목을 선택하기를 기다리는 시간
- default : 기본으로 부팅할 메뉴 항목을 가리킴
- 나머지는 menuentry 가 연속되며 중괄호로 구분
- root : 루트 디바이스 위치를 설정
- linux : 커널 이미지 경로를 설정
- initrd : 램디스크 이미지에대한 경로설정
4) /etc/default/grub 파일
- grub.cfg가 생성될 때 메뉴항목에 대한 설정들은 /etc/default/grub 파일의 내용을 취하여 생성
- /etc/sysconfig/grub 파일은 /etc/defaut/grub 파일에 대한 심볼링 링크
- 아래는 /etc/defaut/grub 파일의 내용이며 각 항목 수정시 grub2-mkconfig 명령을 사용하여 grub.cfg파일을 갱생해야 한다
$sudo cat /etc/default/grub
[sudo] password for francis:
GRUB_TIMEOUT=5
GRUB_DISTRIBUTOR="$(sed 's, release .*$..g' /etc/system-release)"
GRUB_DEFAULT=saved
GRUB_DISABLE_SUBMENU=true
GRUB_TERMINAL_OUTPUT="console"
GRUB_CMDLINE_LINUX="crashkernel=auto spectre_v2=retpoline rd.lvm.lv=centos/root rd.lvm.lv=centos/swaprhgb quiet"
GRUB_DISABLE_RECOVERY="true"
- GRUB_TIMEOUT : 메뉴항목이 표시된 후 사용자의 입력을 기다리는 시간
- GRUB_DISTRIBUTOR : 메뉴 항목의 제목
- GRUB_DEFAULT : 부팅시 기본으로 선택할 항목. 0이 첫번째 1 두번째
- GRUB_DISABLE_SUBMENU : 메뉴 항목 하위에 서브메뉴로 표시할 것인지 여부를 결정
- GRUB_CMDLINE_LINUX : 커널 부트 파라미터를 설정
- GRUB_DISABLE_RECOVERY : true일 경우 복구를 위한 메뉴 항목이 기본으로 보여진다
2. 주요 디렉터리 구조
[1] 리눅스 파일 시스템 표준(FHS : File system Hierachy Standard)
1) 리눅스 파일 시스템 표준은 BSD 파일 시스템 계층 구조 기반의 리눅스 디렉터리 구조 표준이다. 이 표준은 비영리 조직인 리눅스 재단이 유지 및 관리를 수행하고 잇다.
[2] 리눅스의 주요 디렉터리
/ : 리눅스 파일 시스템의 최상이 디렉터리
/bin/ : 모든 사용자가 사용할 수 있는 주요 명령어들이 위치.ls,cp,mkdir,mv,rm,cat 등등
/boot/ : 부팅에 필요한 파일이 위치하는 디렉토리. 부트로더인 grub 관련 파일도 이 디렉터리 이하에 위치
/dev/ : 하드디스크,CPU,네트워크,입출력장치 등 디바이스 파일이 존재하는 디렉터리
/etc/ : 보통 Editable Text Configuration 또는 Extended Tool Chest와 같은 약어로 해석이 되고잇다. 이 디렉터리에는 시스템 환경설정 파일과 시스템 초기화 시 수행되는 여러 스크립트 파일들이 위치. init 프로세스가 수행하는 환경설정 파일도 이 위치에 있다.
/home/ : 사용자 전용 홈디렉터리. 이 디렉터리 이하에는 각 사용자 계정으로 폴더가 생성되고 그 이하에 사용자별 데이터가 저장된다
/lib/ : 시스템에 설치되어 있는 각종 라이브러리가 저장. 특히 /lib/modules에는 설치된 커널의 모듈이 위치
/media/ : CD-ROM이나 이동식 디스크가 시스템에 마운트 시 이 디렉터리 사용
/mnt/ : 다양한 디바이스가 마운트할 때 사용하는 임시 디렉터리
/opt/ : 추가 애플리케이션 소프트웨어 패키지
/proc/ : 메모리에 존재하는 모든 프로세스들은 파일 형태로 매핑된다. 디스크상에 실재 존재하는 것이 아니라 가상 파일 시스템으로 구현되어 있다. 그래서 이 proc 디렉터리를 통해 프로세스의 상태 정보, 하드웨어 정보, 기타 시스템 정보를 확인할 수 있다.
/root/ : 루트 사용자의 홈 디렉터리
/sbin/ : 시스템 종료 명령어인 shutdown, 네트워크 인터페이스 관련 명령어인 ifconfig, 시스템 점검과 복구 등 root가 사용하는 시스템 관리 명령어가 포함. Sbin 은 'system Binary'의 약자
/tmp/ : /var/tmp 와 같은 공용 디렉터리로서 퍼미션은 1777이고 sticky bit가 설정되어 있다. 각종 프로그램들이 임시 파일을 생성하는 디렉터리이다.
/usr/ : 사용자들이 사용하기 위해 설치한 주요 명령어들이 위치한다.
/usr/bin/ : 대부분의 사용자 명령어를 포함한다. 가령 Perl과 같은 명령어도 이곳에 위치한다.
/usr/include/ : C,C++ 등 프로그래밍 언어가 사용하는 헤더 파일이 위치한다
/usr/lib/ : /usr/bin/과 /usr/sbin/ 에 있는 바이너리에 링크하기 위한 라이브러리이다.
/usr/sbin/ : 주로 시스템 관리자가 사용하는 명령어들이나 상대적으로 중하지 않은 명령어들이 위치
/usr/src/ : 다양한 바이너리의 소스코드가 위치. 리눅스 커널의 소스코드도 이곳에 위치
/var/ : 로그, 스풀 파일 등 임시로 생성되거나 상황에 따라 생성되거나 삭제될 수 있는 데이터가 보관.
/sys/ : 핫플러그(hot plug) 장치를 위한 sysfs 가상 파일 시스템을 통해 장치정보를 제공. 프로세스를 위한 정보를 제공하는 /proc 와 유사한 방식
/run/ : 부팅 이후 시스템에 실행중인 프로세스 또는 로그인한 사용자와 같은 런타임 데이터를 포함하고 있는 디렉터리. /var/run은 /run에 대한 심볼릭 링크이다.
3. 부팅과 셧다운
[1] 부팅의 개요
1) 부팅이란 컴터 전원 켜진후 사용자가 시스템 사용할수있도록 운영체제 기동하는 절차
2) BIOS가 MBR로 부터 부트로더를 실행 -> 부트로더는 지정된 위치에서 커널을 메모리에 읽어 들인후 초기화 프로세스 실행->리눅스의 경우 사용자가 지정한 실행레벨에 따라 지정된 스크립트를 수행하여 운영체제의 나머지 초기화를 완료
[2] 부팅의 상세 절차
1) 시스템 시작 및 하드웨어 초기화
- BIOS는 컴퓨터 메인보드의 ROM영역에 저정된 프로그램으로 시스템켜면 가장먼저실행
- 컴퓨터 하드웨어 인식과 각 장치들의 사용을 위한 준비를 수행하는 등 POST(Power On Self Test)수행
2) 1단계 부트로더
- 하드디스크의 0번 섹터를 MBR이라고 부름. 운영체제 로드를 위한 1단계 부트로더인 boot.img 가 위치
- 2단계 부트로더는 파일시스템상에 위치.
- 하지만 0번 섹터는 512바이트로 공간부족이라
- 1단계 부트로더가 파일 시스템을 해석할 수 있는 기능을 담기에는 공간이 부족.
- 이에 파일시스템을 해석할수 있는 기능을 가진 중간 단계인 1.5단계 부트로더(core.img)가 필요
- boot.img에서는 1.5단계 부트로더인 core.img로 점프하는 역할까지만 수행
- 1.5단계 부트로더는 0번 섹터 이후, 다음 파티션 이전의 공간에 위치
- 다음 파티션은 63번 섹터에 위치하므로 62개의 섹터공간에 걸쳐 1.5단계 부트로더가 위치할 수 있다.
- 1.5단계 부트로더는 이 공간을 활용해 ext, FAT, NTFS 와 같은 파일 시스템 드라이버를 포함할수있다
3) 2단계 부트로더
- 1.5단계 부트로더인 core.img는 2단계 부트로더를 로드하고, 2단계 부트로더는 파일시스템상에 위치
- GRUB legacy 및 GRUB2는 grub.conf의 설정에따라 선택할 수 있는 운영체제 목록을 표시
- 사용자 운영체제를 선택하면 해당 운영체제를 위한 커널을 메모리에 로드하고 해당 커널에게 제어권을 전달
4) 커널
- 하드웨어와 소프트웨어를 주담당하는 핵심 모듈
- 한번 메모리(RAM)에 로드되면 시스템이 리부팅하거나 종료할때까지 상주
- GRUB으로 부터 제어권을 이어받은 커널은 /sbin/init의 프로그램을 실행한다.
5) INIT 프로세스(CentOS 6)
- INIT 프로세스는 부팅을 위해 필요한 초기화 작업을 실제로 수행
- INIT 프로세스는 가장 먼저 모든 시스템의 프로퍼티, 하드웨어, 디스플레이, SELinux, 커널모듈, 파일시스템 마운트 등을 체크하기 위해 /etc/rc.d/rc.sysinit 스크립트를 수행
- INIT 프로세스는 /etc/inittab 파일을 읽어 실행레벨을 확인하고 그에 맞는 스트립트를 실행
- 실행레벨이 5인 경우 /etc/rc5.d 디렉터리에 위치한 스크립트가 실행
- 실행 레벨과 관련된 스크립트가 모두 수행되고 나면 INIT프로세스는 /etc/rc.local에 정의된 프로세스를 ㅁ마지막으로 실행한다
레벨 | 설명 |
0 | 시스템의 종료를 의미. 실행레벨을0으로 설정하면 시스템 종료 |
1 | 단일 사용자모드 또는 시스템 복원모드라고 함. Root 권한 셸을 얻을 수 있음 |
2 | 다중 사용자 모드. 네트워크 기능을 제공하지 않는 텍스트 기반 유저 모드 |
3 | 네트워크 기능을 제공하는 다중사용자모드 |
4 | 현재 사용되고 있지 않은 모드 |
5 | X윈도우를 사용하는 다중 사용자 모드 |
6 | 시스템을 재부팅할 때 사용하는 실행 레벨 |
6) systemd(CentOS 7)
- systemd 는 유닛(unit) 이라는 단위로 시스템 및 서비스를 제어하는 관리자
- 기존에는 /sbin/init 경로에 위치하는 System V 계열의 INIT 프로세스가 PID 1을 가졌지만 CentOS 7부터는 /sbin/init에 심볼링 링크가 걸려있는 /usr/lib/system/systemd 가 그 역할을 수행한다
- systemd는 부팅 시 여러 서비스 스크립트를 병렬로 실행할 수 있어 리눅스 부팅 시간을 단축할 수 있다. 단 서비스간의 의존성이 있는 경우 순차적으로 실행
- systemd는 기존의 System V의 init스크립트와 호환성을 가지지만 몇 옵션에서 제약이 존재
- systemd는 다양한 유닛을 제공하며 INIT 프로세스의 실행레벨의 개념에 대응하는 Target유닛에 대해 알아둘필요가있다. systemd는 부팅 시에 default.target 유닛에 심볼릭 링크되어있는 Target 유닛을 실행한다. 만약 default.target 유닛이 multi-user.target 으로 심볼릭 링크되어있다면 부팅 시 multi-user.target과 연관된 유닛들이 실행될 것이다.
- INIT 프로세스의 각 실행 레벨과 대응하는 Target 유닛을 표로 정리하였다
레벨` | Target 유닛 | |
Runlevel | Systemd Target | |
0 | runlevel0.target | poweroff.target |
1 | runlevel1.target | rescue.target |
2 | runlevel2.target | multi-user.target |
3 | runlevel3.target | multi-user.target |
4 | runlevel4.target | multi-user.target |
5 | runlevel5.target | graphical.target |
7) 사용자 프롬프트(user prompt)
- 모든 초기화가 오나료되면 실행 레벨에 따라 다르지만 X-Window가 표시되거나 terminal을 통해 사용자의 입력을 받을 준비가 완료된다
[3] 로그인과 로그아웃
1) 로그인
- 리눅스는 멀티유저를 지원하는 운영체제이기때문에 아이디와 패스워드를 통해 사용자를 식별하고 사용자가 간 실행환경을 독립적으로 제공
- INIT 프로세스 또는 Systemd 프로세스의 실행레벨에 따라 단일사용자모드, 멀티유저모드.X윈도우를 통한 멀티유저모드로 나눌수 있다
모드 | 실행레벨 | 내용 |
단일 사용자 모드 | 1 | 화면과 키보드를 통한 단일 사용자 로그인 가능 |
멀티 유터 모드(터미널) | 2,3 | 실행 레벨2 : 네트워크를 통한 로그인X 실행 레벨3 : 네트워크를 통한 로그인O |
멀티 유저 모드(X-윈도우) | 5 | X 디스플레이 매니저를 통해 구현되는 그래픽 화면을 통해 아이디와 패스워드 입력하여 로그인 가능 |
* 로그인 전후 메시지관련 파일
설정파일 | 표시시점 | 설명 |
/etc/issue | 로그인 전 | 로컬에서 접속 시도 시 해당 파일의 내용을 표시 |
/etc/issue.net | 로그인 전 | telnet이나 ssh와 같은 프로토콜을 통해 원격지에서 접속 시도시 해당 파일의 내용을 표시 |
/etc/motd | 로그인 후 | 로컬, 원격에 관계없이 로그인에 성공하면 해당 파일의 메시지를 사용자에게 표시 |
2) 로그아웃
- 로그인 후 시스템의 사용이 모두 종료되면 로그아웃을 해야함
- logout 명령어를 통해 로그아웃가능
- X-Windows에서 터미널을 실행하였을 경우 exit명령어를 사용하여 로그아웃할 수 있다. 또는 Ctrl+d 단축키를 통해 로그아웃 가능
*자동 로그아웃 설정
- /etc/profile 파일을 열어서 TMOUT에 초단위로 설정한다.아래는 10초로 설정하였다
# vi /etc/profile
# /etc/profile
TMOUT=10
- 설정이 반영되었는지 확인을 위해 logout하고 다시 login하거나 아래와 같이 source 명령을 통해 설정파일을 재로드할 수 있다
$ source /etc/profile
- 10초간 기다리면 자동으로 로그아웃된다
[4] 시스템 종료
1) X 윈도우 환경에서 셧다운하기
- 종료아이콘클릭
2) 시스템 종료방법
shutdown -h now
또는
halt
또는
poweroff
또는
init 0
3) 시스템을 재부팅하는 방법
shutdown -r now
또는
reboot
또는
init 6
4) 예약된 시간에 시스템을 종료하거나 재시작하는 방법
- 5분 뒤 종료 : shutdown -h +5
- 특정시간에 종료 : shutdown -h 10:00
- 5분 뒤 재부팅 : shutdown -r +5
- 취소는 shutdown -c
[5] GRUB 패스워드 설정 및 복구
1) GRUB Legacy 패스워드 설정
- 기본적인 방법은 패스워드를 생성하여 /boot/grub/grub.conf 에 password로 시작하는 환경설정 줄을 추가하는 것
- 패스워드 생성하는 방식은 3가지 있음
- 1. SHA-256 또는 SHA-512로 패스워드 생성하는것 (가장 안전)
- 2. MD5 방식. 해킹에 취약해 권장X
- 3. 패스워드의 해시를 생성하지 않고 그대로 사용하는 방법
- SHA-256 또는 SHA-512 알고리즘을 통해 패스워드의 해시 값을 생성하는 방법이다. 해시 생성은 grub-crypt 명령어를 사용하고 grub.conf에는 hiddenmenu 다음 줄에 password -- encrypted 뒤에 생성했던 해시값을 입력한다
- MD5 알고리즘을 통해 패스워드의 해시 값을 생성하는 방법이다. 해시 생성은 grub-md5-crypt 명령어를 사용하고 grub.conf에는 hiddenmenu 다음 줄에 password -md5 뒤에 생성했던 해시값을 입력한다
- 패스워드를 해시 값으로 지정하지 않고 평문으로 지정하면 grub.conf의 hiddenmenu 다음 줄에 옵션 없이 password 뒤에 원하는 비밀번호를 입력하면 된다
2) GRUB Legacy 패스워드 복구
- root 암호를 알고 있다면 부팅하여 /boot/grub/grub.conf의 password 줄을 삭제하면 된다.
- root 암호마저 잊어 버렸다면 설치 디스크를 통해 부팅을 해야한다. 부팅 후 나타나는 메뉴에서 Rescue installed system을 선택한다. 해당 메뉴 진입 시 기본 선택에서 네트워크는 No마운트는 Continue를 선택한다. 셸에서 /mnt/sysimage/boot/grub/grub.conf을 편집해 설정했던 password줄을 삭제하여 GRUB 패스워드를 제거한다.
[6] GRUB2 패스워드 설정 및 복구
1) GRUB2 패스워드 설정
- GRUB2의 패스워드 설정 또한 GRUB Legacy의 방식과 유사
- grub2-mkpasswd-pbkdf2 명령어를 사용하여 패스워드에 대한 해시를 생성
- /etc/grub.d/40_custom에 set superusers="root" 줄을 입력하고 다음 줄에 password_pbkdf2 root 줄 그리고 생성한 패스워드를 이어서 입력한다
- grub2-mkconfig 명령어를 통해 grub.cfg를 갱신한다. 잘 갱신되었는지 확인하려면 /boot/grub2/grub.cfg 파일을 열어 확인한다.
- 재부팅한 후 GRUB 메뉴에서 'e' 명령어를 통해 편집하고자 한다면 GRUB2는 username과 password를 요구할 것이다
- /etc/grub.d/40_custom 파일이 아닌 /etc/grub.d/00_header 파일을 수정할 수도 있지만 00_header파일은 GRUB 패스워드 설정 외에도 다양한 설정이 존재하므로 혼란을 피하기 위해 40_custom 파일을 사용하는 것이 좋다
- 암호화된 패스워드를 사용하지 않는 경우 password_pbkdf2대신 password를 사용하면 된다
2) GRUB2 패스워드 복구
- root 패스워드를 알고있는 경우 grub.conf에 설정하였던 항목 삭제
- GRUB2의 경우 grub2-mkconfig명령어를 통해 grub.conf파일을 갱신해주는 것만 잊이 않으면 됨!
- root 패스워드를 잃어버린 경우 일단 복구 시디로 부팅하여 나오는 메뉴 항목에서 "Troubleshooting" -> "Rescue a CentOS system" -> "1) Continue" 순으로 선택하면 GRUB2 환격설정 파일에 접근 가능한 셸로 진입할수있다.
- 그다음 /etc/grub.d/40_custom에서 GRUB2 패스워드 설정 부분을 제거하고 grub2-mkconfig 명령으로 갱신해주면됨
4.systemd 소개
[1] systemd의 개요
1) 정의
- systemd는 이전 버전의 리눅스에서 사용하였던 SysV init 시스템을 대체하기 위한 시스템 및 서비스를 위한 매니저 역할을 수행한다
- 레드햇사의 Lennart Poettering과 Kay Sievers가 처음 개발했고, LGPL 라이선스다
2) 특징
- 기존 SysV init 스크립트와 호환성을 유지하도록 설계
- 부팅시 시스템의 서비스들을 병렬로 시작할 수 있는 기능을 제공
- 데몬이 필요한 순간 실행하여 시스템 리로스를 절약할 수 있는 온디맨드 액티베이션기능제공
- 서비스간 의존성을 고려하여 서비스의 시작 순서를 제어기능 제공
- 시스템서비스, 소켓상 패킷의 수신대기, 실행 레벨등의 시스템 및 서비스와 관련된 정보를 유닛이라는 단위로 추상화하여 관리한다
[2] systemd의 구조
1) 유닛
- systemd는 시스템을 관리하기 위해 Service, Target, Automount, Device, Mount, Path, Scope, Slice, Snapshot, Socket, Swap, Timer 등 다양한 유닛을 제공하며 그 중 대표적인 유닛을 표로 정리하였다.
유닛 유형 | 확장자 | 설명 |
Service unit | .service | 시스템상에서 동작하는 서비스 또는 데몬과 연관된 유닛 |
Target unit | .target | 다수의 유닛을 하나의 그룹을 관리할 수 있는 유닛, 대표적인 예로 SysV Init에 존재하였던 실행 레벨(run level)을 Target 유닛으로 관리할 수 있다 |
Device unit | .device | 커널이 인식 가능한 장치와 연관된 유닛. 가령 특정 USB 장치가 연결될 때 특정 서비스 유닛을 실행할 수있다 |
Mount unit | .mount | 파일 시스템의 마운트 포인트를 나타내는 유닛 |
Path unit | .path | 파일 시스템의 파일과 디렉터리와 연관된 유닛 |
Socket unit | .socket | 프로세스 간 통신을 의미하는 IPC(inter-process communication)를 위해 사용하는 소켓과 연관된 유닛 |
Timer unit | .timer | systemd 타이머와 연관된 유닛 |
2) 유닛을 위한 파일 경로
- 각 경로에 동일한 유닛이 발견된다면 표상 아래에 위차한 경로의 유닛이 우선하게 된다
경로 | 설명 |
/usr/lib/systemd/system/ | RPM 패키지로 배포되어 설치된 유닛은 이 경로에 존재한다 |
/run/systemd/system/ | 실행시 생성된 유닛 파일이 위치하는 곳이며 /usr/lib/systemd/system/ 경로보다 이 경로에 위치한 유닛이 우선한다 |
/etc/systemd/system/ | systemctl enable 명령을 통해 생성된 유닛이 위차하는 경로이며 /run/systemd/system/ 경로보다 이 경로에 위치한 유닛이 우선한다 |
3) 유닛 파일의 구조
- 유닛 파일은 [Unit], [Unit type], [Install]와 같이 3개의 섹션으로 구성된다.
섹션 | 설명 |
[Unit] | 유닛 공통의 일반적인 사항을 포함하고있다. Description은 유닛에 대해 설명 Documentation은 유닛의 설명이 있는 웹경로(URIs)를 지정 After은 유닛이 시작할 순서를 정의 Requires는 유닛의 의존관계를 지정 Wants는 Requires보다는 약한 의존성을 지정할 수 있다 |
[Unit type] | 유닛 유형 마다의 특성을 기술한다. 예를 들어 Service 유닛은 [Service] 라는 섹션 이름을 갖는다 [Service] 섹션의 ExecStart는 유닛이 실행할 때 실행할 명령어나 스트립트를 지정한다. ExecStop은 유닛이 중지할 때 실행할 명령어나 스트립트를 지정한다 |
[Install] | systemctl enable 또는 disable 명령어로 유닛을 제어할 때 필요한 정보를 담고 있다. RequireBy는 해당 유닛에 의존하고 있는 유닛의 목록을 지정한다 WantedBy는 유닛에 약한 의존관계를 갖고 있는 목록을 지정한다 |
[3] systemd의 주요 명령어
1) 서비스 관리
기능 | 명령어 |
서비스 시작 | systemctl start name.service |
서비스 중지 | systemctl stop name.service |
서비스 재시작 | systemctl restart name.service |
서비스 실행 중인경우만 재시작 | systemctl try-restart name.service |
서비스 설정 갱신 | systemctl reload name.service |
서비스 상태 확인 | systemctl status name.service |
서비스 목록 확인 | systemctl list-units --type service --all |
2) 타겟 유닛
기능 | 명령어 |
기본 타겟 확인 | systemctl get-default |
현재 로드된 모든 타겟 확인 | systemctl list-units --type target |
기본 타겟 변경 | systemctl set-default name.target |
현재 타겟 변경 | systemctl isolate name.target |
복구 모드 변경 | systemctl rescue |
응급 모드 변경 | systemctl emergency |
3) 전원 관리
기능 | 명령어 |
시스템 끄기(halt) | systemctl halt |
시스템 전원 끄기(power off) | systemctl poweroff |
시스템 재시작 | systemctl reboot |
시스템을 서스펜드하기 | systemctl suspend |
시세템을 하이버네이트하기 | systemctl hibernate |
시스템을 하이버네이트 및 서스펜드하기 | systemctl hybrid-sleep |
4) 원격제어
- 원격 시스템에 실행 중인 sshd 서비스에게 명령어를 전달하여 원격 세스템의 서비스를 제어 할수 있다.
- systemctl 의 --host또는 -H 옵션을 사용하여 원격지의 sshd서비스에 연결할 수있다
systemctl -H root@linuxserver.example.com status httpd.service
5. 파일 시스템의 이해
[1] 파일 시스템의 개요
1) 파일 시스템이란 디스크에 사용자의 데이터를 효율적으로 저장하기위한 파일과 디렉터리를 조직화한 체계를 말함
2) 포맷은 디스크를 일정한 크기로 분할, 주소를설정 -> 사용자자료 조직적으로 보관
3) 데이터는 파일 단위로 관리
4) 저장할때는 레코드 단위 혹은 블록단위로 저장
5) 입출력오류시 복구기능 제공
6) 디스크 입출력은 메모리에 비해 속도가 느림 -> 캐시기능을 제공하여 디스크의 입출력 최소화
[2] 리눅스 파일 시스템의 구조
1) ext2의 파일 시스템 개요
- ext3와 ext4는 모두 ext2를 근간으로 발전
- ext2파일 시스템의 구조를 이해하면 리눅스 파일 시스템이 어떻게 파일을 조직화하고 관리하는지 이해하는데 도움될것임
2) 부트 섹터와 블록 그룹
- ext2 파일 시스템은 부트 섹터와 그에 뒤따르는 여러 개의 블록 그룹들로 구성
- 블록 그룹은 모두 같은 블록개수를 가짐
- 단 마지막 블록 그룹은 예외
3) 블록 그룹
- 블록 그룹은 여러개의 블록으로 구성.
- 한 파일이 여러 블록에 나누어서 저장되어야 하는경우 단편화를 최소화하기 위해 동일 블록 그룹에 위치하려고 스케줄링한다
- 블록 그룹은 슈퍼블록, 그룹 디스크립터 테이벌, 블록 비트맵, 아이노드, 그리고 실제 사용자의 데이터를 담고 있는 블록으로 구성
- 슈퍼블록과 그릅 디스크립터 테이블은 0번 블록 그룹에만 포함되어도 기능상 문제가 없으나 손상이 되면 파일 시스템 접근이 불가능 하므로 다른 블록 그룹에도 사보인 보관되어 있다
- 블록 비트맵은 그룹 내의 각 블록이 할당되어 있는지 여부를 비트로 표현한다.즉 4KB크기의 블록이라면 한 바이트는 8개의 비트로 구성되므로 23,768개의 블록 할당 여부를 표현할 수 있다.
4) 슈퍼 블록
- 파일 시스템의 전체내용을 담고있는 블록
- 1KB만 사용. 4KB의 블록을 사용하더라도 1KB만 사용하고 나머지 3KB는 비워둠
- 블록의 크기, 총 블록의 개수, 블록 그룹의 개수, 아이노드의 개수, 그룹 내 블록의 개수, 그룹 내 아이노드의 개수 등에 대한 정보가 포함되어있다
5) 그룹 디스크립터 테이블
- 블록 그룹에 대한 정보를 담고 있으며 32byte크기인 그룹 디스크립터의 목록이다. 만약 블록 크기가 1KB 라면 총 32개의 그룹 디스크립터가 포함될 수 있따
- 그룹 디스크립터 테이블은 블록 비트맵의 블록번호, 아이노드 비트맵의 블록번호, 첫 번째 노드 테이블의 블록 번호, 그룹 안에 있는 빈 블록수, 그룹안에 있는 아이노드수, 그룹 안에 잇는 빈 디렉터리 수이다.
6) 블록 비트맵
- 블록 비트맵은 블록의 할당 여부를 비트로 표현
- 각비트에 해당하는 블록이 사용중이면 1
- 사용X면 0
7) 아이노드 비트맵
- 아이노드의 할당 여부를 비트로 나타냄
8) 아이노드 테이블
- 연속된 블록으로 구성. 각 블록은 미리 정의된 아이노드 개수를 포함
- 아이노드의 첫 번째 블록의 번호를 그룹 디스크립터 테이블에 저장한다
- 모든 아이노드의 크기는 128바이트로 동일
- 예를들어 아이노드 테이블 블록이 1024byte라면 아이노드를 8개 포함 할 수 있다
9) 아이노드
- 아이노드는 실제 파일과 디렉터리의 데이터 위치를 알고 있는 자료구조이다
- 아이노드는 Inode Number, 파일모드, 하드링크 수, 소유자 ID, 파일 크기, 마지막 접근, 마지막 수정, Inode 수정, 데이터 블록 수의 정보를 가지고 있다.
- 모든 파일과 디렉터리는 각 1개의 아이노드를 가지고 있고 고유한 주소를 갖는다
- 아이노드의 주소를 알고 있다면 해당 아이노드가 가리키는 블록 그룹을 찾아갈 수 있다.
- 아이노드 1번은 슈퍼블록, 2번은 루트 디렉터리등 10번까지 예약이 되어 있다.
10) Ext2 내부는 15개의 포인터가 있는 구조
- 1~12번 : 직접블록
- 13 : 간접블록
- 14 : 이중간접블록
- 15~ : 삼중간접블록
[3] 리눅스 로컬 파일 시스템
1) ext
- minix 파일 시스템을 개선하기 위해 레미카드는 최대 2기가의 파티션과 255까지의 파일명을 지원하는 ext 파일 시스템을 개발
- 파일 접근에 대한 타임스탬프 기능, 아이노드 수정 기능의 부재와 조각화 이슈가 있었다
2) ext2
- ext의 한계를 극복하기 위해 만들어진 파일 시스템
- 타임스탬프 기능, 아이노드 수정기능, 쓰면 쓸수록 느려지는 조각화 이슈를 해결
- 파일 시스템에 데이터를 쓰는 동안 전원이 끊어지면 데이터가 제대로 저장되지 않는 문제가 있다. 문제가 발생하면 관리자는 fsck 명령어를 사용하여 복구해야 하는데, 시간이 오래 걸렸다.
- 파일 시스템의 크기는 블록 단위에 따라 2TiB~32TiB이다
- 파일 크기도 블록 단위에 따라 16GiB~2TiB이다
3) ext3
- 커널 2.4.15 버전부터 포함된 리눅스의 대표 저널링 파일 시스템이다
- 파일 시스템에 데이터를 쓰는 동안 전원이 끊어지더라도 복구 할 수 있는 기능을 제공하기 위해 로그를 통해 파일 시스템을 복구하는 저널링 기술을 채용
- 저널링에는 저널모드, 순서모드, 쓰기 저장 모드가 있다
- 온라인 파일 시스템 증대, 큰 디렉터리를 위한 HTree 인덱싱 기능, ACL을 통한 접근 제어를 제공
- 단점으로는 온라인 조각모음 프로그램이 없다
- ext2와 마찬가지로 최대 파일 크기는 16GiB~2TiB이고 최대 파일 시스템의 크기는 2TiB~ 32TiB이다
4) ext4
- 48비트 블록 주소 지정 -> 1EiB까지의 디스크 볼륨과 16TiB가지의 파일을 지원
- Extents방식 사용
- Extents방식은 물리적으로 연속된 블록들의 묶음 -> 하나의 엔트리로 여러블록을 가리킬수있음
- ex2,ext3 -> ext4방식으로 마운트 가능
- Extents ext4 -> ex3 방식 마운트X
- 파일 시스템 손상 가능성을 줄여주는 저널 체크섬 기능 제공
5) btrFS
- 크리스 메이슨이 개발한 B-Tree 파일 시스템
- 전체 파일 시스템이 아닌 특정파일, 볼륨, 하위 볼륨의 스냅샷 찍기 기능을 제공
- 저렴한 디스크의 RAID를 제공
- 역참조는 파일 시스템 개체에 I/O 오류를 매핑
- 자동 압축 기능 제공
- 데이터 및 메타 데이터의 체크섬을 제공
6) ZFS
- 유닉스의 파일 시스템을 대체하기 위해 SUN에서 개발한 파일 시스템으로 Solaris10 에서 소개
- 단순한 파일 시스템을 넘어 볼륨 매니저 역할까지 수행
7) Reiserfs
- 독일의 한스 라이저가 개발한 저널링 파일 시스템
- 커널 2.4.1에 포함
8) XFS
- 1993년 실리콘 그래픽스가 만든 고성능 64비트 저널링 파일 시스템으로 커널 2.4.20에 포함
- XFS는 64비트 파일 시스템이며 최대 파일 시스템의 크기는 8EiB -1이다
- 하지만32비트 리눅스 시스템의 경우 파일과 파일 시스템의 최대 크기를 모두 16TiB로 제한하고있다
- Extents 기반 할당을 사용하며 조각화를 줄이면서 성능 향상을 위한 사전 할당 및 지연할당 등과 같은 다양한 할당 방법을 제공
- 빠른 복구를 가능하게 하는 메타데이터 저널링을 제공
- 마운트가 활성화되어 있는 상태에서도 조각 모음이 가능하고 볼륨의 확장이 가능
- XFS는 b-트리 알고리즘을 사용하여 모든 사용자 데이터 및 메타데이터를 인덱스하여 우수한 I/O 확장성 제공
9) JFS
- IBM에 의해 개발된 64bit 저널링 파일 시스템으로 커널 2.4.24에 포함
[4] 클러스터 파일 시스템
1) Raw Partitions
- 파일 시스템이 설정되어 있지 않은 상태를 뜻함
- 운영체제의 버퍼캐시를 사용하지 않으므로 고성능의 입출력이 가능
- 파일 시스템을 통하는 오버헤드가 없다
- 파일 시스템을 이용하지 않기 때문에 숙력된 관리자의 관리가 필요
2) Oracle Cluster FileSystem(OCFS)
- Raw Partion의 다루기 어려운 문제를 해결하면서 RAC(Real Application Cluster)의 사용 목적을 위해 설계된 파일 시스템이다.
- Raw Partition 보다 단지 2~5% 정도 속도가 느린 것으로 알려져 있다
- OCPS의 다음 버전인 OCFS2는 POSIX를 호환하는 범용 클러스터 파일 시스템으로 개발되었다
[5] 기타 리눅스 파일 시스템
1) minix
- 1987년 앤드류 태넌바움이 교육목적으로 개발
- minix파일 시스템이 포함되어 있었다
- 토발즈도 초기 리눅스 개발시 MINIX를 파일 시스템으로 채용했었다
- 파티션 사이즈 64MB 제한이 있고 파일 이름도 14자까지 지원
- 단일 타임스탬프를 사용
2) xiafs
- Minix 파일 시스템의 기초가 되었고 프랭스 시아가 개발한 리눅스 커널을 위한파일 시스템이다
3) vfat
- 마이크로소프트의 FAT32 파일 시스템 호환을 목적으로 개발한 파일 시스템이다
4) isofs
- ISO 기준을 따르는 표준 CD-ROM 파일 시스템이다
5) nfs
- 네트워크상에서 파일 시스템을 공유하기 위한 파일 시스템이다
6) proc
- 프로세스 등 커널의 정보를 표현하는 리눅스의 가상 파일 시스템이다
'서버&백엔드 > 🐧 Linux' 카테고리의 다른 글
[Kali Linux] SSH를 통해 원격으로 리눅스서버 접속 (0) | 2023.07.15 |
---|---|
[리눅스마스터 1급] X 윈도우 (1) | 2023.07.09 |
[리눅스마스터 1급] 리눅스와 하드웨어 (0) | 2023.06.29 |
[리눅스마스터 1급] 리눅스의 기초 (0) | 2023.06.28 |
[리눅스마스터 1급] 운영체제의 개요 (0) | 2023.06.26 |