Linux에서 스왑 파일 생성 및 활성화

LinuxBeginner
지금 연습하기

소개

이 실습에서는 Linux에서 스왑 파일을 생성하고 활성화하는 기본적인 관리 작업을 배웁니다. 물리 RAM이 부족할 때 시스템의 가상 메모리를 늘릴 수 있으며, 이는 시스템을 운영하는 데 매우 중요합니다. 또한 전용 스왑 파티션을 만들지 않고도 스왑 공간을 추가하는 유연한 방법을 익히면서, 시스템 리소스를 효과적으로 관리하는 기본 명령줄 유틸리티를 직접 사용합니다.

먼저 swapon 명령으로 현재 스왑 공간을 확인합니다. 그런 다음 dd로 스왑 영역에 사용할 파일을 만들고, mkswap으로 스왑 파일 형식으로 지정한 후 활성화합니다. 마지막으로 재부팅 후에도 Linux가 해당 파일을 다시 활성화하도록 설정합니다. 실습을 마치면서 새 스왑 파일이 시스템에 정상적으로 설정되고 인식되는지 확인합니다.

swapon으로 현재 스왑 공간 확인

이 단계에서는 Linux 시스템의 현재 스왑 공간 설정을 확인합니다. 스왑 공간은 물리 메모리(RAM)가 가득 찼을 때 가상 메모리로 사용하는 하드 디스크의 일부입니다. 이를 통해 물리 RAM만 사용할 때보다 더 많은 애플리케이션을 실행할 수 있습니다.

먼저 페이징과 스왑에 사용할 장치와 파일을 지정하는 유틸리티인 swapon 명령을 사용합니다. 활성화된 스왑 장치의 요약 정보를 표시하도록 --show 옵션을 함께 사용합니다. 스왑 공간 관리는 관리자 작업이므로 sudo를 사용해 root 권한으로 명령을 실행해야 합니다.

터미널은 이미 ~/project 디렉터리에 있습니다. 다음 명령을 실행합니다.

sudo swapon --show

다음과 비슷한 출력이 표시됩니다. NAMESIZE 같은 세부 정보는 가상 머신의 초기 설정에 따라 다를 수 있습니다. 스왑 공간이 설정되지 않은 경우에는 이 명령이 아무 출력도 표시하지 않을 수 있습니다.

NAME        TYPE      SIZE USED PRIO
/dev/loop12 partition   2G   0B   -2

출력의 각 항목은 다음과 같습니다.

  • NAME: 스왑 장치 또는 파일의 이름입니다. 이 예에서는 루프 장치(/dev/loop12)입니다.
  • TYPE: 스왑 공간의 유형입니다. partition 또는 file일 수 있습니다.
  • SIZE: 스왑 공간의 전체 크기입니다.
  • USED: 현재 사용 중인 스왑 공간의 크기입니다.
  • PRIO: 스왑 공간의 우선순위입니다. 스왑 공간이 여러 개이면 우선순위가 높은 공간을 먼저 사용합니다.

이 명령을 실행해 시스템의 현재 스왑 설정을 확인했습니다. 다음 단계에서는 디스크를 다시 파티셔닝하지 않고 스왑 공간을 추가할 수 있는 유연한 방법인 새 스왑 파일을 생성하고 활성화합니다.

dd로 스왑 공간용 파일 생성

이 단계에서는 새 스왑 공간으로 사용할 전용 파일을 생성합니다. 스왑에 파일을 사용하는 방법은 하드 드라이브를 다시 파티셔닝할 필요가 없으므로 유연합니다.

데이터를 복사하고 변환하는 강력한 유틸리티인 dd 명령을 사용합니다. dd/dev/zero라는 특수 시스템 장치에서 데이터를 읽어 정확한 크기의 파일을 만들 수 있으므로 이 작업에 적합합니다. /dev/zero는 null 문자(0)를 끝없이 출력하는 장치입니다.

현재 디렉터리(~/project)에 swapfile이라는 이름의 250MB 파일을 만들려면 다음 명령을 실행합니다. 이 파일은 나중에 시스템이 관리하므로 sudo가 필요합니다.

sudo dd if=/dev/zero of=swapfile bs=1M count=250

