[쿠버네티스 3주차 1/4]리눅스 - 논리 볼륨(Logical Volume) 관리 & systemd, 리눅스 부트 프로세스

신현식·2023년 1월 4일
0

구름_Linux

목록 보기
10/22
post-thumbnail

디스크 추가 설치- 논리 볼륨 소개

논리볼륨은 일반적인 소토리지 관리 방식보다 유연한 스토리지 관리 기능을 제공한다.

💡논리 볼륨 장점

  1. 디스크 파티션의 구조와 상관없이 원하는 크기의 논리볼륨 생성가능
  2. 논리볼륨으로 생성된 볼륨의 사이즈가 부족할 경우 볼륨 확장 가능, 이때 볼륨 내에 데이터를 그대로 유지한 상태에서 볼륨확장 가능
  3. 데이터를 유지한 상태에서 디스크 제거도 가능
  4. 논리 볼륨 생성 시 RAID를 적용한 볼륨을 생성가능

LVM: 독립적으로 구성된 디스크 파티션을 하나로 연결하여 한 파티션처럼 사용할 수 있도록 해준다. 논리 볼륨을 구성 할 때는 PV -> VG -> LG 순서로 진행된다.

  • PV(physical volume): 각각의 파티션은 PV로 만든다. /dev/sdb1 같은 실제 하드디스크의 파티션을 의미한다.

  • VG(volume group): 여러개의 PV를 그룹으로 묶은 것을 의미한다.

  • LV(logical volume): VG를 다시 적절한 크기의 파티션으로 나눌때 각 파티션을 LV라고 한다. 이 파티션은 물리적인 한계를 초월하여 우리가 원하는대로 사용이 가능하다.

파일시스템별 디스크 사용량 확인

df

  • 디스크의 남은 공간에 대한 정보를 출력한다
    df -Th: 파일 시스템의 종류정보를 이해하기 쉬운 단위로 표시한다.

LVM 생성과정 실습

물리볼륨생성 : pvcreate 장치명1
볼륨그룹생성 : vgcreate vg명 pv명...... -s pe 사이즈
논리볼륨 생성: lvcreate vg명 -n lv명 (-L 실제크기 / -l pe 갯수)

물리볼륨 삭제 : pvremove pv명...
볼륨그룹 삭제 : vgremove vg명
논리볼륨 삭제 : lvremove lv경로

1. 파티션을 만든후 파일시스템 파입을 8e(LVM)으로 바꾼다. lvmdiskscan 명령으로 논리 볼륨을 구성하기 위해 파티션 정보를 확인할 수 있다.
2. 만든 파티션에 pv를 생성한다. 그후 pvscan으로 pv의 상태를 확인하고 pv를 통합하여 vg를 생성한다. vg로 만들때는 물리적인 한계없이 어떤 디스크든 합칠 수 있다. vgdisplay -v 명령으로 vg의 자세한 정보를 확인할 수 있다.

3. lvcreate를 이용해 vg를 lv로 만들 수 있다. -l 옵션은 PE개수를 입력하는데 512개를 하면 4G가 된다. -L옵션은 사이즈를 입력하는 것을 의미한다.4. 01은 xfs, 03은 ext4로 포맷을 진행한다.
5. 만든 lv를 mount한다. lsblk로도 확인 가능하다.
6. 생성했던 것들은 지우기 위해서는 umount -> lvremove -> vgremove -> pvremove -> 파티션 제거 순으로 차례대로 지우면 된다.

  • 볼륨그룹확장 : vgextend vg명 pv명...
  • 볼륨그룹축소 : vgreduce vg명 pv명...
  • 물리볼륨 내용 이동 : pvmove pv명 ...

💡 RAID(Redundant Array of Inexpensive Disks, Redundant Array of Independent Disks)

개별 디스크드라이브를 묶어서 고가의 대용량 고성능 디스크 드라이브의 성능과 기술을 구현 하기 위해 만들어진 기술이다.

RAID 0: 데이터를 블록 단위로 분할해 복수의 디스크에 분산하고 배치하는 것으로 읽기·기입 속도가 높다. 단 RAID 내의 HDD가 1대라도 고장났을 때에는 파일의 복구를 할 수 없게 된다.
RAID 1: 같은 데이터를 복제하고 2개의 디스크에 쓰는 방식으로 “미러링”이라고도 불린다. 어느 한쪽의 HDD가 고장났다고 해도, 모든 파일이 남는 신뢰성이 메리트이다. 반면, 같은 데이터를 2대의 HDD에 쓰는 것으로부터 용량 코스트가 배가 된다는 단점을 가지고 있다.

리눅스 시스템 부팅

📌 systemd 서비스

이 서비스는 기존의 init 스크립트를 대체한 것으로 최신 리눅스에 도입되고 있는 새로운 PID 1번 프로세스이다. 기존 init프로세스는 부팅과정에서 각종 서비스를 제공하는 셸 스크립트 파일을 실행한다. 프로세스 설정파일은 /etc/inittab에 존재했다.
systemd는 소켓기반으로 동작하며 init프로세스에 대한 호환성을 제공하고 셸과 독립적으로 부팅이 가능하다.

  • init는 시스템의 단계를 7개로 정의하여 구분하고 각 단계에 따라 셸 스크립트를 실행하는데 이 단계를 런레벨이라고 한다.

