스왑 메모리(Swap Memory) 설정: 파티션&파일 2가지 방식 | swapon, mkswap 명령어
리눅스 스왑 메모리(Swap Memory)는 실제 디스크 공간을 메모리처럼 사용하는 개념이기 때문에 물리 메모리인 RAM보다 처리 속도가 느리지만 물리 메모리가 가득 찬 경우를 대비해 디스크 공간에서 할당 된 스왑 메모리를 생성해서 관리할 수 있어 한정된 리소스를 효율적으로 사용할 수 있습니다.
✅ Swap 파일 시스템
Swap 파일 시스템은 리눅스의 가상 메모리를 사용하기 위한 파일 시스템이며, 여기서 가상 메모리란 실제 메모리(RAM)보다 더 많은 메모리를 사용하기 위한 기술입니다. 물리적인 메모리가 부족하여 하드 디스크에서 메모리를 옴겨오는 방식을 스와핑(Swaping)라고 합니다.
Swap 메모리는 물리 서버와 클라우드 서버 관계 없이 서버의 갑작스러운 메모리 사용량 증가에 안정적으로 대응할 수 있는 장점을 가지고 있습니다. AWS 서비스를 사용하더라도 무조건 EC2 인스턴스에서 높은 메모리 사양의 서비스를 사용하기에는 가격 부담이 있을 수 밖에 없습니다.
Swap 파일 시스템을 이용해 스왑 영역을 구성하는 방법은 스왑 파티션 생성과 스왑 파일로 두 가지 방법이 있습니다.
✅ mkswap 명령어
mkswap 명령어는 “MaKe Swap”의 약자이며, 리눅스의 스왑 영역을 지정하는 명령어입니다.
1. 기본 옵션
mkswap -[옵션] [스왑 파일 or 파티션]
2. mkswap 옵션
# 스왑 파티션 생성 전에 배드 블록(Basd Block)을 검사해 줍니다.
mkswap -c /dev/xvdf1
✅ swapon 명령어
말 그대로 설정된 스왑 디스크 or 스왑 을 실행(on) 시킨다는 뜻을 가지고 있습니다.
1. 기본 사용 방법
swapon 명령어를 사용해서 파티션을 연결합니다.
swapon [/dev/파티션 or 파일]
# 예시
swapon /dev/xvdf1
2. swapon 옵션 사용
swapon -[옵션] [/dev/파티션 or 파일]
# -옵션 사용 사용 예시 [-s]
swapon -s
Filename Type Size Used Priority
/dev/xvdf1 partition 4194300 0 -2
✅ swapoff 명령어
swapoff 는 말 그대로 실행 중인 스왑 파일을 끈다는 뜻을 가지고 있습니다.
swapoff -[옵션] [/dev/파티션 or 스왑파일]
# 사용 예시
swapon -v
NAME TYPE SIZE USED PRIO
/dev/xvdf2 partition 4G 768K -2
/dev/xvdf3 partition 4G 0B -3
/swapfile file 4G 0B -4
swapoff /dev/xvdf3
swapoff /swapfile
swapoff 옵션 | 설명 |
---|---|
-a | 모든 스왑 영역 중지. 스왑 영역이 1개일 때는 -a 옵션이 필요 없습니다. 2개 이상의 스왑 영역이 동작 중일 때 사용하는 옵션입니다. |
✅ 리눅스 스왑 메모리(Linux Swap Memory) 만들기: 파티션
gdisk 명령어로 Swap 파티션을 생성합니다. 기존 파티션의 변경도 동일한 방법으로 진행이 가능합니다.
1. 스왑 메모리(Swap Memory) 영역 설정
이제 Swap 메모리를 추가 해 보겠습니다.
mkswap /dev/xvdf3
Setting up swapspace version 1, size = 4 GiB (4294963200 bytes)
no label, UUID=84bbe826-c750-4a58-a299-92db8b584337
이제 스왑 메모리를 마운트 해서 활성화합니다.
재부팅 테스트 결과 swapon -a 옵션은 일시적인 활성화이므로 /etc/fstab에서 재 부팅 했을 때 자동으로 설정되도록 적용합니다.
2. /etc/fstab 설정
✅ 스왑 파일 생성
dd if=/dev/zero of=/swapfile bs=1MB count=2048
3+0 records in
2+0 records out
2147483648 bytes (2.1 GB, 2.0 GiB) copied, 77.5708 s, 27.7 MB/s
# /dev/zero에서 1M 씩 2천 번 스왑 파일을 읽어서 저장한다는 의미입니다. 2M * 2000 = 2G의 파일이 생성 되었음을 알 수 있습니다. 블록 단위 차이를 만들 수 있는 점을 확인할 수 있으며, 총 용량의 큰 차이는 없겠지만 count를 2048로 맞추면 정확한 2G가 됩니다.
dd if=/dev/zero of=/swapfile bs=128M count=16
#128 *16 = 2048 fh 2의 스왑 파일이 생성 되었음을 알 수 있습니다.
# 스왑 파일을 루트 폴더에 만들 경우 시스템의 성능 저하가 있을 수 있습니다.
# (특히 SSD가 아닌 HDD일 경우 체감도가 클 수 있습니다.)
dd if=/dev/zero of=/swapfile bs=1MB count=2048
2048+0 records in
2048+0 records out
2147483648 bytes (2.1 GB, 2.0 GiB) copied, 32.614 s, 65.8 MB/s
# 스왑 메모리 영역 설정
mkswap /swapfile
mkswap: /swapfile: insecure permissions 0644, fix with: chmod 0600 /swapfile
Setting up swapspace version 1, size = 2 GiB (2147479552 bytes)
no label, UUID=311e95bc-f5ce-4404-86f6-750a79457da3
# 퍼미션 600으로 설정
chmod 600 /swapfile
# 활성화
swapon /swapfile
# 확인(기존에 생성된 [스왑 파티션 xvdf1], [스왑 파일]이 함꼐 구동됨을 확인할 수 있습니다.)
---생략---
swapon -v
NAME TYPE SIZE USED PRIO
/dev/xvdf1 partition 4G 256K -2
/swapfile file 2G 0B -3
✅ 스왑 파티션 & 파일 삭제
스왑 파일을 삭제 할 때 먼저 진행할 사항은 실행 중인 스왑 파티션 or 파일을 swapoff 명령어로 중지 후 진행하는 것입니다.
1. 스왑 파티션 삭제
파티션의 삭제는 먼저 swapoff 진행 후 gdisk 명령어로 파티션의 삭제를 순차적으로 진행할 수 있습니다. 리눅스 파일 시스템이나
lsblk
---생략---
xvdf 202:80 0 33G 0 disk
├─xvdf1 202:81 0 5G 0 part
├─xvdf2 202:82 0 4G 0 part [SWAP]
└─xvdf3 202:83 0 4G 0 part [SWAP]
swapoff /dev/xvdf2
gdisk
Command (? for help): p
Disk /dev/xvdf: 69206016 sectors, 33.0 GiB
Sector size (logical/physical): 512/512 bytes
Disk identifier (GUID): 186D383F-9869-4A75-9742-969E83CD7FA5
Partition table holds up to 128 entries
Main partition table begins at sector 2 and ends at sector 33
First usable sector is 34, last usable sector is 69205982
Partitions will be aligned on 2048-sector boundaries
Total free space is 41942973 sectors (20.0 GiB)
Number Start (sector) End (sector) Size Code Name
1 2048 10487807 5.0 GiB 8300 Linux filesystem
2 10487808 18876415 4.0 GiB 8200 Linux swap
3 18876416 27265023 4.0 GiB 8300 Linux swap
Command (? for help): d
Partition number (1-3): 2
Command (? for help): w
Do you want to proceed? (Y/N): y
2. 스왑 파일 삭제
디스크 블록으로 설정된 스왑 파일을 삭제합니다.
swapoff /swapfile
rf /swapoff