Computer >> 컴퓨터 >  >> 시스템 >> Linux

리눅스 스왑 파티션 완벽 가이드: 개념부터 설정 방법까지

리눅스 스왑 파티션 완벽 가이드: 개념부터 설정 방법까지

리눅스를 설치하면 설치 프로그램이 리눅스 자체 파티션과 함께 하드 디스크에 스왑(swap) 파티션을 생성하는 경우가 많습니다. 그런데 이 스왑 파티션은 정확히 어떤 용도로 쓰이며, 정말 꼭 필요한 것일까요?

스왑(Swap)이란 무엇인가?

멀티태스킹 운영체제는 물리적 메모리가 부족해지면 새로운 프로세스를 시작하거나 기존 프로세스에 더 많은 메모리를 할당할 수 없게 됩니다. 이 문제를 해결하기 위해 로컬 저장소(주로 하드 드라이브)의 특정 공간을 별도로 확보해 현재 실행 중이 아닌 프로세스를 임시 보관하는 영역으로 사용합니다. 운영체제는 비활성 상태의 프로세스를 메모리에서 하드 디스크로 '스왑 아웃'하여 메모리를 비우고 새로운 작업에 활용할 수 있게 합니다. 이후 해당 프로세스가 다시 활성화되면 저장소에서 메모리로 되돌려지는데, 이 일련의 과정을 '스왑핑(swapping)'이라고 부릅니다.

스왑 공간은 정말 필요한가?

기술적인 관점에서 스왑 공간이 필수인가? 답은 '아니오'입니다. 리눅스는 스왑 없이도 동작할 수 있으며, 임베디드 시스템처럼 일부 환경에서는 실제로 스왑 없이 구동되기도 합니다. 다만 메모리가 부족해지면 커널 패닉이 발생해 시스템이 멈출 수 있습니다. 물리적 RAM이 충분하다면 스왑 없이도 아무 문제 없이运行됩니다.

실질적인 관점에서 필요한가? 답은 '예'입니다. 스왑핑은 하드 디스크 읽기·쓰기 속도가 RAM 접근보다 훨씬 느리기 때문에 컴퓨터를 느리게 만듭니다. 따라서 물리적 메모리를 넉넉히 장착하는 것이 스왑을 피하는 최선의 방법이지만, 스왑이 오히려 도움이 되는 상황도 분명히 존재합니다. 예를 들어 부팅 시 실행되어 메모리를 차지한 뒤 아주 오랫동안 대기 상태로 머무는 프로세스나, 한 번 할당되고 기록된 후 다시는 쓰이지 않는 메모리가 그렇습니다. 이런 경우 스왑 알고리즘이 해당 메모리를 하드 디스크로 옮겨 소중한 시스템 메모리를 확보합니다. 결과적으로 항상 최대한의 RAM을 사용할 수 있어 성능이 향상됩니다.

리눅스 스왑 파티션 완벽 가이드: 개념부터 설정 방법까지

모든 데이터를 메모리에 올리기에 물리적 RAM이 부족한 시스템이라면 스왑 공간 사용은 필수입니다!

참고로 리눅스에는 OOM(Out-Of-Memory) 킬러라는 서브시스템도 있습니다. 메모리가 고갈될 때 커널을 멈추는 대신 프로세스들을 종료해 자원을 확보하는 방식으로 동작하며, 그 행동은 사용자가 설정할 수 있습니다.

스왑 공간은 얼마나 할당해야 할까?

절대적인 규칙은 없습니다. 하드 디스크 공간이 저렴한 요즘(GB당 비용 기준) 부족하게 두는 것보다 넉넉하게 할당하는 편이 좋습니다. 경험상 물리적 메모리의 2~3배 정도의 스왑 공간을 확보하는 것이 권장됩니다.

스왑 파티션을 확장하지 않고 스왑 추가하기

기존 스왑 파티션을 건드리지 않고 스왑 공간을 늘리는 방법은 두 가지입니다. 하나는 다른 드라이브에 스왑 파티션을 만드는 것이고, 다른 하나는 스왑 파일을 사용하는 것입니다.

다른 하드 드라이브를 활용하려면 'Linux swap' 타입(코드 82)의 파티션을 생성한 후 mkswap 명령으로 스왑 공간을 준비합니다:

mkswap /dev/sdb2

여기서 /dev/sdb2는 생성한 파티션 이름입니다. 즉시 사용하려면 swapon 명령을 실행합니다:

swapon /dev/sdb2

swapon -s 명령으로 현재 사용 중인 스왑 공간 목록을 확인할 수 있습니다. 스왑 공간을 영구적으로 등록하려면 /etc/fstab 파일을 편집해 다음과 같은 줄을 추가해야 합니다:

/dev/sdb2       none    swap    sw      0       0

시스템이 UUID 같은 고유 식별자로 디스크를 관리한다면 blkid 명령으로 장치 ID 목록을 확인하세요. 이 경우 /etc/fstab의 스왑 마운트 줄은 다음과 같이 작성됩니다:

UUID=036da155-1ea1-4392-b8d4-700f65aa1ead  none  swap  sw  0  0

파일을 스왑으로 사용하려면 dd 명령으로 스왑용 파일시스템 위에 빈 파일을 원하는 크기로 생성합니다. 예를 들어 1GB 파일을 만들려면 다음과 같이 입력합니다:

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

여기서 /store/swapfile은 원하는 파일시스템상의 스왑 파일 경로입니다.

추가 스왑 파티션과 마찬가지로 이 파일도 mkswap으로 준비한 뒤 swapon으로 활성화하고, /etc/fstab에 등록해야 합니다. 절차는 위와 동일하며, 스왑 공간 매개변수로 /dev/sdb2 대신 /store/swapfile을 지정하면 됩니다.

스와피니스(Swappiness)

리눅스 커널은 프로세스를 메모리에서 얼마나 적극적으로 스왑 아웃할지 조정할 수 있습니다. 이 성향은 swappiness라는 커널 변수로 제어됩니다. 값이 0이면 커널은 가능한 한 스왑을 피하고, 100이면 스왑 공간을 매우 적극적으로 사용합니다. 많은 배포판의 기본값은 60입니다. 다음 명령으로 값을 동적으로 변경할 수 있습니다:

sudo sysctl vm.swappiness=10

값을 영구적으로 설정하려면 /etc/sysctl.conf 파일에서 vm.swappiness 변수를 변경하거나(없다면 추가) 하면 됩니다.

리눅스 스왑에 대해 더 궁금한 점이 있다면 의견으로 남겨주세요.

이 글은 2013년 12월에 처음 게시되었으며 2020년 8월에 업데이트되었습니다.