Ubuntu 22.04에서 swap 파일을 생성하고 용량을 변경하는 방법

안녕하세요. 지구 IDC 기술팀입니다.

오늘은 Ubuntu 22.04에서 swap 파일을 생성하고 용량을 늘리거나 줄이는 방법을 알아보겠습니다. swap은 물리 메모리가 부족할 때 디스크 일부를 보조 메모리 공간으로 사용하는 기능으로, 갑작스러운 메모리 부족 상황에서 프로세스가 즉시 종료될 가능성을 낮추는 데 도움이 됩니다.

이 문서에서는 현재 swap과 메모리 상태를 확인하고, 2GB swap 파일을 새로 생성해 /etc/fstab에 영구 등록하는 절차를 설명합니다. 기존 swap 파일의 용량을 변경할 때는 swapoff 과정에서 메모리가 부족해질 수 있으므로, 현재 사용량에 따라 임시 swap 파일을 먼저 활성화하는 안전한 방법도 함께 다룹니다.

적용 환경

문서 적용 기준
항목 내용
운영체제 Ubuntu 22.04 LTS
기본 예시 /swapfile 경로에 2GB swap 파일 생성
주요 명령어 free, swapon, swapoff, mkswap, dd, findmnt
주요 설정 파일 /etc/fstab
기본 파일시스템 범위 일반적인 ext4 환경 기준, Btrfs는 별도 절차 안내

이 문서에서 알아볼 내용

  • 현재 메모리, swap 사용량과 기존 설정 확인
  • 일반 파일시스템에 새 swap 파일 생성
  • /etc/fstab에 등록해 재부팅 후에도 자동 활성화
  • 기존 swap 파일 용량을 안전하게 늘리거나 줄이는 방법
  • Btrfs에서 필요한 NOCOW 설정
  • 오류 진단, swap 제거와 원상복구 절차

작업 전 현재 상태 확인

먼저 물리 메모리와 swap의 전체 용량, 사용량, 사용 가능한 메모리를 확인합니다.

free -h
swapon --show --output=NAME,TYPE,SIZE,USED,PRIO
cat /proc/swaps

free -havailable 값은 새 프로그램이 추가 메모리를 요청할 때 사용할 수 있는 메모리의 추정치입니다. swapon --show에 아무 항목도 표시되지 않으면 현재 활성화된 swap이 없는 상태입니다.

기존 swap의 영구 등록 여부와 파일이 생성될 디스크의 여유 공간을 확인합니다.

grep -nE '^[[:space:]]*[^#].*[[:space:]]swap[[:space:]]' /etc/fstab
df -h /
findmnt -no TARGET,SOURCE,FSTYPE,OPTIONS -T /

새로 만들 swap 파일 크기보다 충분히 큰 디스크 여유 공간이 있어야 합니다. findmnt 출력의 FSTYPEext4라면 아래의 일반 절차를 사용할 수 있습니다. btrfs라면 이 문서의 Btrfs 절차를 먼저 확인하십시오.

swap은 RAM과 속도가 같지 않으며 지속적인 메모리 부족을 근본적으로 해결하지 못합니다. 서버가 swap을 자주 많이 사용한다면 메모리 누수, 과도한 동시 작업, 데이터베이스 버퍼 설정과 실제 RAM 용량을 함께 점검해야 합니다.

Ubuntu 22.04에서 새 swap 파일 생성

아래 예시는 루트 파일시스템에 /swapfile이라는 2GB 파일을 생성합니다. 이미 같은 경로의 파일이나 활성 swap이 있다면 덮어쓰지 말고 먼저 현재 설정을 확인하십시오.

1. 같은 경로의 기존 파일 확인

sudo ls -lh /swapfile 2>/dev/null
swapon --show | grep -F /swapfile

파일이 존재하거나 활성 swap으로 표시되면 새 생성 절차가 아니라 용량 변경 절차를 사용합니다.

2. 2GB 크기의 파일 생성

Ubuntu 22.04의 swapon 매뉴얼은 파일시스템 차이에 따른 희소 파일 문제를 피하기 위해 dd/dev/zero를 가장 이식성 높은 생성 방법으로 안내합니다.

sudo dd if=/dev/zero of=/swapfile bs=1MiB count=2048 status=progress

용량을 바꾸려면 count 값을 MiB 단위로 변경합니다. 예를 들어 4GB는 count=4096, 8GB는 count=8192입니다. 대상 디스크의 실제 여유 공간보다 큰 값을 지정하지 마십시오.

3. 파일 권한 제한

swap에는 실행 중인 프로세스의 메모리 내용이 저장될 수 있으므로 root 사용자만 읽고 쓸 수 있도록 권한을 600으로 제한합니다.

sudo chmod 600 /swapfile
sudo stat -c '%a %U:%G %s %n' /swapfile

