리눅스 스왑 파일 생성 및 활성화

CompTIABeginner
지금 연습하기

소개

이 실습에서는 리눅스 시스템 관리의 핵심 작업 중 하나인 스왑 파일 생성 및 활성화 방법을 배웁니다. 이 과정을 통해 물리적 RAM 이 부족한 상황에서 시스템의 가상 메모리를 확장하는 능력을 갖추게 됩니다. 전용 스왑 파티션을 만드는 대신 유연하게 활용할 수 있는 스왑 파일을 생성하고, 시스템 리소스를 효과적으로 관리하기 위한 필수 명령줄 도구들을 직접 실습해 봅니다.

전체 작업 흐름은 swapon 명령어를 사용하여 현재 스왑 공간 상태를 확인하는 것으로 시작합니다. 그다음 dd 명령어로 스왑 영역으로 사용할 파일을 생성하고, mkswap으로 스왑 형식에 맞게 포맷한 뒤 활성화합니다. 마지막으로 새로운 스왑 파일이 성공적으로 구성되어 시스템에서 정상적으로 인식되는지 확인하며 실습을 마무리합니다.

swapon 으로 현재 스왑 공간 확인하기

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

먼저 페이징 및 스와핑을 위한 장치와 파일을 지정하는 도구인 swapon 명령어를 사용합니다. --show 옵션을 함께 사용하면 현재 활성화된 스왑 장치들의 요약 정보를 볼 수 있습니다. 스왑 공간 관리는 시스템 관리 작업이므로, 루트 권한으로 명령을 실행하기 위해 sudo를 사용해야 합니다.

이미 ~/project 디렉토리에 위치한 터미널에서 다음 명령어를 실행하세요.

sudo swapon --show

다음과 유사한 출력 결과가 나타납니다. 가상 머신의 초기 설정에 따라 NAME이나 SIZE 등의 세부 정보는 다를 수 있습니다. 만약 스왑 공간이 전혀 설정되어 있지 않다면 아무런 출력도 나오지 않을 수 있습니다.

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

출력 항목의 의미는 다음과 같습니다.

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

이 명령을 통해 시스템의 현재 스왑 구성을 성공적으로 확인했습니다. 다음 단계에서는 디스크 파티션을 다시 나누지 않고도 스왑 공간을 추가할 수 있는 유연한 방법인 스왑 파일 생성 및 활성화 방법을 알아보겠습니다.

dd 를 사용하여 스왑용 파일 생성하기

이전 단계에서 기존 스왑 설정을 확인하는 방법을 배웠습니다. 이제 새로운 스왑 공간으로 사용할 전용 파일을 생성해 보겠습니다. 파일을 스왑으로 사용하는 방식은 하드 드라이브의 파티션을 변경할 필요가 없어 매우 유연한 방법입니다.

데이터 복사 및 변환을 위한 강력한 도구인 dd 명령어를 사용하겠습니다. 이 명령어는 null 문자 (0) 를 끝없이 생성하는 특수 시스템 장치인 /dev/zero에서 데이터를 읽어와 정확한 크기의 파일을 만들 수 있어 이 작업에 매우 적합합니다.

현재 디렉토리 (~/project) 에 swapfile이라는 이름의 250MB 파일을 생성하려면 다음 명령어를 실행하세요. 이 파일은 나중에 시스템에서 관리하게 되므로 sudo 권한이 필요합니다.

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

명령어의 각 옵션을 살펴보겠습니다.

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

명령어를 실행하면 작업이 성공적으로 완료되었음을 알리는 출력이 나타납니다.

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

이제 250MB 크기의 파일을 성공적으로 생성했습니다. 다음 단계에서는 이 파일을 시스템이 스왑 공간으로 인식할 수 있도록 포맷하고 적절한 권한을 설정하겠습니다.

mkswap 으로 파일을 스왑 형식으로 포맷하기

이전 단계에서 0 으로 채워진 swapfile을 생성했습니다. 하지만 운영체제는 아직 이 파일을 유효한 스왑 영역으로 인식하지 못합니다. 따라서 이 용도에 맞게 파일을 포맷해야 하는데, 이때 mkswap 명령어를 사용합니다.

mkswap 명령어는 장치나 파일에 리눅스 스왑 영역을 설정합니다. 커널이 식별할 수 있도록 파일에 특수한 서명을 기록하는 역할을 합니다.

먼저 생성한 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의 포맷과 권한 설정이 모두 완료되었습니다. 다음 단계에서 이 파일을 활성화하여 시스템에서 사용하도록 설정하겠습니다.

swapon 으로 새로운 스왑 파일 활성화하기

swapfile 생성과 준비를 모두 마쳤습니다. 파일은 포맷되었고 올바른 권한도 갖추었지만, 리눅스 커널은 아직 이를 가상 메모리로 사용하고 있지 않습니다. 이번 단계에서는 스왑 파일을 활성화하여 시스템이 즉시 사용할 수 있도록 만들겠습니다.

이를 위해 다시 한번 swapon 명령어를 사용합니다. 첫 번째 단계에서는 --show 옵션으로 설정을 확인했지만, 이번에는 활성화하려는 swapfile의 경로를 인자로 전달합니다.

~/project 디렉토리에서 다음 명령어를 실행하여 새로운 스왑 공간을 활성화하세요.

sudo swapon swapfile

명령어의 구성을 살펴보겠습니다.

  • sudo: 스왑 공간 활성화는 루트 권한이 필요한 시스템 수준의 작업입니다.
  • swapon: 스왑용 장치나 파일을 활성화하는 명령어입니다.
  • swapfile: 활성화하려는 파일의 이름입니다. 파일이 있는 ~/project 디렉토리에서 명령을 실행하므로 전체 경로를 입력할 필요는 없습니다.

명령이 성공하면 아무런 출력도 나타나지 않습니다. 이는 많은 리눅스 명령어의 표준적인 동작 방식으로, 오류가 없음을 의미합니다.

이제 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 가 됩니다.

리눅스 시스템에 새로운 스왑 파일을 성공적으로 추가하고 확인하여, 시스템이 활용할 수 있는 가상 메모리를 더 많이 확보했습니다.

요약

이 실습에서는 리눅스 시스템에 가상 메모리를 추가하기 위해 스왑 파일을 생성하고 활성화하는 방법을 배웠습니다. 먼저 sudo swapon --show 명령어를 통해 기존 스왑 공간 설정을 검토하여 시스템 가상 메모리의 현재 상태를 파악하고 출력 결과를 해석하는 법을 익혔습니다.

초기 검토 후, dd 명령어를 사용하여 원하는 디스크 공간을 할당하고 새로운 스왑 파일을 생성했습니다. 그다음 mkswap으로 이 파일을 스왑 용도에 맞게 포맷하고, swapon 명령어로 활성화하여 시스템이 즉시 사용할 수 있도록 만들었습니다. 마지막으로 swapon --show를 다시 실행하여 새로운 스왑 파일이 성공적으로 추가 및 활성화되었음을 확인하고 최종 구성을 점검했습니다.