개인/리눅스

[리눅스] swap 생성 및 관리 (mkswap / dd)

OmeGa2 2020. 2. 7. 18:15

swap 메모리는 무엇일까?

스왑(swap)메모리를 이해하기 위해서는 RAM과 하드디스크에 대해서 먼저 알아두는것이 좋다.

 

RAM과 하드디스크의 역할

하드디스크는 보조기억장치, RAM은 주기억장치이다. 

 

컴퓨터에 설치된 프로그램은 모두 하드디스크에 저장되어 있다. 이 프로그램을 실행하면 관련 데이터가 하드디스크에서 RAM으로 옮겨지게 된다. 이후 프로그램을 관련된 데이터를 처리하는 일은 CPU의 역할이다. 

 

결국 RAM은 CPU가 처리해야하는 데이터가 임시적으로 저장된 곳이다. 즉 실질적으로 프로그램을 실행하면 CPU는 RAM에 들어있는 데이터를 읽어와서 처리한다. RAM에서는 하드디스크에 저장된 데이터의 일부를 복사해서 저장하며 필요에 따라 CPU로 전달하는 역할을 수행한다. 

 

이후 RAM에 용량이 가득차게 되면 데이터손실이 일어나거나 여러 문제나 시스템에러가 생길 확률이 높다.  이를 방지하기 위해서 swap 메모리영역을 사용한다.

 

swap 이란?

사전적인 의미로 스왑은 교환한다. 라는 의미를 가지고 있다. 리눅스에서도 이와 비슷한 개념으로 사용하고 있다.

 

리눅스는 가상메모리라는 것을 지원한다. 결론부터 말하자면 스왑 메모리란, 하드디스크의 일부를 RAM처럼 사용할 수 있게 만드는 기술이다. 

 

물리적인 메모리 RAM 은 CPU가 처리하는 데이터가 임시저장되는 공간이다. 스왑은 만약 프로그램 용량이 커서 RAM에 수용할 수 있는 용량을 초과하는 경우를 대비해서 예비공간의 역할을 수행한다고 보면 된다.

 

RAM 안에 있는 데이터들에는 우선순위가 존재한다. 메모리 용량이 초과하면 당장 쓰이지 않는, 우선순위에서 밀려난 데이터들은 스왑공간에 저장되어 처리된다.

 

하지만 속도는 RAM에 비해 현저히 느리다. 스왑메모리는 사용할 수 있는 메모리영역을 확장하는데에 도움을 주지만 데이터가 처리되는 속도는 RAM을 따라가진 못한다. 

 

 

swap 파일이나 파티션을 만드는 방법

하드디스크의 일부를 마치 메모리처럼 사용하게 해주는 것이 스왑(swap)이라고 했었다. 리눅스에서는 이 스왑을 일반적으로 설치시에 설정한다. 만약 스왑이 부족한 경우에는 설치 후에도 하드디스크의 남은공간이나 파티션을 설정해서 추가할 수 있다.

 

리눅스에서 스왑파티션을 추가해보기 위해 VMware와 CentOS6을 사용했다.

2GB의 하드디스크 추가

 

 

fdisk -l

fdisk -l 명령으로 추가된 하드디스크 장치를 확인할 수 있다.

용량을 보니 2147MB (약2GB)를 가진 장치명이 /dev/sdb인 것을 확인할 수 있다.

 

/dev/sdb 장치에서 하나의 파티션만 만들어 swap영역을 만들어보려고 한다.

 

/dev/sdb1 파티션 생성

<파티션 추가>

① fdisk [장치명] = 해당 디스크에서 여러 명령을 내릴 수 있다.

② Command 창이 나오면 파티션을 추가한다는 n 명령을 입력한다.

③ primary 파티션 1번으로 지정한다.

④ [1-261] 까지 존재하는 디스크영역은 default 1 값 그대로 사용한다.

⑤ 크기는 512M로 만들었다.

⑥ p 명령으로 파티션을 확인한 뒤 w 명령으로 저장한다.

이후 fdisk -l 명령으로 확인한다.

 

 

스왑 파티션 생성 및 on/off 하는 방법

]# mkswap [옵션] [스왑파일/파티션]

 = 스왑파티션이나 파일 생성

새로 만든 파티션을 스왑영역으로 지정하기 위해 사용하는 명령이다.

 

mkswap -c [파티션]

-c 옵션은 스왑파티션으로 만들기 전에 배드블록을 검사해 주는 옵션이다. 

