Linux에서 스왑 파일을 만드는 방법

파티션을 변경하지 않고도 리눅스 컴퓨터에서 스왑 공간을 늘리는 방법을 알아봅니다. 기존 스왑 공간을 확대하거나 새로운 스왑 파일을 추가하는 간단한 방법을 소개합니다.

스왑 파일과 스왑 파티션의 차이점

리눅스 환경에서 스왑 공간을 늘리거나 새로 추가해야 하는 상황은 다양합니다.

  • 스왑 공간이 빈번하게 최대치에 도달하거나 거의 사용되고 있을 수 있습니다.
  • 설치 과정에서 잘못된 설정을 선택하여 스왑 공간 설정을 하지 않았을 수도 있습니다.
  • 과거에 스왑 공간이 너무 많다고 판단하여 사용하지 않았지만, 다시 필요하게 되었을 수도 있습니다.
  • 시스템 관리 중에 스왑 공간이 전혀 설정되지 않은 시스템을 접하게 될 수도 있습니다.

이러한 상황에 대한 간단한 해결책은 스왑 파일을 사용하는 것입니다. 스왑 파일은 스왑 공간으로 사용하기 위해 미리 할당된 특수 파일이며, 기존 스왑 공간(파티션 또는 파일)과 함께 사용될 수 있습니다.

과거에는 스왑 파일을 사용하는 것이 스왑 파티션에 비해 성능 저하를 유발한다는 인식이 있었지만, 기계식 하드 드라이브의 성능 향상과 리눅스 운영 체제 내 스왑 기능의 효율성 개선으로 인해 이러한 차이는 거의 없어졌습니다. 실제로 일부 리눅스 배포판에서는 기본적으로 스왑 파티션 대신 스왑 파일을 생성합니다.

스왑 공간은 단순히 RAM 부족 시 메모리를 확보하는 수단일 뿐만 아니라, 시스템의 안정성을 유지하는 데 중요한 역할을 합니다. 스왑 공간이 없으면 커널이 정상적인 메모리 관리를 수행하기 어려워집니다. 이제 스왑 공간을 쉽게 추가하는 방법을 자세히 살펴보겠습니다.

주의 사항: Btrfs 파일 시스템 및 SSD

시작하기 전에 몇 가지 고려해야 할 사항이 있습니다.

Btrfs 파일 시스템은 스왑 파일 사용에 있어 특정한 주의가 필요합니다. 과거에는 Btrfs의 copy-on-write 기능과 스왑 파일의 작동 방식이 충돌하여 스왑 파일 사용이 지원되지 않았습니다. 하지만 커널 5.0부터는 특정 조건 하에서 Btrfs 파일 시스템에서도 스왑 파일을 사용할 수 있게 되었습니다.

스왑 파일을 Btrfs 파일 시스템에서 사용하려면 다음 조건을 충족해야 합니다.

  • 파일에 NOCOW (No Copy-on-Write) 속성이 설정되어 있어야 합니다.
  • 압축되지 않아야 합니다.
  • 여러 하드 드라이브에 걸쳐 있지 않아야 합니다.

대부분의 사용자들은 기본 ext4 파일 시스템을 사용하므로, Btrfs 관련 문제는 크게 신경 쓰지 않아도 됩니다.

SSD(Solid-State Drive)가 처음 등장했을 때는 잦은 쓰기 작업으로 인해 SSD 수명에 대한 우려가 있었습니다. 그래서 SSD에 스왑 공간을 설정하거나 시스템 로그를 저장하지 말라는 의견도 있었지만, 현재는 판매되는 대부분의 SSD가 충분한 수명을 보장하므로 이러한 걱정은 많이 줄었습니다. 또한 SSD의 스왑 파일은 기계식 하드 드라이브의 스왑 파티션보다 성능이 훨씬 좋습니다.

기존 스왑 공간 확인

새로운 스왑 공간을 추가하기 전에 시스템에 설정된 기존 스왑 공간을 확인하는 것이 좋습니다. 다음 두 가지 명령을 사용하여 확인할 수 있습니다.

free -h 명령은 사용된 메모리와 사용 가능한 메모리에 대한 정보를 제공합니다. -h 옵션은 결과를 사람이 읽기 쉬운 형태로 표시합니다.

free -h

