리눅스에서 스왑 파티션에 대해 알아야 할 사항

리눅스를 설치할 때, 설정 과정에서 리눅스를 위한 파티션과 함께 하드 디스크에 스왑 파티션이 추가될 것입니다. 그러나 이 스왑 파티션은 무엇을 위해 사용되며, 정말로 필요한 걸까요?
또한 읽기: 우분투에서 스왑이 필요할까? 현실적인 접근법
스왑이란 무엇인가?
멀티태스킹 운영 체제가 물리적 메모리가 부족할 때, 새로운 프로세스를 시작하거나 기존 프로세스에 더 많은 메모리를 할당할 수 없습니다. 이 문제를 해결하기 위해, 로컬 저장소(종종 하드 드라이브)에서 프로세스가 현재 실행되고 있지 않는 동안 임시로 저장할 수 있는 특별한 공간이 마련됩니다. 운영 체제는 비활성 프로세스를 메모리에서 하드 드라이브로 “스왑”합니다. 이렇게 하면 새로운 작업을 위해 메모리가 해제됩니다. 비활성 프로세스가 다시 활성화되면, 로컬 저장소에서 메모리로 스왑됩니다. 이 절차를 스와핑이라고 합니다.
스왑 공간은 정말로 필요한가?
스왑 공간이 기술적으로 필요한가요? 아닙니다. 리눅스는 스왑 없이도 작동할 수 있으며, 임베디드 솔루션 같은 특정 상황에서는 스왑 없이도 리눅스를 실행할 수 있습니다. 만약 운영 체제가 메모리가 부족한 상황에 처하면, 패닉이 발생하고 중단됩니다. 물리적 RAM이 충분하면, 기계는 아무 문제 없이 작동합니다.
스왑 공간이 실제로 필요한가요? 네. 스와핑은 컴퓨터 속도를 저해하지만(하드 디스크에 읽고 쓰는 것이 RAM에 접근하는 것보다 훨씬 느리기 때문), 물리적 메모리가 충분히 장착되어 있는 것이 스와핑을 피하는 최선의 해결책입니다. 그러나 스와핑이 바람직한 합당한 상황도 존재합니다. 예를 들어, 시스템 부팅 중에는 메모리를 소모하지만 효과적으로 아주 긴 시간 동안 잠자는 프로세스가 있을 수 있습니다. 또는 할당되고 쓰여지지만 다시는 사용되지 않는 메모리도 있습니다. 이러한 상황에서 스와핑 알고리즘은 이 메모리를 하드 드라이브로 이동시켜 소중한 시스템 메모리를 해제합니다. 이것은 실제로 항상 최대 가능한 RAM을 이용 가능하게 하여 성능을 향상시킵니다.

메모리에 모든 것이 저장될 만큼 충분한 물리적 RAM이 없는 시스템에서는 스왑 공간의 사용이 필수적입니다!
완전성을 위해 언급할 가치가 있는 것은 리눅스에는 메모리가 부족할 때 커널을 중단하는 대신 리소스를 해제하기 위해 프로세스를 종료하는 OOM(Killer)이라는 서브시스템이 있다는 점입니다. 이 시스템의 동작은 구성할 수 있습니다.
나는 얼마나 많은 스왑 공간을 할당해야 하나?
절대적인 규칙은 없으며 하드 디스크 공간이 상대적으로 저렴하기 때문에(기가바이트당 달러) 너무 적은 공간보다 너무 많은 공간을 할당하는 것이 좋습니다. 일반적인 규칙으로는 물리적 메모리의 두 배 또는 세 배의 스왑 공간이 필요합니다.
스왑 파티션 확장 없이 스왑 추가하기
기존 스왑 파티션을 변경하지 않고 시스템에 스왑 공간을 추가하는 두 가지 방법이 있습니다. 하나는 다른 드라이브의 스왑 파티션을 사용하는 것이고, 다른 하나는 스왑 파일을 사용하는 것입니다.
다른 하드 드라이브를 사용하려면 “Linux swap” 유형(코드 82)의 파티션을 생성한 다음 “ mkswap “ 명령어를 실행하여 스왑 공간을 준비합니다:
mkswap /dev/sdb2여기서 /dev/sdb2는 생성한 파티션의 이름입니다. 스왑 공간을 즉시 사용하려면 “ swapon “ 명령어를 실행합니다:
swapon /dev/sdb2현재 사용 중인 스왑 공간 목록을 확인하려면 “ swapon -s “를 사용하면 됩니다. 시스템에 스왑 공간을 영구적으로 추가하려면 /etc/fstab 파일을 편집하고 다음과 유사한 줄을 추가해야 합니다:
/dev/sdb2 none swap sw 00시스템에서 디스크를 고유 식별자로 이름짓고 있다면, blkid 명령어를 사용하여 장치의 ID 목록을 확인할 수 있습니다. /etc/fstab에서 스왑 공간을 마운트하는 줄은 다음과 유사하게 됩니다:
UUID=036da155-1ea1-4392-b8d4-700f65aa1ead none swap sw 00파일을 스왑으로 사용하려면 사용하고자 하는 파일 시스템에 큰 빈 파일( 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라는 커널 변수에 의해 제어됩니다. swappiness가 0이면 커널이 가능한 한 스와핑을 피하려고 하며, 100이면 커널이 스왑 공간 사용에 대해 공격적이 됩니다. 많은 리눅스 배포판의 기본 설정은 60입니다. 동적으로 이 숫자를 변경할 수 있는 명령어는 다음과 같습니다:
sudo sysctl vm.swappiness=10값을 영구적으로 설정하려면 /etc/sysctl.conf 파일에서 vm.swappiness 변수를 변경(또는 존재하지 않는 경우 추가)해야 합니다.
리눅스에서 스왑에 대해 궁금한 점이 있으면 알려주세요.
이 문서는 2013년 12월에 최초로 발행되었으며 2020년 8월에 업데이트되었습니다.