0. 디스크 관리
LVM
Logical Volume Manager
Linux 저장공간을 효율적이고 유연하게 관리하기 위한 kernel 기능
LVM vs. 기존 방식
LVM 장점
- 유연한 용량 조절
- 크기 조절을 위한 storage pool
- 편의에 따른 장치 이름 지정
- disk striping, mirror volume 등 제공
LVM 구성
PV (Physical Volume)
- 물리적 볼륨, 실제 디스크 장치를 분할한 파티션된 상태
- 일정한 크기의 PE (Physical extent) 들로 구성
PE (Physical extent)
- PV를 구성하는 일정한 크기 블록
- 보통 1 PE는 4 MB에 해당
- PE와 LE는 1:1 대응
VG (Volume Group)
- PV들이 모여서 생성되는 단위
- 사용자는 VG를 원하는 크기로 쪼개서 LV로 만들어 사용
LV (Logical Volume)
- 사용자가 최종적으로 사용하는 단위
- VG에서 필요한 크기로 할당받아 LV 생성
최종적으로 mount하는 대상은 LV
LVM 생성과정
- 기존 파일 시스템 종류 변경 -> fdisk 명령
- PV 생성 -> pvcreate
- VG 생성 -> vgcreate
- VG 활성화 -> vgchange -a y 명령
- LV 생성 -> lvcreate
- LV에 파일 시스템 생성 -> mkfs 명령
- LV 마운트 -> mount 명령
LVM 적용을 위한 패키지 설치 필요
lvm2 : LVM 패키지
설치 명령어: sudo apt-get install lvm2
1. Linux 부팅 과정 이해
booting
- 초기 컴퓨터 전원 on을 하는 시점에서 메모리 내용은 아무것도 X
- 실제 컴퓨터를 사용하기 위해서는 OS가 동작해야 사용 가능
-> OS booting : 초기 전원 on 시점에 OS가 동작할 수 있도록 하는 단계
- 즉 booting == OS 실행
Linux booting 과정
- 전원 on
- BIOS (Basic Input/Output System) 실행
- 컴퓨터 ROM 또는 flash memory에 저장된 프로그램
- 컴퓨터 상태 점검 -> CPU/Memory/IO Device
- 부트 로더 프로그램 로드
- 시스템 디스크 ( / 파티션) 의 MBR (Master Boot Record) 영역에 저장된 프로그램
- 부트 로더 프로그램 : OS를 memeory로 로드하는 프로그램
- Linux Kernel 저장 위치 : /boot 디렉토리에 vmlinuz~로 시작하는 이미지 파일
- 부트 로더 실행
- Linux Kernel 로드 : /boot/vmlinuz-<kernel 버전>
- uname -a : 현재 사용중인 Linux Kernel 정보 확인
- 부트 로더 실행시 원하는 Linux Kernel을 설정 가능
- 부트 로더
- GRUB : 현재 사용하는 부트 로더
- LILO
- 커널 초기화
- Linux Kernel 실행
- 커널 초기화 과정
- memory 구성 초기화
- IO Device 초기화
- 시스템 동작을 위한 프로세스 생성 및 초기화
- dmesg : 초기화 메시지 확인 명령
- systemd 서비스 실행
- systemd : 1번 프로세스, daemon 프로세스
(그렇다고 모든 프로세스들이 systemd에게 직접적으로 영향받는건 X)
- booting level
- booting 방식 및 모드 의미
- CLI 모드 booting
- GUI 모드 booting : 현재 사용하는 배포판이 주로 쓰는 booting 모드
- 로그인 shell 실행 (CLI 모드 booting) 및 프롬프트 표시
systemd 프로세스
- Linux 최상위 프로세스 -> 1번 프로세스
- Ubuntu 14.04 버전까지는 initd 프로세스가 1번 프로세스로 사용되었으나 이후 systemd가 1번 프로세스로 변경
- 배포판에 따라 systemd 프로세스가 1번 프로세스로 변경된 시점에 차이가 존재
initd에 대한 systemd 차이점
- 소켓 기반 동작 -> inetd와 호환성 유지
- shell과 독립적으로 부팅 가능
- 마운트 제어 가능
- fsck 제거 기능
- 시스템 상태에 대한 스냅샷 유지
- SELinux와 통합 가능
- 서비스에 시그널 전송 가능
systemd 유닛
- 전체 시스템 시작과 관리에 유닛 (unit) 구성요소 사용
- systemd는 '서비스명.유닛 종류' 형태로 관리
- 각 유닛은 같은 이름과 종류로 구성된 설정파일과 동일 이름 사용
systemd 유닛 종류
- service : daemon 프로세스 시작/종료/재시작/로딩
- socket : 네트워크 통신, domian socket (kernel 내부에서 사용)
- device : IO Device 관리
- mount : mount point 관리
- automount :자동 mount 관리
- target : run-level 관리
- swap : swap 장치 관리
- path : 경로 관리
- timer : 타이머 관리
- slice : 프로세스 계층 관리
- scope : 외부 생성 프로세스 관리
Systemd 관련 명령
systemctl
Daemon 프로세스 관리 명령
( initd 프로세스 사용시에는 service 명령 사용 )
[sudo] systemctl [옵션] [명령] [<유닛명>]
- -a : 상태와 관계없이 전체 유닛 출력
- -t : 유닛 종류 -> 지정한 유닛 종류 출력
명령
관리자 권한으로 실행 ↓
- start : 유닛 시작
- stop : 유닛 종료
- restart : 유닛 재시작
- enable : booting 시 자동실행 설정
- disable : booting 시 자동실행 해제
- isolate : 지정한 유닛 및 이와 관련된 유닛만 시작하고 나머지는 정지
- 그냥 systemctl : 전체 유닛 출력
- systemctl -a : 전체 유닛 출력
- systemctl -t service : service 유닛 전체 출력
- systemctl status <유닛명> : 유닛 상태 확인
ex) systemctl status cron.service
- enable 상태 : booting 시 자동 실행 의미
- disable 상태 : booting 시 자동 실행 X
- service <서비스명> status
- service cron status : cron service 상태 확인, initd 기반 service 확인 명령
- sudo systemctl stop cron.service : cron.service 유닛 종료
- sudo systemctl start cron.service : cron.service 유닛 시작
- sudo systemctl restart cron.service : cron.service 유닛 재시작
런레벨 (run-level)
-
시스템 실행 레벨 의미
-
0~6까지 정수로 부여
-
target 유닛에 의해 적용
-
자주 사용하는 런레벨
- 3번 : multi-user.target -> CLI booting
- 5번 : graphical.target -> GUI booting
-
run-level 명령 : 현재 런레벨 출력
-
booting 방법에 대한 설정
- sudo systemctl set-default multi-user.target : 기본 booting 방식을 CLI로 설정
- sudo systemctl set-default graphical.target : 기본 booting 방식을 GUI로 설정
-
target 변경
- sudo systemctl isolate multi-user (runlevel3)
- sudo systemctl isolate graphical (runlevel5)
데몬 프로세스 (daemon process)
Linux 환경의 background에서 동작하면서 특정 서비스 제공하는 프로세스 => 사용자와 상호작용 X
데몬 동작 방식
독자형 (standalone) 데몬
- 시스템 backgound에서 서비스별로 (항상) 동작
- 빠른 초기 동작 속도
- 자주 사용하는 서비스가 아니라면 자원 낭비 요인
슈퍼 데몬
- 평소에는 슈퍼 데몬만 동작하다가 서비스 요청이 들어오면 슈퍼 데몬이 해당 서비스 제공 데몬 실행
- 처음 서비스 응대시 독자형 데몬에 비해 느린 응답속도 but 효율적인 자원 사용
- 네트워크 사용하는 서비스가 슈퍼 데몬 형식
- inetd : UNIX 슈퍼 데몬명
- xinetd : ubuntu 슈퍼 데몬명 (보안기능 포함)
pstree 명령 : 프로세스 계층 구조 확인
Linux 주요 데몬
- sshd : 원격 접속 서비스 제공
- httpd : 웹서비스 제공
- ftpd : FTP 서비스 제공
- nfs : 네트워크 파일 시스템
- crond : 주기적으로 예약된 명령 실행 서비스
- lpd : 프린트 서비스
- ntpd : 시간 동기화 서비스
2. 소프트웨어 관리
Linux 환경에서 Application (program) 설치 방법
-
Application source를 다운로드 또는 복사하여 직접 컴파일 과정을 통해 설치
ex) Linux Kernel
- 한번에 원하는 결과물 얻기 어려움
- 컴파일 과정은 환경에 영향 多 -> 실제 최종 결과물 얻기까지 많은 시행착오 발생,
해당 문제 보완 위해 바로 밑의 방법 (패키지) 사용
-
Application 패키지 파일을 다운로드 또는 복사하여 직접 패키지를 이용한 설치
해당 Application 설치에 필요한 의존성 파일 포함 제공
ex) Ubuntu에서 Chrome 브라우저 다운로드
-
각 배포판에서 운영하는 repository (원격 저장소)를 통해 원하는 Application 패키지 다운로드 설치
-> 인터넷 연결 필요, 일반적으로 사용하는 방법
- Debian 계열 -> apt 명령
- Redhat 계열 -> yum 명령
dpkg 명령
Debian 계열 패키지 관리 명령 : .deb 패키지 파일 설치/삭제/업그레이드/정보제공
dpkg [옵션] < .deb 파일명 또는 패키지명 >
- -l : 설치된 패키지 목록 확인
- -L <패키지명> : 해당 패키지로부터 설치된 모든 파일 목록 확인
- -s <패키지명> : 해당 패키지 정보 확인
- -I (대문자 i) < .deb 파일명> : 해당 .deb 파일 정보 확인
- -i < .deb 파일명> : 패키지 설치/업그레이드, 관리자 권한
- -r <패키지명> : 패키지 삭제 (설정 파일 삭제 X), 관리자 권한
- -P <패키지명> : 패키지/설정 파일 삭제, 관리자 권한
apt 명령
- Debian 계열 온라인 repository를 통한 패키지 관리 명령
- Ubuntu 패키지 및 해당 패키지 정보를 관리하는 서버 정보는 /etc/apt/sources.list 파일에 저장
- 기본적으로 /etc/apt/sources.list에 등록된 서버로부터 원하는 패키지에 대한 검색/다운로드/설치 가능
- 만약 별도의 repository로부터 패키지를 설치하려면 해당 repository 서버 주소 등록 후 사용
apt-cache 명령
APT 캐시 (패키지 DB)에서 정보 검색; apt-cache [옵션] <서브 명령>
- -f : 검색결과 전체정보 출력
- 서브 명령
- serach 키워드 : 캐시에서 키워드 검색
- show 패키지 : 패키지에 대한 정보 출력
apt-get 명령
패키지 관리 명령, 온라인 repository로부터 패키지 다운로드/설치/삭제/업그레이드 등의 관리 수행
[sudo] apt-get [옵션] <서브 명령>
ssh 데몬 설치
- sudo apt-get update
- sudo apt-get install [-y] openssh-server
- systemctl status sshd.service -> 서비스 실행유무 확인
3. TIF
어제의 마운팅 등의 내용이 너무나도 불지옥이어서 그랬는지 오늘은 상대적으로 제법 할만한 편이었다. 그렇지만 내일의 난이도는 과연 어떨진 감히 예상 못하겠다. 아마 오늘보단 어제에 더 가깝겠지?
그리고 오늘부터는 그동안의 실제 공책에 필기한 후 이 블로그로 학습 내용 정리본을 옮기는게 아닌, 아예 처음부터 블로그 글로 작성하는 걸로 바꿔봤다. 이 방식이 아무래도 시간 절약 종이 절약 체력 절약에 있어서 훨씬 나은 것 같아서 앞으로 이렇게 할 듯.