위의 예시에서는 스왑 공간이 설정되어 있지 않음을 확인할 수 있습니다. 또한 사용 가능한 RAM은 881MB이고, 버퍼 및 캐시로 사용되는 메모리는 871MB임을 알 수 있습니다. 리눅스는 여유 RAM을 캐싱 및 버퍼링에 활용하며, 이러한 메모리는 필요에 따라 즉시 다른 용도로 사용될 수 있습니다.

swapon --show 명령을 사용하면 현재 활성화된 스왑 장치 목록을 확인할 수 있습니다.

swapon --show

이 명령의 결과가 없다면 스왑 공간이 설정되지 않았다는 의미입니다. 만약 기존 스왑 공간이 있다면 그 크기를 고려하여 새로운 스왑 파일 크기를 결정해야 합니다.

적절한 스왑 공간 크기는?

과거에는 “RAM 용량의 두 배”를 스왑 공간으로 설정하는 것이 일반적인 권장 사항이었지만, 이는 RAM 용량이 매우 제한적이었을 때의 이야기입니다. RAM 가격이 저렴해지고 메모리 요구량이 높은 프로그램과 게임이 늘어남에 따라 PC 사양도 바뀌었습니다. 요즘에는 32GB RAM을 탑재한 가정용 PC도 흔하며, 32GB RAM 시스템에서 스왑 공간으로 64GB를 할당하는 것은 지나치게 과도합니다.

적절한 스왑 공간 크기는 여전히 논쟁의 여지가 있지만, Ubuntu Swap FAQ와 같은 자료에서 합리적인 권장 사항을 확인할 수 있습니다. 이는 시스템 RAM 용량과 최대 절전 모드 사용 여부에 따라 적절한 스왑 공간 크기를 제시합니다. 중요한 점은 스왑 파일은 쉽게 삭제하고 크기를 조절할 수 있다는 것입니다. 스왑 파일을 만들어서 사용해보고 필요에 따라 쉽게 크기를 조정하거나 추가할 수 있습니다.

Ubuntu Swap FAQ를 참고하여 적절한 스왑 파일 크기를 선택하고 시스템의 스왑 공간 사용량을 모니터링하세요. 필요하면 스왑 파일을 삭제하거나 크기를 쉽게 변경할 수 있습니다. 스왑 파일은 파티션을 변경하는 것에 비해 매우 간편합니다.

스왑 파일 생성

스왑 파일 생성 시에는 fallocate 명령을 사용하지 않는 것이 좋습니다. 커널 내부에서 스왑 파일은 파일 시스템의 도움 없이 직접 쓰기 작업을 수행하도록 설계되어 있으며, fallocate로 생성된 파일은 일부 파일 시스템에서 구멍이 있거나 copy-on-write로 처리될 수 있기 때문입니다. swapon 명령은 이러한 파일을 스왑 파일로 인식하지 못합니다.

가장 안전한 스왑 파일 생성 방법은 dd 명령과 /dev/zero를 사용하는 것입니다.

예를 들어, 2GB RAM을 가진 컴퓨터에서 1GB 스왑 파일을 생성하는 방법은 다음과 같습니다.

if 옵션은 입력 파일로 0 바이트 스트림을 제공하는 /dev/zero를 사용합니다. of 옵션은 출력 파일 경로와 이름으로 /swapfile을 지정합니다. bs 옵션은 블록 크기를 바이트 단위로 설정하며, count 옵션은 읽고 쓸 블록 수를 설정합니다.

sudo dd if=/dev/zero of=/swapfile bs=1024 count=1048576

파일 생성 후에는 기록된 블록 수, 파일 크기, 생성 시간, 데이터 전송 속도 등의 정보를 확인할 수 있습니다.

ls / 명령으로 생성된 파일을 확인할 수 있습니다.

ls /

스왑 파일 준비

스왑 파일을 사용하기 전에 mkswap 명령을 사용하여 스왑 파일로 포맷해야 합니다.

sudo mkswap /swapfile

스왑 파일이 준비되면 파일 권한에 대한 경고 메시지가 나타납니다. 스왑 파일은 루트 사용자만 읽고 쓸 수 있도록 권한을 변경해야 합니다.

스왑 파일 활성화

스왑 파일 권한을 변경하여 루트 사용자만 사용할 수 있도록 제한합니다.

sudo chmod 600 /swapfile

이제 swapon 명령을 사용하여 시스템에 스왑 파일 사용을 알려줍니다.