이 명령의 각 항목은 다음과 같습니다.

  • sudo: root 권한으로 명령을 실행합니다.
  • dd: 사용할 명령줄 유틸리티입니다.
  • if=/dev/zero: input file(입력 파일)을 지정합니다. /dev/zero는 null 문자 스트림을 생성하는 특수 파일입니다.
  • of=swapfile: output file(출력 파일)을 지정합니다. 현재 디렉터리에 swapfile이라는 파일을 생성합니다.
  • bs=1M: block size(블록 크기)를 1MB로 설정합니다. dd는 1MB 단위로 데이터를 읽고 씁니다.
  • count=250: 블록 250개를 복사합니다. 블록 크기가 1M이므로 결과 파일 크기는 250 * 1M = 250MB입니다.

명령을 실행하면 다음과 같이 작업이 성공했음을 나타내는 출력이 표시됩니다.

250+0 records in
250+0 records out
262144000 bytes (262 MB, 250 MiB) copied, 0.270222 s, 970 MB/s

이제 250MB 파일을 생성했습니다. 다음 단계에서는 이 파일을 스왑 공간으로 인식할 수 있도록 형식을 지정하고 적절한 권한을 설정합니다.

mkswap으로 파일을 스왑 형식으로 지정

이 단계에서는 앞에서 만든 swapfile을 운영 체제가 유효한 스왑 영역으로 인식하도록 형식을 지정합니다. 이 작업에 mkswap 명령을 사용합니다.

mkswap 명령은 장치 또는 파일에 Linux 스왑 영역을 설정합니다. 커널이 식별할 수 있는 특수 서명을 파일에 기록합니다.

먼저 생성한 swapfile의 형식을 지정합니다. 터미널에서 다음 명령을 실행합니다.

sudo mkswap swapfile

명령을 실행하면 스왑 공간이 설정되었음을 나타내는 출력이 표시됩니다. 시스템은 새 스왑 영역에 고유한 식별자(UUID)를 할당합니다. 안전하지 않은 권한에 대한 경고가 표시될 수도 있으며, 다음 단계에서 이 문제를 해결합니다.

mkswap: swapfile: insecure permissions 0644, fix with: chmod 0600 swapfile
Setting up swapspace version 1, size = 250 MiB (262139904 bytes)
no label, UUID=aabf0226-9f7b-47f5-9ad3-10248552795c

중요한 보안 참고 사항: 스왑 파일에는 컴퓨터 메모리에 있던 민감한 데이터가 포함될 수 있습니다. 보안을 위해 root 사용자만 이 파일을 읽고 쓸 수 있어야 합니다. 시스템의 다른 사용자는 이 파일에 접근할 수 없어야 합니다.

올바른 권한을 설정하려면 chmod 명령을 사용합니다. 권한을 600으로 설정하면 소유자(root)에게 읽기 및 쓰기 권한을 부여하고 다른 모든 사용자의 접근 권한을 제거합니다.

swapfile을 보호하려면 다음 명령을 실행합니다.

sudo chmod 600 swapfile

명령이 성공하면 아무 출력도 표시되지 않습니다. 이제 swapfile의 형식을 지정하고 권한을 보호했습니다. 다음 단계에서 시스템이 이 파일을 활성화하고 사용하도록 설정합니다.

새 스왑 파일 활성화 및 영구 설정

swapfile을 생성하고 준비했습니다. 이제 형식과 권한은 올바르게 설정되었지만 Linux 커널은 아직 이 파일을 가상 메모리로 사용하지 않습니다. 이 단계에서는 스왑 파일을 활성화해 시스템에서 사용할 수 있도록 합니다.

이를 위해 swapon 명령을 다시 사용합니다. 첫 단계에서는 --show 옵션을 사용해 현재 설정을 확인했습니다. 이번에는 swapfile의 경로를 인수로 지정해 파일을 활성화합니다.

터미널은 ~/project 디렉터리에 있습니다. 새 스왑 공간을 활성화하려면 다음 명령을 실행합니다.

sudo swapon swapfile

명령의 각 항목은 다음과 같습니다.

  • sudo: 스왑 공간 활성화는 root 권한이 필요한 시스템 수준 작업이므로 사용합니다.
  • swapon: 스왑에 사용할 장치와 파일을 활성화하는 명령입니다.
  • swapfile: 활성화할 파일의 이름입니다. 파일이 있는 ~/project 디렉터리에 있으므로 전체 경로를 지정하지 않아도 됩니다.