mkswap -c [파티션] 명령으로 무사히 /dev/sdb1 파티션이 스왑영역으로 생성된 것을 확인할 수 있다. 

 

 

]# swapon [옵션] [스왑파일/파티션]

 = 스왑파일을 활성화시키고 상태를 확인할 수 있다.

파티션을 스왑영역으로 지정했더라도 바로 사용할 수 있는게 아니다. swapon 명령은 만들어진 스왑영역을 사용하기 위해 별도로 활성화(on) 시켜주는 기능이다. 이후 -s 옵션을 통해 확인할 수 있다. 

 

/dev/sdb1 스왑 파티션 활성화

free 명령으로 현재 메모리 상태를 보면 스왑영역이 1.9G로 나타나 있다.

새로만든 /dev/sdb1 파티션을 활성화 시킨 뒤 다시 확인해보니 2.4G (약 500M가량) 늘어나있다. 또한 swapon -s 명령으로 스왑상태를 봤을 때 사용중인 파티션을 확인할 수 있다.

 

 

]# swapoff [옵션] [스왑파일/파티션]

 = 스왑영역 비활성화

활성화시킨 스왑파티션을 off 시켜주는 명령어이다.

/dev/sdb1 파티션 비활성화

swapoff 명령으로 비활성화 했을 때 다시 swap영역은 1.9G로 줄어든 것을 확인할 수 있다. 또한 swapon -s 명령으로 확인했을 때 /dev/sdb1 파티션이 사라져있다. 이는 해당 스왑영역이 비활성화 되었다는 의미다.

 

 

스왑파일 생성

]# dd if=/dev/zero of=/swap-file bs=1k count=1024000

dd 는 크기를 가진 파일을 만드는 명령이다. 특정 파일을 스왑영역으로 지정하기 위해서는 최소 40KiB 이상은 되어야 한다. 크기는 사용자 마음대로 지정하면 된다.

① if = 초기화할 때 사용하는 장치 파일명

② of = 생성할 파일명

③ bs = 블록크기 지정 (단위가 없을경우 바이트로 처리)

④ count = bs에 설정한 블록의 개수 

위 명령대로 진행하면 현재 위치에 swap-file 이라는 이름에 1GB를 가진 파일이 하나 만들어진다.

 

스왑파일 생성

파일을 생성한 이후 사용하기위해선 파티션과 마찬가지로 mkswap, swapon 명령을 사용한다.

 

swap-file 을 스왑메모리로 사용

새로 만든 1GB의 파일 swap-file을 스왑영역으로 지정한 다음 활성화시키면 현재 사용중인 스왑메모리가 1.9G에서 2.9G로 증가한 것을 확인할 수 있다.

 

 

 

스왑 메모리 상태 확인

스왑파티션과 파일을 활성화시킨 뒤 메모리를 확인하는 방법으로는 기본적으로 3가지가 있다.

 

 

]# free = 현재 메모리상태 확인

사용중인 모든 메모리상태를 확인할 수 있으며 -m이나 -k 옵션을 통해 출력되는 단위를 바꿀 수 있다. 또한 -h 옵션은 human 의 약자로 대부분 명령에서 -h를 사용할 경우 사람이 보기 편하게 출력된다.

 

free 예시

Mem 와 buffers/cache 값, swap 영역 세 가지로 나뉜다. 그 중 free 영역에는 현재 사용중이 아닌, 여유용량을 나타낸다.

 

 

]# cat /proc/swaps

]# swapon -s

위 명령은 현재 사용중인 스왑메모리만 확인하는 명령으로 출력값은 동일하게 나온다.

 

 

 

부팅시 생성한 swap 영역을 자동으로 설정

mkswap , swapon 명령을 통해 스왑영역을 활성화 시킨 뒤 재부팅하면 자동으로 비활성화상태가 되어있다. 결국 부팅할 때마다 번번히 명령어를 입력해서 활성화시켜야 한다는 의미다.

 

부팅할때마다 스왑영역을 자동으로 활성화시키는 방법은 /etc/fstab 파일을 수정하는 것이다. 이 파일에는 부팅할 때 마다 읽어오는 파티션정보가 들어있다. 

 

/etc/fstab 파일에서 아래 영역을 추가하면 부팅시 자동으로 활성화될 수 있다.

/swap-file     swap     swap     defaults    0 0

파일과 파티션 모두 등록할 수 있으며 스왑 뿐만 아니라 일반 디스크파티션도 등록할 수 있다.