정상 상태에서는 권한이 600, 소유자가 root:root로 표시되어야 합니다.

4. swap 영역 초기화

sudo mkswap /swapfile

mkswap은 파일에 swap 헤더와 UUID를 생성합니다. 이 작업이 끝나기 전에는 해당 파일을 swap으로 활성화할 수 없습니다.

5. swap 파일 활성화

sudo swapon /swapfile
swapon --show --output=NAME,TYPE,SIZE,USED,PRIO
free -h

/swapfilefile 유형으로 표시되고 free -h의 Swap 전체 용량이 증가하면 즉시 활성화된 것입니다. 아직 재부팅 후 자동 활성화 설정은 되지 않았으므로 다음 단계에서 /etc/fstab을 등록합니다.

재부팅 후에도 swap을 자동 활성화하는 방법

먼저 /etc/fstab을 시간 정보가 포함된 파일명으로 백업합니다.

sudo cp -a /etc/fstab "/etc/fstab.backup.$(date +%Y%m%d-%H%M%S)"

동일한 swap 경로가 이미 등록되어 있는지 확인합니다.

grep -nE '^[[:space:]]*/swapfile[[:space:]]' /etc/fstab

출력이 없다면 편집기로 파일을 열어 마지막 줄에 아래 항목을 한 번만 추가합니다.

sudo nano /etc/fstab
/swapfile none swap sw 0 0

저장 후 findmntfstab 문법과 참조 대상을 검사합니다.

sudo findmnt --verify --verbose
sudo swapon --all
swapon --show --output=NAME,TYPE,SIZE,USED,PRIO

findmnt --verify에서 오류가 없어야 하며, swapon --show/swapfile이 계속 표시되어야 합니다. swap 설정 변경에는 별도의 서비스 재시작이 필요하지 않습니다.

기존 swap 파일 용량을 변경하는 방법

활성 상태의 swap 파일 크기를 직접 변경하면 안 됩니다. swap을 비활성화한 뒤 파일을 새 크기로 다시 만들고, mkswap으로 초기화한 후 재활성화해야 합니다. 같은 /swapfile 경로를 유지하면 기존 /etc/fstab 항목은 그대로 사용할 수 있습니다.

방법 1. 사용 가능한 메모리가 충분할 때

현재 swap 사용량이 0에 가깝고 사용 가능한 RAM이 충분한 유지보수 환경이라면 다음 순서로 변경할 수 있습니다. 아래 예시는 기존 swap을 4GB로 변경합니다.

free -h
swapon --show --output=NAME,SIZE,USED,PRIO
sudo swapoff /swapfile
sudo rm /swapfile
sudo dd if=/dev/zero of=/swapfile bs=1MiB count=4096 status=progress
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile

명령 중 하나라도 실패하면 다음 단계로 넘어가지 말고 원인을 확인합니다. 특히 swapoff가 실패했다면 기존 파일을 삭제하면 안 됩니다.

방법 2. 기존 swap이 사용 중일 때 임시 swap을 거치는 안전한 방법

현재 swap 사용량이 있거나 RAM 여유가 충분하지 않다면 별도의 임시 swap을 먼저 활성화합니다. 아래 예시는 2GB 임시 swap을 만든 뒤 기존 /swapfile을 4GB로 교체합니다. 실제 임시 용량은 현재 swap 사용량과 작업 중 예상 메모리 사용량을 수용할 수 있도록 정해야 합니다.

sudo dd if=/dev/zero of=/swapfile-temporary bs=1MiB count=2048 status=progress
sudo chmod 600 /swapfile-temporary
sudo mkswap /swapfile-temporary
sudo swapon /swapfile-temporary
swapon --show --output=NAME,SIZE,USED,PRIO

임시 swap이 표시되는 것을 확인한 후 기존 파일을 비활성화하고 새 크기로 다시 만듭니다.

sudo swapoff /swapfile
sudo rm /swapfile
sudo dd if=/dev/zero of=/swapfile bs=1MiB count=4096 status=progress
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
swapon --show --output=NAME,SIZE,USED,PRIO

/swapfile이 정상적으로 활성화된 뒤에만 임시 swap을 제거합니다.

sudo swapoff /swapfile-temporary
sudo rm /swapfile-temporary
swapon --show --output=NAME,TYPE,SIZE,USED,PRIO
free -h

용량을 줄일 때도 같은 절차가 필요한 이유

swap 용량을 줄이는 작업도 먼저 비활성화하고 작은 파일을 새로 만드는 방식으로 진행합니다. 예를 들어 4GB를 1GB로 줄이려면 위 명령의 count=4096count=1024로 바꿉니다. 현재 swap 사용량이 새 용량보다 크거나 메모리 압박이 지속되는 서버에서는 축소하지 않는 것이 안전합니다.

Btrfs 파일시스템에서 swap 파일 생성