sysytemd는 전체 시스템을 시작하고 관리하는데 유닛이라 부르는 구성요소를 사용하고 각 유닛은 같은 이름과 종류로 구성된 설정파일과 동일한 이름을 사용한다.

  • servise(명백한 유닛으로 데몬을 시작,종료,재시작,로드함 .service로 끝나는 파일) socket((소켓관리유닛), target(유닛을 그루핑하는 개념 multi-user.target -> 런레벨 5에 해당하는 유닛)등이 중요하다.

systemctl

  • systemd를 기반으로 유닛을 관리하는 명령어이다. 서비스를 시작하거나 종료할때 사용한다.

start, stop, status, enable, disable, restart 등이 중요하다.

🔔 systemd에서의 런레벨

런레벨과 target유닛간의 관계를 보여준다.
systemctl -get-default로 현재 target을 알수 있고, runlevel 명령으로 런레벨을 확인할 수 있다.

리눅스 시스템 종료

shutdown

  • 리눅스 시스템을 가장 정상적으로 종료한다.
    shutdown -h now: 시스템 즉시 종료하는데 종료하며 halt상태로 이동한다.
    shutdown -h +2 '메세지' : 2분 후에 종료한다는 메세지 발송

telinit 0 or telinit 6

  • 런레벨을 0(시스템 종료)이나 6(재시작)으로 전환하기

기타 종료 명령

  • 시스템을 종료하거나 재시작하기 위해 사용할수 있는 명령으로 halt, poweroff, reboot 등이 있는데 이들 모두 systemctl 명령의 심벌릭 링크이다.
  • 전원을 끈다.

데몬 프로세스

리눅스 백그라운드에서 동작하면서 특정한 서비스를 제공하는 프로세스이다. 리눅스 시스템에서 동작하는 각종 서비스를 제공하는 프로세스들이 바로 데몬이다. 보통 d로 끝나는 것들이다.(sshd)

  • 독자형(standalone) 동작: 백그라운드에서 서비스별로 항상 동작, 자주 호출되지 않으면 시스템 자원 낭비할 우려 있음
  • 슈퍼데몬에 의한 동작: 서비스 요청이 오면 슈퍼데몬이 해당 데몬을 동작시킴, 자원을 효율적으로 사용(유닉스: inetd, 페도라: xinetd)

📌 커널 스레드 데몬

커널의 일부분을 프로세스처럼 관리하는 데몬이다. ps 명령으로 확인했을때 대괄호([ ])로 둘러싸여 있는 프로세스들이다. 커널 데몬은 대부분 입출력이나 메모리 관리, 디스크 동기화 등을 수행하며 대체로 낮은 PID를 할당받는다.

주요 데몬

부트 로더

GRUB: 리눅스의 전통적인 부트로더인 LILO의 단점을 보완하여 GNU 프로젝트의 일환으로 개발된 것이다. 부팅시 명령을 사용하여 수정이 가능하고 멀티부팅 기능을 지원한다.

사용자가 사용가능한 타켓유닛

  • emergency.target: 긴급쉘 / root 패스워드 필요 / ro(read only) 마운트 / 싱글 계정 / 네트워크x
    파일을 내용을 수정해야할 때는 루트 파일시스템(/)을 rw로 다시 마운트를 진행해야한다.
  • rescue.target: 복구쉘 / root 패스워드 필요 / rw 마운트 / 싱글 계정 / 네트워크x
  • multi-user.target
  • graphical.target

root 패스워드 복구

  1. 부트로더에서 부팅할 커널 항목 선택한다. 부트로더 단계에서 방향키로 부팅할 커널 항목을 변경하면 카운트를 중지시킬 수 있다.

  2. 선택된 커널 항목에서 'e'키를 누르면 실행할 커널의 설정값을 수정할 수 있다. linux16로 시작히는 줄 마지막, 즉 UTF-8 뒤에 램디스크 초기화를 중단하는 옵션인 rd.break를 입력한 후 ctrl+x를 입력한다.

  3. 위 과정을 진행하면 switch_root# 쉘로 진입한다. /sysroot에 읽기전용으로 마운트 되어있기 때문에 읽기쓰기(rw)로 다시 마운트를 진행한다. 마운트의 -o 옵션을 사용하여 remount,rw를 인자로 지정하면 읽기쓰기로 다시 마운트 된다.

  4. chroot 명령은 루트 리렉터리를 변경하는 명령이다. /sysroot를 루트 디렉터리로 변경하면 다시 본 쉘로 접근한다. 이때 passwd 명령으로 패스워드를 변경해주면 된다.

mount | grep -w '/sysroot'
mount -o remount,rw /sysroot
chroot /sysroot
  1. chroot 명령을 사용하여 루트 디렉터리를 변경하게 되면 파일에 대한 레이블 정보가 전부 제거된다. 따라서 파일에 대한 레이블을 재지정 해야하는데 많은 파일을 사용자가 개별적으로 지정할 수 없다. 따라서 /.autorelabel 파일을 빈 파일로 생성하면 시스템이 부팅 될 때 이 파일을 발견하고 파일에 대한 레이블을 자동으로 부여한다. 파일에 대한 레이블이 종료되면 해당 파일은 삭제되며 root패스워드가 복구된다.
profile
전공 소개

0개의 댓글