sudo swapon /swapfile

이제 스왑 파일이 활성화되었습니다.

fstab에 스왑 파일 추가

시스템을 재부팅한 후에도 스왑 파일을 계속 사용하려면 /etc/fstab 파일에 해당 정보를 추가해야 합니다. 텍스트 편집기를 사용하여 편집할 수 있지만, 여기서는 GUI 기반 gedit 편집기를 사용하여 보여드리겠습니다.

sudo gedit /etc/fstab

/etc/fstab 파일 맨 아래에 다음 줄을 추가합니다.

/swapfile    none    swap    sw    0    0

각 필드의 의미는 다음과 같습니다.

  • 파일 시스템: 스왑 파일의 경로와 이름입니다.
  • 마운트 지점: 스왑 파일은 파일 시스템처럼 마운트되지 않으므로 “none”으로 설정합니다.
  • 유형: “swap”으로 설정합니다.
  • 옵션: 부팅 시 swapon -a 명령이 실행되어 스왑으로 표시된 모든 장치를 활성화합니다. sw 옵션은 해당 스왑 리소스를 swapon -a 명령의 제어 하에 두도록 지시합니다. 일부 사용자는 이 필드를 무시하는 것으로 생각하지만, 그렇지 않습니다. 올바른 옵션을 사용하는 것이 좋습니다.
  • 덤프: 0으로 설정합니다. 이 경우에는 관련이 없습니다.
  • 패스: 0으로 설정합니다. 이 경우에는 관련이 없습니다.

변경 내용을 저장하고 편집기를 종료합니다.

스왑 사용량 확인

스왑 공간이 실제로 사용되는지 확인하려면 swapon --show 명령을 사용합니다.

swapon --show

각 열의 의미는 다음과 같습니다.

  • 이름: 스왑 파티션 또는 스왑 파일의 이름입니다.
  • 유형: 스왑 장치의 유형입니다.
  • 크기: 스왑 리소스의 크기입니다.
  • 사용됨: 사용된 스왑 공간의 크기입니다.
  • Prio: 해당 스왑 공간의 우선 순위입니다.

스왑 공간 우선순위

각 스왑 공간에는 우선순위가 할당됩니다. 우선순위가 주어지지 않으면 자동으로 할당되며 음수 값을 가집니다. 사용자가 직접 설정할 수 있는 우선순위는 0부터 32767까지이며, 우선순위가 높은 스왑 공간이 먼저 사용됩니다. 동일한 우선순위를 가진 스왑 공간이 여러 개 있는 경우, 모두 사용될 때까지 순차적으로 사용되며, 시스템은 다음으로 낮은 우선순위의 스왑 공간을 찾습니다.

만약 스왑 공간이 하나뿐이라면 우선순위는 크게 중요하지 않지만, 우선순위를 변경하는 방법을 보여드리겠습니다.

우선순위를 설정하려면 /etc/fstab 항목의 옵션 필드에 pri=(우선순위) 옵션을 추가합니다. 예를 들어, 우선순위를 10으로 설정하려면 다음과 같이 편집합니다.

/swapfile    none    swap    sw,pri=10    0    0

sw 옵션과 쉼표로 구분하여 pri=10을 옵션 필드에 추가합니다. sw, 쉼표, pri=10 사이에는 공백이 없어야 합니다.

시스템을 재부팅하고 swapon --show 명령을 실행하면 스왑 공간의 우선순위가 변경된 것을 확인할 수 있습니다.

swapon --show

이제 스왑 공간의 우선순위가 10으로 높아진 것을 확인할 수 있습니다. 이는 /etc/fstab 항목의 옵션 필드가 무시되지 않는다는 것을 의미합니다.

스왑 공간 생성 간소화

위에 설명된 내용을 간략하게 정리하면, 다음 명령들을 사용하여 새로운 스왑 공간을 빠르게 생성할 수 있습니다.

sudo dd if=/dev/zero of=/swapfile2 bs=1024 count=104857
sudo mkswap /swapfile2
sudo chmod 600 /swapfile2
sudo swapon /swapfile2

스왑 공간이 제대로 작동하는지 확인해 봅시다.

swapon --show

영구적으로 스왑 공간을 설정하려면, /etc/fstab 파일에 해당 정보를 추가하십시오.

이제 스왑 공간 설정이 완료되었습니다.