Btrfs는 Copy-on-Write 방식이므로 일반 파일처럼 만든 swap 파일이 거부될 수 있습니다. Ubuntu 22.04의 Btrfs 매뉴얼은 swap 파일이 단일 장치·단일 데이터 프로필에 있어야 하고, 사전 할당되며 NOCOW·비압축 조건을 충족해야 한다고 설명합니다.

대상 경로의 파일시스템을 먼저 확인합니다.

findmnt -no FSTYPE -T /

결과가 btrfs이고 새 /swapfile을 만드는 경우 다음 순서로 NOCOW 속성을 먼저 설정합니다.

sudo truncate -s 0 /swapfile
sudo chattr +C /swapfile
sudo fallocate -l 2G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile

활성화 후에는 일반 절차와 동일하게 /swapfile none swap sw 0 0 항목을 /etc/fstab에 등록합니다. 활성 swap 파일이 포함된 Btrfs 서브볼륨은 스냅샷할 수 없으며 일부 balance·device 작업에도 제한이 생길 수 있습니다.

swap 설정 정상 여부 확인

활성 상태, 전체 메모리 통계, 파일 권한과 영구 등록 항목을 한 번에 점검합니다.

swapon --show --output=NAME,TYPE,SIZE,USED,PRIO
free -h
sudo stat -c '%a %U:%G %s %n' /swapfile
grep -nE '^[[:space:]]*/swapfile[[:space:]]' /etc/fstab
sudo findmnt --verify --verbose

다음 조건을 모두 만족하면 설정이 정상입니다.

  • swapon --show/swapfile과 의도한 용량이 표시됨
  • free -h의 Swap total이 예상 용량과 일치함
  • 파일 권한이 600이고 소유자가 root:root
  • /etc/fstab에 중복되지 않은 swap 항목이 한 줄 존재함
  • findmnt --verify에서 오류가 발생하지 않음

유지보수 창에 재부팅이 가능하다면 재부팅 후 자동 활성화 여부를 최종 확인할 수 있습니다.

sudo reboot

재접속 후 다음 명령을 실행합니다.

swapon --show
free -h

자주 발생하는 오류와 해결 방법

swap 파일 오류 진단표
증상 가능한 원인 확인 방법 해결 방법
swapon failed: Invalid argument 희소 파일, Copy-on-Write 파일, 지원되지 않는 파일시스템 구조 findmnt -no FSTYPE -T /swapfile과 생성 방법 확인 ext4에서는 dd로 다시 만들고, Btrfs에서는 NOCOW 절차 사용
swapoff failed: Cannot allocate memory swap 내용을 옮길 RAM 또는 다른 swap이 부족함 free -h, swapon --show, 메모리 사용 프로세스 확인 불필요한 서비스를 중지하거나 임시 swap을 먼저 활성화
read swap header failed mkswap을 실행하지 않았거나 파일이 손상됨 file /swapfile, 작업 이력 확인 swap을 비활성화한 상태에서 파일을 다시 만들고 mkswap 실행
권한이 안전하지 않다는 경고 swap 파일이 다른 사용자에게 읽기 가능함 stat -c '%a %U:%G' /swapfile sudo chown root:root /swapfilesudo chmod 600 /swapfile 실행
No space left on device swap 파일을 만들 디스크 여유 공간 부족 df -h /, df -i / 불필요한 파일을 안전하게 정리하거나 디스크 용량 확장
재부팅 후 swap이 사라짐 /etc/fstab 누락, 경로 오타, 파일 생성 실패 grep swap /etc/fstab, findmnt --verify, 부팅 로그 확인 중복 없는 올바른 항목을 등록하고 sudo swapon --all로 재확인
Operation not permitted 컨테이너 또는 VPS 정책에서 게스트의 swap 활성화를 제한함 가상화 유형과 서비스 제공업체 정책 확인 호스트 측 swap, 메모리 증설 또는 제공업체 지원 기능 사용

swap이 예상보다 많이 사용될 때

Linux는 한 번 swap으로 이동한 비활성 페이지를 RAM 여유가 생겼다고 즉시 모두 되돌리지 않을 수 있습니다. 높은 swap 사용량만으로 장애를 단정하지 말고 메모리 압박, major page fault, I/O 지연과 실제 응답 속도를 함께 살펴보십시오.

free -h
vmstat 1 10
ps aux --sort=-%mem | head -n 15

vmstatsiso가 지속적으로 높고 디스크 I/O 지연이 발생한다면 swap 용량을 단순히 늘리기보다 메모리 사용 원인과 서버 RAM 규모를 점검해야 합니다.

swap 파일 제거와 원상복구

swap 파일을 완전히 제거하려면 먼저 메모리 여유를 확인하고 해당 swap을 비활성화합니다.

free -h
swapon --show
sudo swapoff /swapfile

