어제 내용 복습 차원에서 실습
1. sleep 100, sleep 150 2개의 명령을 백그라운드로 실행
-> sleep 100 &, sleep 150 &
2. 현재 실행 중인 백그라운드 작업이나 정지된 작업을 확인
-> jobs
3. 백그라운드로 실행 중인 sleep 프로세스 중 1번 작업을 종료
-> kill -9 PID 또는 kill %작업번호
4. 백그라운드 작업을 포그라운드로 전환
-> fg %작업번호
5. 포그라운드 작업을 강제 종료
-> Ctrl + c
작업 예약 : 정해진 시간에 한 번만 수행(at), 정해진 시간에 반복 수행(cron)
at [옵션] [시간] -> 데몬 프로세스에 의해 수행된다. 항상 메모리에 올라가서 상주 중.
at는 알 필요 없다.
- crontab [-u 사용자 ID] [옵션] [파일명]
-e : 사용자의 crontab 파일을 편집
-l : crontab 파일의 목록 출력
-r : crontab 파일을 삭제
일반 사용자도 실행 가능. 다른 사용자의 예약에 접근하거나, 수정/삭제하는 건 root 사용자만 가능.
/etc/crontab 파일을 직접 수정해서 설정 가능(root 사용자만 가능)
/bin/crontab 명령어를 보면, SetUID가 붙어있다. 일반 사용자도 이 파일을 실행 가능하다는 의미.
-> 그래서 일반 사용자는 명령어를 통해 간접적으로 설정
/etc/crontab 파일을 보면, 작업 예시에서 5개의 필드가 보인다.
앞에서부터 5개의 날짜/시간 값 필드 + 사용자 이름 + command => 7개 인자로 이루어졌다.
시간 값을 *로 실행하면 상관없다는 의미(분-0~59, 시-0~23, 일-1~31, 월 1~12, 요일-일요일부터 0~6)
-> 예시 1 : * * 1 9 * 라면 시간, 분, 요일에 관계없이 9월 1일
-> 예시 2 : 0 14 * * * 라면 날짜와 요일에 관계없이 14시
-> 예시 3 : 매 10분마다(*/10), 매 1시간마다(*/1)
-> 예시 4 : 오전 5시, 10시에(0 5,10 * * *)
이렇게 설정된 시간에 입력된 사용자의 이름으로 command를 실행하게 될 것.
crontab -e를 실행하면 vi 편집기로 진입
여기에 명령어를 작성할 경우에는 무조건 절대 경로로 작성
30 23 1 * * /usr/bin/find / -user root -perm -4000 -exec ls -l {} \; >> /root/test.txt
-> 매월 1일 23시 30분마다 이 명령어를 실행해 파일에 입력
저장하고 나오면 crontab -l로 이 설정을 볼 수 있다.
삭제할 거면 crontab -r
- crontab 명령 제한하기 : 사용자들이 crontab 설정을 남발하면 환경이 더러워질 수 있다.
/etc에서 cron. 으로 시작하는 파일들을 보면 여러 가지가 있는데, 일반적으로 접근 통제 시에는 걸러낼 것을 먼저 보고 다음에 허용할 것을 보는데, crontab 명령 제한은 반대다.
crontab.allow를 보고 crontab.deny를 본다. crontab.allow는 사용자가 설정해야 생긴다.
1. allow가 있으면 파일 안에 있는 사용자만 crontab 명령 사용 가능
2. allow가 없고 deny가 있으면 deny에 없는 사용자만 crontab 명령 사용 가능
3. 둘 다 없으면 시스템 관리자만 crontab 사용 가능
- 7장 파일 시스템과 디스크 관리
파일과 디렉터리의 집합을 구조적으로 관리하는 체계
-> 어떤 구조를 구성하여 관리하느냐에 따라 다양한 형식의 파일 시스템이 존재
리눅스 고유의 디스크 기반 파일 시스템
ext(ext1) : Extended File System
ext2
-> 1, 2는 사용 안 함. 알 필요도 없다.
ext3
-> 저널링 기능 도입, 복구 기능 강화
-> 얘도 잘 안 씀
ext4
-> 그나마 사용하는 형식
- 특수 용도의 가상 파일 시스템 : 여러 가지가 있지만, swap만 기억
-> 처음 설치 시 파티션을 나누지 않았더라도, 이미 나눠져 있다.
-> swap 파티션과 root 파티션.
-> 후자가 지금 루트 디렉터리 밑으로 구성되어 있는 그 구조.
-> 전자는 스왑 영역을 관리하기 위한 스왑 파일 시스템.
프로세스 정보를 보면 사용 중인 가상 메모리와 실제 메모리 정보가 나온다.
주 기억장치 메모리가 모자라면 실행되어야 할 각종 중요한 프로세스가 실행되지 못할 수 있다. 버벅이거나, 블루 스크린이 뜨거나...
그래서 이럴 경우 보조 기억 장치처럼 사용할 수 있도록 가상 메모리로 설정한 것이 swap 파티션
/etc/filesystems에서 현재 커널이 지원하는 파일 시스템 종류 확인 가능
ReiserFS : 웹 서비스용 파일 시스템
XFS : SGI에서 만든 대용량 파일 시스템
JFS : IBM에서 만든 저용량 파일 시스템
위 3개 모두 저널링 기능 있음
ext4 이후 파일 시스템이 다 비슷하다
모든 파일 시스템의 기본 개념
-> 파일은 inode로 관리된다.
-> 디렉터리는 단순히 파일의 목록을 가진 파일일 뿐이다.
-> 특수 파일을 통해 장치에 접근 가능
ext4 파일 시스템의 구조
-> 효율적 디스크 관리를 위해 저장 장치를 논리적인 블록의 집합(블록 그룹)으로 구분
-> 한 블록은 4KB(설정에 따라 변경 가능)
-> 블록 그룹 유형 3종
블록 그룹 0 : 첫 번째 블로 그룹. 파일 시스템 관리 정보가 들어가 있다. boot, super, inode, MBR 등이 기록되어 있다.
블록 그룹 1(또는 a) : 블록 그룹 0의 백업본
블록 그룹 2(또는 b) : 여기서부터 데이터 저장
inode의 구조는 대강 알아둘 것
- 파일 시스템과 디렉터리 계층 구조(중요)
-> 디렉터리 계층 구조 : 리눅스 전체 파일과 디렉터리를 어떤 구조로 정리하고 관리할 것인지를 정의한 것.
-> 실제 파일이 저장되어 있는 파일 시스템은 디렉터리 계층 구조에 연결되어야 사용자가 접근 가능
1. 하나의 파일 시스템으로 구성하기
-> 모든 디렉터리와 파일을 하나의 파일 시스템으로 구성
2. 여러 파일 시스템으로 구성하기
-> 일부 파일 시스템에 문제가 생겨도 다른 파일 시스템의 파일은 안전하다
- mount : 파일 시스템을 디렉터리 계층 구조의 특정 디렉터리와 연결하는 것
마운트 포인트 : 계층 구조에서 파일 시스템이 연결되는 디렉터리
파일 시스템 마운트 설정 파일 : 시스템 부팅 시 파일 시스템이 마운트되게 하는 파일. /etc/fstab 파일에 저장(여기에 파일 시스템의 마운트 정보 저장)
-> 이 파일 잘못 수정하면 부팅이 안됨
-> 6개 필드로 구성되어 있으며, 필드 구분은 공백으로.
[장치명] [마운트 포인트] [인식할 파일 시스템] [옵션] [덤프(백업) 관련(1, 0)] [파일 점검 옵션(0, 1, 2)]
[옵션] -> 파일 시스템의 속성 지정. 몇 개만 기억하면 된다.
[덤프(백업) 관련(1, 0)] -> 0이면 백업 기능 사용, 1이면 미사용
[파일 점검 옵션(0, 1, 2)]
-> 파일 시스템 점검하지 않음(0)/루트 파일 시스템만 점검(1)/루트 파일 시스템 이외의 파일 시스템을 점검(2)
lsblk -fp로 마운트 현황을 볼 수 있다.
df -h : 마운트가 되어 실제 사용하고 있는 디스크 정보 조회
mount [옵션] [장치명] [마운트 포인트]
※ 명령어로 하는 것은 해당 로그인 환경에서만 유효
옵션
-t [파일 시스템 종류] : 파일 시스템 종류 지정
-o [마운트 옵션] : 마운트 옵션을 지정
-f : 마운트 할 수 있는지 점검
-r : 읽기만 가능하게 마운트(= -o ro)
"이 장치를 저 마운트 포인트에 이 옵션으로 설정"
cgroup(컨테이너 격리화)
- umount [옵션] [장치명 or 마운트 포인트]
-t 파일 시스템 종류 : 파일 시스템 종류 지정
디스크 추가 단계
새 디스크 장착 -> 디스크 파티션 나누니 -> 파티션에 파일 시스템 생성(포맷) -> 디스크 마운트
하드디스크를 넣으면, 리눅스는 특정 파일명으로 인식
-> /dev/sd* or /dev/hd*
-> *에는 순서에 따라 a, b, c,...
-> 전자는 scsi/SATA/USB, 후자는 HDD
여하튼 ls -l /dev/sd*로 보면 쭉 나온다. 같은 디스크의 다른 파티션이면 뒤에 숫자가 붙는다(1부터).
주 파티션은 최대 4개까지 생성할 수 있다.
-> 멀티 부팅 시 주 파티션 여러 개 사용
-> 파티션을 더 늘리고 싶어서 쓰는 것이 확장 파티션/논리 파티션
논리 파티션 : 데이터만 저장(OS 설치 불가)
확장 파티션 : 쓰임이 없다. 주 파티션과 논리 파티션 간 구분 용도
예시) 파티션 6개 생성? -> 주 파티션 3개에 각 주 파티션에 확장 파티션 1개, 그리고 주/논리 파티션 사이에 확장 파티션
파티션 나누는 명령어는 fdisk
fdisk [옵션] [장치명]
-b <크기> : 섹터 크기를 지정
-l : 파티션 테이블 출력
특정 디스크(sda) 파티셔닝 보기 : fdisk -l /dev/sda
일단 ls -l /dev/sd* 로 장착된 디스크를 보고, fdisk -l /dev/sd* 로 파티셔닝이 된 것을 보고
파티셔닝이 안된 디스크(sdb)를 파티셔닝하려면 fdisk sdb -> fdisk 모드로 들어간다.
fdisk 내부 명령은 d, l, m, n, p, q, w, t 정도만 알아두면 된다.
l 입력해서 나오는 파티션의 종류 중 알아둘 것 : 83(Linux), 82(Linux swap), 8e(Linux LVM), fd(Linux raid auto)
같은 방식으로 200MB 파티션을 추가하고 p를 눌러 파티션 현황을 보면...
※ 주의 : 저장 공간이 케이크처럼 깔끔하게 삭삭 나뉘는 게 아니기 때문에 마지막 파티셔닝 때 용량을 명시적으로 해버리면 공간이 모자라다고 나온다. 마지막 파티셔닝의 범위 끝 지정은 그냥 기본값으로 하자.
이제 w를 치면 저장하고 fdisk 모드 종료. 그럼 ls -l /dev/sdb* 를 실행해 확인해 보자.
파티셔닝을 했으니, 이제 파일 시스템을 생성해야 한다.
파일 시스템 생성 명령 : mkfs [옵션] [장치명]
-t [종류] : 파일 시스템의 종류를 지정(기본값 ext2)
-t ext4 말고 mkfs.ext4 이렇게 할당할 수도 있다.
앗, 잘못 설정했다면?
-> 이 명령어로 파일 시스템을 없앨 수는 없다.
-> 파티셔닝은 영역에 울타리를 치는 것과 같고, 파일 시스템은 영역 안에 시설을 건설하는 것과 같다.
-> 시설을 들어낼 수는 없다. 그러니 파티션을 지워버리면 다시 허허벌판이 된다.
삭제하고, 다시 만들고, 다시 파일 시스템 할당하면 끝.
/etc/mtab에서 현재 시스템에 마운트 된 정보 값들을 불러올 수 있다.
mount | grep mnt로 위에서 마운트 한 결과를 볼 수 있다.
df -h로 마운트 된 정보를 볼 수 있다.
마운트 한 경로 /mnt/hdd1에 파일 1을 넣고, 링크를 끊어버리면 해당 파일을 볼 수 없다.
링크를 끊은 후 /mnt/hdd1에 파일 2를 넣고, 링크를 다시 연결하면 파일 2가 안 보이고 파일 1이 보인다.
마운트 해놓고 로그아웃했다가 들어오면 해제되어 있다. /etc/fstab 파일에 없기 때문.
/etc/fstab 파일 하단에 추가하면 된다.
정리
1. fdisk 명령어로 fdisk 모드에 들어가서 파티션 작업 진행
-> fdisk -l /dev/sdb : 현재 파티션 상태 확인
-> fdisk /dev/sdb : sdb 파티션 모드로 진입
-> n : 새로운 파티션 생성 시작 -> 파티션 타입, 넘버, 섹터 지정
-> p : 파티션 정보 확인, w : 저장하고 종료
2. mkfs/mke2fs로 파일 시스템 생성
-> mkfs -t xfs /dev/sdb1(파티셔닝한 작업 디스크)
3. mount 작업
-> mount --> cat /etc/mtab에서 볼 수 있다
-> mount 옵션 장치명 마운트 포인트
-> mount /dev/sdb1 /mnt/hdd1
(마운팅 할 폴더 만들어두기)
4. mount, df -h로 확인
마운팅 실습
1. 10GB짜리 하드디스크 장착
2. 장착된 하드디스크 파일명 확인
3. 첫 번째 파티션(5GB/ext4), 두 번째 파티션(1GB/xfs), 세 번째 파티션(4GB/ext3)
4. 각각 /mnt/test1~3에 마운트
5. df -h로 결과 확인
교재에는 없지만 swap 파티션 설정하기
-> 주 기억장치 공간이 부족할 때, 하드디스크를 가상으로 메모리화 시켜 부하 완화.
-> 메모리가 2G 이하면 가상 메모리는 2배(4G) 정도, 2~8G 사이면 메모리와 동일하게 잡는 것이 효율이 좋다.
-> 메모리자 8~64G 사이면 가상메모리는 4G 이상
1. 파티션 작업 시 타입을 swap으로 설정한다.
2. 파일 시스템 설정 시 "mkswap 장치명"으로 설정
3. "swapon 장치명"으로 키고, free나 swapon -s로 확인
4. 확인 시 메모리로 취급되기 때문에 df가 아니라 free 사용
5. /etc/fstab에 작성
-> 옵션에 defaults,pri=4 작성. 우선순위 기본값은 -2
- LVM(Logical Volume Management) : 여러 디스크를 논리적으로 주물러서 원하는 용량대로 떼어서 사용하는 것.
-> 파티셔닝이 끝난 하드디스크 파티션들을 PV(Physical Volume)라 하고, 이것을 VG(Volume Group)으로 묶어서 PE(Physical Extent)라는 단위로 쪼갠다.
-> 사용할 수 있는 전체 용량이 PE로 계산된다.
-> 모아진 VG를 다시 쪼개서 사용하면 각 파티션을 LV(Logical Volume)이라 한다.
LVM 사용하려면 파일 시스템 종류를 8e로 변경
실습 1
1. 1G 하드디스크 5개 장착
-> 장착 후 ls -l /dev/sd*로 확인 후 fdisk로 각각 t로 8e 설정
2. PV 만들기
-> pvcreate /dev/sdb1 /dev/sdc1 /dev/sdd1 /dev/sde1 /dev/sdf1
-> pvscan으로 확인
3. VG 5G짜리 만들기
-> vgcreate grp1 /dev/sdb1 /dev/sdc1 /dev/sdd1 /dev/sde1 /dev/sdf1
-> grp1이라는 이름의 VG 생성 완료
4. VG 활성화
-> vgchange -a y grp1
-> vgdisplay -v grp1로 확인 : VG 크기, PE 크기/개수, 포함된 PV 현황 등이 나온다.
5. 3G, 2G로 LV 만들기
-> PE 개수 기준으로 만들려면 -l 옵션 사용 : lvcreate -l 750 grp1 -n mylvm1
-> mylvm1이라는 이름의 3G(750 * 4MB) LV 생성 완료(lvscan으로 확인)
-> 남은 PE로 2G짜리 LV 생성 : lvcreate -l 525 grp1 -n mylvm2
-> 이제 여기에 mkfs로 파일 시스템 부여하고(mkfs.xfs /dev/grp1/mylvm1)
-> mount 하면(mount /dev/grp1/mylvm1 /mnt/test1) 끝(df-h 로 확인).
실습 2
1. 1G 하드디스크 부착. 얘는 /dev/sdg로 인식될 것.
2. grp2라는 이름의 VG를 만들고 mylvm3(800M), mylvm4(400M)의 LV 생성
3. 각각 파일 시스템 추가하고 마운트까지
용량을 증가시키고 싶을 경우에는
-> 디스크 비어있어야 한다.
-> lvextend -L +1G /dev/grp1/mylvm1
-> 파일 시스템에 맞는 확장 명령어 : xfs_growfs /mnt/test1
디스크 관리 명령어
df [옵션] [파일 시스템] : 파일 시스템별 디스크 사용량 확인
-a : 모든 파일 시스템을 대상으로 디스크 사용량 확인
-k : 디스크 사용량을 KB 단위로 출력
-m : 디스크 사용량을 MB 단위로 출력
-h : 이것만 기억하면 된다. 디스크 사용량을 알기 쉬운 단위로 출력
-t 파일 시스템 종류 : 지정한 파일 시스템 종류에 해당하는 디스크의 사용량 출력
-T : 파일 시스템 종류도 출력
du [옵션] [디렉터리] : 디렉터리나 사용자별 디스크 사용량 확인
-s : 특정 디렉터리의 전체 사용량 출력
-h : 디스크 사용량을 알기 쉬운 단위로 출력
파일 시스템 검사/복구
fsck [옵션] [장치명] : 파일 시스템 검사. 마운트 해제하고 해야 한다
-f : 강제로 점검
-b 슈퍼블록 : 슈퍼블록으로 지정한 백업 슈퍼블록 사용
-y : 모든 질문에 yes로 대답
-a : 파일 시스템 검사에서 문제를 발견했을 때 자동으로 복구
badblocks [옵션] [장치명] : 장치의 배드 블록 검색. 마운트 해제하고 해야 한다.
-v : 검색 결과 자세히 출력
-o 출력 파일 : 검색한 배드 블록 목록을 출력 파일에 저장
다 외울 필요는 없다. 클라우드 엔지니어의 업무와는 거리가 있기 때문.
클라우드 시스템에서는 디스크조차 업체 측에서 제공하는 가상 디스크를 쓰게 된다. 서버를 직접 만지지 않는 이상 파일 시스템을 직접 설정하는 일은 없다.
물론 EBS를 파티셔닝하고 파일 시스템을 부여하는 일이야 하지. 하지만 물리적으로 만질 일이 없다는 것.
2교시 후반 swap 파티션 다시 듣기
3교시 후반 파일 시스템
4교시 후반 파티션
8교시 중반 클라우드와의 연관성 다시 듣기
리눅스 기초 다음은 리눅스 서버 구축 대강 1주일, 그다음은 Ansible
'교육' 카테고리의 다른 글
[28일 차] 21.08.27 : Linux Server 7 (0) | 2021.08.27 |
---|---|
[27일 차] 21.08.26 : Linux Server 6 (0) | 2021.08.26 |
[25일 차] 21.08.24 : Linux Server 4 (0) | 2021.08.24 |
[24일 차] 21.08.23 : Linux Server 3 (0) | 2021.08.23 |
[23일 차] 21.08.20 : Linux Server 2 (0) | 2021.08.21 |
댓글