5단원 파일시스템 및 스왑 메모리
[학습 목표]
- 리눅스 시스템의 다양한 파일 시스템 종류와 특징에 대해 살펴보고 파일 시스템 종류에 따라 생성하는 방법에 대해 알아보기
- 파일시스템이 생성된 파티션에 디렉토리 형태로 접근할 수 있도록 연결하는 작업인 마운트(mount)에 대해 알아보고 특정 파일에 마운트 정보를 입력하는 방법에 대해 알아보기
- 가상 메모리 기법인 스왑 메모리를 활용하여 시스템 성능을 향상 시키는 방법에 대해 알아보기
5.1 리눅스 파일 시스템 소개
#파일 시스템
- 구조화된 일련의 정보를 구성하는 파일과 디렉토리의 집합
- 파일의 목록과 파일이 실제 저장된 위치, 파일에 대한 정보를 관리
5.1.1 리눅스 파일 시스템 소개
1) 디스크 기반 파일 시스템
- 하드디스크, CD-ROM, DVD 등을 기반으로 함
- MINIX, EXT, XFS, FAT, ISO9660, UDFS 등
2) 분산 파일 시스템
- 네트워크를 통해 파일 시스템의 자원에 접근 지원
- NFS, SMB 등
3) Pseudo 파일 시스템
- 메모리 기반의 파일 시스템으로 시스템 성능을 높이고 커널 정보에 접근 지원
- 대부분 시스템에 의하여 자동 생성/해제, 임의 해제 시 문제 발생
- swapfs, tmpfs, fdfs, procfs, devfs 등
5.1.2 주요 파일 시스템 구조
1) ext4 파일시스템
- 파일시스템 전체에 대한 주요 정보는 슈퍼 블록에 저장됨
- ex4 파일시스템 내에 여러 개의 블록 그룹이 존재
- 슈퍼 블록의 백업이 일부 블록 그룹에 저장됨
- inode를 사용하여 파일의 메타정보와 데이터를 분리하여 저장함
2) xfs 파일시스템
- inode를 사용, 내부 구조는 ext4 파일 시스템과 다름
- 볼륨을 8개의(또는 그 이상의) 할당 그룹으로 분할 cf. ext4 블록 그룹
- 파일 탐색을 위해 B+트리를 사용
5.2 파일 시스템 관리
5.2.1 파일시스템 생성
- mkfs -t [filesystem-type] partition
- blkid 명령: 시스템에 생성된 파일 시스템의 종류 확인 - UUID 값 확인
- lsblk 명령: 디스크 및 파티션의 구조를 트리 형태로 표현 + ‘-f’
5.2.2 파일 시스템 마운트
: 파일시스템에 접근할 수 있는 경로를 생성하는 과정을 마운트라고 함
1) mount 명령을 사용하여 파일시스템 마운트
- mount [option] {partition | UUID} mount-point
- option: 시스템 유형을 지정하는 ‘-t’, 세부 옵션을 지정하는 ‘-o’
- default 옵션: rw, suid, dev, exec, auto, nouser, async
2) 파일시스템 테이블에 등록하여 마운트
- /etc/fstab 을 vi로 수정하여 정확하게 입력하였을 경우 시스템을 재부팅하면 정상적으로 마운트 되는 것을 확인할 수 있음
- 즉시 마운트를 할 경우에는 mount -a 옵션 사용 가능
3) 마운트 해제
- umount [optino] {partition | mount-point | UUID}
- 파일시스템의 마운트를 모두 해제할 경우 umount -a를 사용하나 주의 필요
5.3 스왑 메모리
5.3.1 가상 메모리 소개
- 가상 메모리 : 물리 메모리(RAM) + 스왑(=스왑 파티션+스왑 파일)
- 스왑(SWAP)이란 디스크 장치에 생성되는 영역을 의미
- Paged-in: 스왑 영역 데이터를 물리 메모리 영역으로 이동하는 작업
- Paged-out: 물리 메모리 프로세스의 우선순위가 낮을 경우 물리 메모리를 스왑 영역으로 이동하는 작업
- Paging = Paged-in + Paged-out
- 스왑 파티션 방식은 파티션 전체를 스왑 영역으로 사용하는 방식
- 스왑 파일 방식은 기존 파일시스템에서 사용할 수 있는 저장 공간을 스왑 영역으로 사용하는 방식
5.3.2 스왑 영역 구성
1) 스왑 영역 확인
- swapon 명령: 스왑 영역의 활성화와 스왑 영역 확인에 사용 + ‘-s’
- free 명령: 전체 물리메모리의 사이즈 및 사용량, 스왑 영역의 사용량 등을 출력 + ‘-h‘
2) 스왑 파티션 생성
- fdisk 명령의 프롬프트에서 ‘t’ 명령 사용 → Hex code에서 82번 Linux swap 파티션 사용 → ‘w’ 명령으로 저장 → 쉘에서 partprobe 명령을 사용하여 변경된 테이블을 운영체제에 알림
- mkswap 명령 + directory 을 이용하여 파티션에 스왑 영역을 생성
- 최종적으로 file -s 를 통해 스왑영역에 대한 정보와 UUID값 확인
3) 스왑 파일 생성
- 여유 공간이 존재하는지 df -h 옵션으로 확인
- dd if=/dev/zero of=/swapdir/swapfile bs=512 count=1048576
[복사할 파일][생성될 파일] [블록 크기][복사할 횟수] 지정
- 최종적으로 file -s 를 통해 스왑영역의 생성 확인
4) 스왑 영역 활성화
- swapon [option] {partition | file-name}
- UUID swap swap defaults 0 0
- swapon ‘-p’ 옵션은 스왑영역의 우선순위를 지정
- swapon ‘-s’ 옵션은 스왑 파티션 및 스왑 파일 별로 정보를 출력
5) 스왑 영역 활성화 해제
- swapoff [option] {partition | file-name | UUID}