명령이 성공하면 아무 출력도 표시되지 않습니다. 이는 많은 Linux 명령에서 일반적인 동작이며, 출력이 없으면 정상적으로 실행된 것입니다.

swapon 명령으로 활성화한 파일은 현재 부팅 세션에서만 사용됩니다. 재부팅 후에도 Linux가 파일을 자동으로 활성화하도록 하려면 스왑 파일의 절대 경로가 포함된 항목을 /etc/fstab에 추가합니다.

echo '/home/labex/project/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab

여섯 개의 필드는 스왑 파일을 식별하고, 스왑에는 마운트 지점이 없으므로 none을 사용하며, swap 유형과 표준 sw 옵션을 선택합니다. 마지막 두 개의 0은 덤프 및 파일 시스템 검사를 비활성화합니다.

이제 swapfile이 활성화되었고 재부팅 후에도 사용할 수 있도록 설정되었습니다. 마지막 단계에서는 새 스왑 공간이 시스템의 전체 메모리 리소스에 정상적으로 추가되었는지 확인합니다.

새 스왑 공간 설정 확인

이 단계에서는 스왑 파일을 생성하고, 형식을 지정하고, 활성화하고, 영구적으로 설정한 후 시스템이 새 스왑 파일을 인식하는지 확인합니다. 이를 통해 앞의 모든 단계를 올바르게 완료했는지 확인할 수 있습니다.

먼저 실습 시작 부분에서 사용한 swapon --show 명령을 다시 실행합니다. 이제 명령을 실행하면 방금 추가한 swapfile을 포함해 활성화된 스왑 공간의 최신 목록이 표시됩니다.

터미널에서 다음 명령을 실행합니다.

sudo swapon --show

이제 출력에는 두 항목이 표시됩니다. 기존 스왑 파티션이 있다면 해당 파티션과 새 스왑 파일이 함께 표시됩니다. /home/labex/project/swapfile에 해당하는 새 줄을 확인합니다.

NAME                         TYPE      SIZE USED PRIO
/dev/loop12                  partition   2G   0B   -2
/home/labex/project/swapfile file      250M   0B   -3

이제 시스템이 250M 크기의 file 유형 스왑 공간을 인식하는 것을 확인할 수 있습니다. 이 공간에는 PRIO 값으로 우선순위도 할당되어 있습니다. 커널은 우선순위가 더 높은 스왑 공간을 먼저 사용합니다.

메모리와 스왑 사용량을 확인하는 데 유용한 또 다른 명령은 free입니다. -h(--human) 옵션을 사용하면 크기가 메가바이트(M) 또는 기가바이트(G)로 표시되어 출력을 더 쉽게 읽을 수 있습니다.

free -h 명령을 실행합니다.

free -h

시스템 메모리 요약 정보가 표시됩니다. Swap 줄을 확인합니다.

               total        used        free      shared  buff/cache   available
Mem:           3.5Gi       608Mi       732Mi        16Mi       2.2Gi       2.7Gi
Swap:          2.2Gi          0B       2.2Gi

Swap 줄의 total 값에는 기존 스왑 공간과 새로 추가한 250MB 파일의 크기가 합산되어 표시됩니다. 예를 들어 시작할 때 스왑 공간이 2G였다면 새 전체 크기는 약 2.2G입니다.

이제 Linux 시스템에 새 스왑 파일을 추가하고 확인했습니다. 시스템에서 사용할 수 있는 가상 메모리가 증가했습니다.

요약

이 실습에서는 Linux 시스템에 가상 메모리를 추가하기 위해 스왑 파일을 생성하고 활성화하는 방법을 배웠습니다. 먼저 sudo swapon --show 명령으로 기존 스왑 공간 설정을 확인하고 시스템 가상 메모리의 현재 상태와 출력 내용을 해석했습니다.

그다음 dd 명령으로 필요한 디스크 공간을 할당해 새 스왑 파일을 생성했습니다. mkswap으로 이 파일을 스왑 용도로 형식 지정하고, swapon 명령으로 활성화했습니다. 또한 Linux가 재부팅 후 파일을 다시 활성화할 수 있도록 /etc/fstab에 파일을 추가했습니다. 마지막으로 swapon --show를 다시 실행해 새 스왑 파일이 정상적으로 추가되고 활성화되었는지 확인했습니다.