Wisdom’s Cloud

[Linux] [CentOS] swap 본문

LINUX/Advanced

[Linux] [CentOS] swap

지혜로운지혜쓰 2022. 9. 8. 16:26

지난 시간(2022.09.05 - [LINUX] - [Linux] [CentOS] 하드디스크와 파티션)에 하드디스크의 일부를 메모리처럼 사용하는 파티션을 스왑 파티션이라고 소개했었는데, 이번에는 이 swap에 대해서 알아보고자 한다.

 

 

 

swap이란?

 

swap은 시스템에 메모리가 부족할 경우, 하드디스크의 일부 공간을 활용하여 계속 작업을 도와주는 영역이다.

즉, 프로그램들을 많이 실행하여 메모리가 부족할 경우, 지금 당장 필요하지 않은 프로그램들의 데이터를 하드디스크에 이동시켜 메모리 공간을 확보하는 것이다.

따라서 실제 메모리보다 액세스 시간이 느리며, 메모리에 도움은 주지만 메모리를 대체할 수는 없다.

 

swap 공간은 swap 파티션, swap 파일, 또는 swap 파티션과 swap 파일의 조합으로 추가할 수 있다.

swap 파티션을 만들 여유 디스크 공간이 없거나 swap 공간에 대한 논리 볼륨을 만들 수 있는 볼륨 그룹의 공간이 없는 경우에 swap 파일을 사용할 수 있지만, 꼭 필요한 경우가 아니라면 swap 파티션으로 사용하는 것을 권장한다.

 

그럼 이 2가지 방식으로 swap 공간을 만들어보자.

 

 

1. swap 파티션 방식

먼저 free 명령어로 메모리에 대한 현황을 파악할 수 있다.

-h 옵션을 사용하면 자동으로 단위를 출력해주며, 현재 swap 공간은 없다.

 

  1-1) swap 파티션 생성

120M 크기의 /dev/sda7을 swap 파티션으로 생성해두었다.

 

  1-2) swap 공간 지정

사용할 swap 파티션을 mkswap 명령어를 통해 swap 공간으로 지정한다.

[root@server-1-lab ~]# mkswap /dev/sda7
Setting up swapspace version 1, size = 122876 KiB
no label, UUID=21b568c4-0394-48df-b17a-65e121569350

 

  1-3) swap 파티션 활성화

그리고 swapon 명령어를 통해 swap 파티션을 활성화한다.

다시 메모리를 확인해보면, swap 공간이 약 120M 추가된 것을 확인할 수 있다.

[root@server-1-lab ~]# swapon /dev/sda7

 

  1-4) swap 파티션 영구 설정

부팅 시에 자동으로 swap 파티션이 활성화될 수 있도록 /etc/fstab 파일에 등록한다.

 

 

2. swap 파일 방식

swap 파티션을 비활성화하려면 swapoff 명령어를 사용하면 된다.

비활성화하여 다시 swap 공간을 없애보자.

[root@server-1-lab ~]# swapoff /dev/sda7

 

  2-1) swap 파일 생성

특정 크기를 가진 파일을 swap 공간으로 지정하기 위해서는 dd 명령어를 통해 파일을 만들면 된다.

아래 명령어는 200M씩 1번 /dev/zero에서 읽어서 /root/swapfile에 기록한다는 의미다.

즉, 200M 크기의 /root/swapfile라는 빈 파일을 만드는 것이다.

[root@server-1-lab ~]# dd if=/dev/zero of=/root/swapfile bs=200M count=1
1+0 records in
1+0 records out
209715200 bytes (210 MB) copied, 0.396932 s, 528 MB/s

 

fallocate 명령어로도 swap 파일을 생성할 수 있지만, fallocate로 생성한 파일에는 holes가 있기 때문에 swap 파일로 사용할 수 없다는 에러가 발생한다.

[root@server-1-lab ~]# fallocate -l 200M /root/swapfile
[root@server-1-lab ~]# chmod 600 /root/swapfile
[root@server-1-lab ~]# mkswap /root/swapfile
Setting up swapspace version 1, size = 204796 KiB
no label, UUID=f4b3fe47-e52d-4706-8902-cf2a6191b804
[root@server-1-lab ~]# swapon /root/swapfile
swapon: /root/swapfile: swapon failed: Invalid argument
[root@server-1-lab ~]# journalctl | grep swapfile
Sep 08 11:29:13 server-1-lab kernel: swapon: swapfile has holes

 

그렇다면 files with holes가 뭘까?

files with holes는 sparse file이라고도 불린다.

sparse file생성될 때 전체 크기를 할당하지 않고 실제 데이터가 존재하는 영역만 생성하여 쓰기가 있을 때만 블럭이 할당되므로 디스크 공간을 효율적으로 사용할 수 있다.

따라서 fallocate 명령어를 사용하면 속도가 더 빠르지만, files with holes로 생성되기 때문에 swap 파일로 사용할 수 없다.

물론 sparse file을 cp 명령어로 복사하여 holes를 제거한 후 swap 파일로 사용할 수 있지만, 권장하는대로 dd 명령어를 사용하는 것이 좋을 것 같다.

 

  2-2) 권한 부여

swap 파일을 읽을 수 없도록 권한을 변경한다.

[root@server-1-lab ~]# chmod 600 /root/swapfile

 

  2-3) swap 공간 지정

생성한 swap 파일을 swap 공간으로 지정한다.

[root@server-1-lab ~]# mkswap /root/swapfile
Setting up swapspace version 1, size = 204796 KiB
no label, UUID=812dbbd8-68b9-4271-ac27-da8c8038bb51

 

  2-4) swap 파일 활성화

swap 파일을 활성화한다.

다시 메모리를 확인해보면, swap 공간이 약 200M 추가된 것을 확인할 수 있다.

[root@server-1-lab ~]# swapon /root/swapfile

 

  2-5) swap 파일 영구 설정

마찬가지로 부팅 시에 자동으로 swap 파일이 활성화될 수 있도록 /etc/fstab 파일에 등록한다.

 

 

 

[참고 문서]

https://access.redhat.com/documentation/ko-kr/red_hat_enterprise_linux/9/html/managing_storage_devices/getting-started-with-swap_managing-storage-devices#doc-wrapper

 

11장. 스왑 시작하기 Red Hat Enterprise Linux 9 | Red Hat Customer Portal

Access Red Hat’s knowledge, guidance, and support through your subscription.

access.redhat.com

https://opensource.com/article/18/9/swap-space-linux-systems

 

An introduction to swap space on Linux systems

There are two basic types of memory in a typical computer.

opensource.com

https://manpages.ubuntu.com/manpages/xenial/en/man8/swapon.8.html

 

Ubuntu Manpage: swapon, swapoff - enable/disable devices and files for paging and swapping

Powered by the Ubuntu Manpage Repository, file bugs in Launchpad © 2019 Canonical Ltd. Ubuntu and Canonical are registered trademarks of Canonical Ltd.

manpages.ubuntu.com

 

'LINUX > Advanced' 카테고리의 다른 글

[Linux] [CentOS] 패스워드 정책 설정  (1) 2022.09.15
[Linux] [CentOS] YUM Repository  (0) 2022.09.09
[Linux] [CentOS] LVM(2)  (0) 2022.09.07
[Linux] [CentOS] LVM(1)  (1) 2022.09.06
[Linux] [CentOS] 하드디스크와 파티션  (1) 2022.09.05