swapoff가 성공한 것을 확인한 뒤 /etc/fstab을 백업하고 /swapfile 항목을 삭제합니다.

sudo cp -a /etc/fstab "/etc/fstab.backup.$(date +%Y%m%d-%H%M%S)"
sudo nano /etc/fstab

설정 파일에서 다음 줄을 제거합니다.

/swapfile none swap sw 0 0

문법을 검증한 다음 파일을 삭제합니다.

sudo findmnt --verify --verbose
sudo rm /swapfile
swapon --show
free -h

fstab 백업으로 복원하는 방법

편집 과정에서 /etc/fstab에 문제가 생겼다면 생성한 백업 파일을 확인한 뒤 올바른 파일을 복원합니다.

sudo ls -lt /etc/fstab.backup.*
sudo cp -a /etc/fstab.backup.YYYYMMDD-HHMMSS /etc/fstab
sudo findmnt --verify --verbose

YYYYMMDD-HHMMSS는 실제 백업 파일명으로 바꾸십시오. swap 파일이 존재하고 초기화된 상태라면 sudo swapon --all로 다시 활성화할 수 있습니다.

관련 지구 IDC 기술자료

공식 참고자료

작성에 참고한 공식 문서
기관 문서 확인 내용 조회일
Canonical Ubuntu release cycle Ubuntu 22.04 LTS 표준 보안 유지보수 기간
Ubuntu Manpages swapon, swapoff(8) swap 활성화·비활성화, /etc/fstab, 희소 파일과 Copy-on-Write 제한, dd 권장
Ubuntu Manpages mkswap(8) 파일 기반 swap 영역 초기화와 활성화 순서
Ubuntu Manpages findmnt(8) 대상 경로의 파일시스템 확인과 /etc/fstab 검증 방법
Ubuntu Manpages btrfs(5) Btrfs swap 파일의 NOCOW·사전 할당 조건과 제한사항

자주 묻는 질문

swap 용량은 RAM과 같은 크기로 설정해야 하나요?

항상 같은 크기일 필요는 없습니다. 적정 용량은 RAM 크기만이 아니라 워크로드의 최대 메모리 사용량, 장애 시 필요한 완충 공간, 디스크 성능과 최대 절전 사용 여부에 따라 달라집니다. 운영 서버에서는 실제 메모리 사용 패턴을 측정한 뒤 용량을 정하는 것이 안전합니다.

swap 파일을 추가하면 서버가 빨라지나요?

일반적으로 swap은 RAM보다 훨씬 느리므로 성능을 높이는 수단이 아닙니다. 메모리 부족 시 프로세스가 즉시 종료되는 상황을 완화할 수 있지만, 지속적으로 swap 입출력이 발생하면 오히려 응답 속도가 크게 저하될 수 있습니다.

fallocate로 swap 파일을 만들어도 되나요?

일반적인 ext4 환경에서는 빠르게 생성되는 경우가 많지만, Ubuntu 22.04의 swapon 매뉴얼은 파일시스템에 따라 사전 할당 파일이 희소 파일로 해석될 가능성을 설명하고 가장 이식성 높은 방법으로 dd를 안내합니다. 이 문서는 파일시스템 차이에 따른 실패를 줄이기 위해 dd를 기본 방법으로 사용합니다.

swap 용량을 바꾼 뒤 재부팅해야 하나요?

필요하지 않습니다. swapoff, 파일 재생성, mkswap, swapon 순서로 즉시 변경할 수 있습니다. 다만 재부팅 후에도 유지되는지는 /etc/fstab 설정과 검증 결과를 확인해야 합니다.

vm.swappiness를 바꾸면 swap 용량도 변경되나요?

vm.swappiness는 커널이 익명 메모리를 swap으로 이동하는 경향에 영향을 주는 값이며 swap 파일의 실제 용량을 바꾸지 않습니다. 용량 변경은 이 문서처럼 파일을 새 크기로 다시 생성해야 합니다.

마무리

오늘은 Ubuntu 22.04에서 swap 파일을 생성하고 /etc/fstab에 영구 등록하는 방법, 그리고 기존 swap 용량을 안전하게 늘리거나 줄이는 절차를 설명드렸습니다.

용량 변경에서 가장 중요한 점은 활성 swap 파일을 직접 수정하지 않는 것과, swapoff 전에 RAM 또는 다른 swap 공간이 충분한지 확인하는 것입니다. 현재 swap이 사용 중이라면 임시 swap을 먼저 활성화하고 새 파일이 정상적으로 작동하는 것을 확인한 뒤 임시 파일을 제거하시기 바랍니다.

오늘 준비한 내용은 여기까지입니다. 다음에도 서버 운영에 도움이 되는 기술정보로 인사드리겠습니다.

  • 0 用户发现这个很有用
此文章对您是否有帮助?
« Back

Powered by WHMCompleteSolution