RHCSA 준비/05. 파일시스템 및 스왑 메모리

5.3 스왑 메모리 (swapon, free, mkswap, 스왑 파티션 방식, 스왑 파일 방식)

Jaden Park 2021. 5. 25. 17:49

스왑 영역을 구성하는 방식은 스왑 파티션과 스왑 파일 두 가지 방식이 있음

스왑 파티션 방식

  • 별도의 파일시스템 개입 없이 파티션 전체가 스왑으로 동작하므로 성능저하가 일어나지 않는다는 장점이 있지만 별도의 스왑 파티션 영역으로 사용할 전용 파티션을 확보하기 어려울 수 있다는 단점도 존재

스왑 파일 방식

  • 파일시스템 내에 파일을 생성하고, 이 파일을 스왑 영역으로 사용하는 방식
  • 디스크에서 파티셔닝 할 필요 없이, 기존 파일시스템에서 사용할 수 있는 저장 공간을 스왑 영역으로 사용
  • 스왑 파일을 사용하는 방식은 스왑 파일을 생성하기 위해 파일시스템이라는 중간 단계가 필요
  • 따라서, 스왑 파티션에 비해 성능이 떨어질 수 있음.
    • 파티션의 경우 디스크에서 연속된 공간에 위치하지만, 파일시스템 내의 파일형태로 저장된 스왑 파일은 디스크에서 연속된 공간을 할당받지 못 할 수도 있기 때문

swapon, free

[root@centOS8 ~]# swapon /dev/sdb1
[root@centOS8 ~]# swapon -s
Filename                Type        Size    Used    Priority
/dev/sdb1                                  partition    511996    0    -2
[root@centOS8 ~]# swapoff /dev/sdb1
[root@centOS8 ~]# swapon -s
[root@centOS8 ~]#

[root@centOS8 ~]# free
              total        used        free      shared  buff/cache   available
Mem:        1996208     1102680      420076       10776      473452      710148
Swap:        511996           0      511996

swapon

옵션 설명
-a /etc/fstab 파일을 참고하여 스왑영역 활성화
-p 스왑 영역을 활성화 할 때 우선순위 지정
-s 활성화된 스왑 영역의 정보를 출력
  • 스왑 영역의 활성화와 스왑 영역 확인에 사용
  • 스왑도 파일시스템과 마찬가지로 시스템의 전원이 종료될 때 해제되며 시스템의 전원이 시작될 때 파일시스템 테이블에 등록되어 있지 않으면 자동으로 활성화되지 않음.
  • '-s' 옵션을 함께 사용하면 활성화된 스왑 영역의 목록과 유형, 사이즈, 사용량, 우선순위가 출력
  • 스왑 영역 활성화 해제는 swapoff

free

  • 전체 물리메모리의 사이즈 및 사용량, 스왑 영역의 사용량 등을 출력
  • '-h' 옵션을 추가하여 실행하면 사이즈가 사용자가 읽기 쉬운 단위로 출력

스왑 파티션 생성

  • 스왑 파티션을 생성하기 위하여 먼저 디스크 파티셔닝을 해야 함.
  • 생성된 파티션을 스왑 영역으로 사용하기 위해서 파티션 타입을 스왑 장치용 파티션으로 바꿔야 함.
  • fdisk 명령의 프롬프트에서 't' 명령을 사용하여 파티션 타입 변경 가능
    • t 명령에서 'l' 명령 사용 시, 사용가능한 파티션 타입 조회가능

fdisk -> t

parted -s /dev/sdb mklabel msdos
parted -s /dev/sdb mkpart primary 0% 3G

[root@CentOs8 ~]# fdisk /dev/sdb
//파티션 타입 변경
Command (m for help): t   
Selected partition 1
Hex code (type L to list all codes): 82
Changed type of partition 'Linux' to 'Linux swap / Solaris'.

mkswap

  • 파일 입출력 용도의 파일시스템을 생성할 때 파티셔닝 한 후 파일시스템을 생성(mkfs)했던 것처럼 스왑 영역을 생성할 때에도 파티셔닝 한 후에 파티션에 스왑 영역을 생성해야 함. 이때 사용하는 명령이 mkswap
[root@CentOs8 ~]# lsblk
NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda      8:0    0   60G  0 disk 
└─sda1   8:1    0   60G  0 part /
sdb      8:16   0   10G  0 disk 
└─sdb1   8:17   0    3G  0 part 
sdc      8:32   0   20G  0 disk 
sr0     11:0    1 1024M  0 rom  

[root@CentOs8 ~]# mkswap /dev/sdb1
Setting up swapspace version 1, size = 3 GiB (3221221376 bytes)
no label, UUID=efa1d0ba-4f73-4f16-ab6d-1146604611c4

[root@CentOs8 ~]# swapon -s
Filename                Type        Size    Used    Priority
/dev/sdb1                                  partition    3145724    0    -2

영구적인 스왑 파티션 등록

  • /etc/fstab 에 등록.
[root@CentOs8 ~]# nano /etc/fstab

// 1                                         //2     //3     //4       //5   //6
UUID=56d9d275-e21e-4958-934f-e3e0f6b8e608    swap    swap    defaults    0     0
or
/dev/sdb1                                    swap    swap    defaults    0     0
  • 1번 필드는 스왑 파티션의 장치이름, 스왑 파일 이름, 스왑의 UUID 중 하나 입력.
    • UUID 를 적는다면 오타에 주의해야 함. 재부팅 시 복구모드로 접근해서 장애처리를 해야할 수도 있음.
    • 장치 경로를 적는 것은 부팅시에 장치의 순번이 바뀔 수 있기 때문에 주의해야 함.
  • 2번 필드에는 마운트 포인트를 지정하는 필드. 스왑 영역은 마운트 포인트가 필요하지 않음. 단순히 swap 입력
  • 3번 필드는 파일 시스템 종류를 입력하는 필드. 스왑 영역은 swap 으로 입력
  • 4번 필드는 마운트 옵션을 지정하는 필드. 스왑영역은 별도의 옵션을 지정하지 않을 경우 'defaults' 옵션 사용
  • 5번 필드에는 덤프(dump) 백업의 사용 유무를 지정하는 필드. 스왑영역은 덤프(dump) 백업을 사용하지 않음. 따라서 0
  • 6번 필드는 파일시스템 체크필드. 스왑 영역은 파일시스템 체크가 필요하지 않기 때문에 '0'을 입력.
  • /etc/fstab 파일에서 스왑 영역을 설정해야 함

스왑 파일 생성

  • 스왑 파일은 파일시스템 아래에 파일을 생성하여 그 파일을 스왑 영역으로 사용.
  • 따라서 스왑 파일은 파티션 장치를 사용하지 않고 디스크 파티셔닝을 위한 파티션을 확보할 필요가 없음
  • 스왑 파일을 생성하여 스왑 영역을 생성하기 전에 먼저 파일시스템에서 사용할 여유 공간이 존재하는지 확인
  • 파일시스템의 사용량 확인은 df 명령을 사용
  • df 명령과 '-h' 옵션을 함께 사용할 경우 사용자가 보기 편한 방식으로 파일시스템 사용량을 출력
  • 영구 설정은 위와 마찬가지로 /etc/fstab 에 등록하면 됌
[root@CentOs8 ~]# df -h
Filesystem      Size  Used Avail Use% Mounted on
devtmpfs        947M     0  947M   0% /dev
tmpfs           975M   84K  975M   1% /dev/shm
tmpfs           975M   18M  958M   2% /run
tmpfs           975M     0  975M   0% /sys/fs/cgroup
/dev/sda1        60G  6.0G   55G  10% /
tmpfs           195M   88K  195M   1% /run/user/3896
tmpfs           195M  1.2M  194M   1% /run/user/42
tmpfs           195M  4.6M  191M   3% /run/user/0
  • 현재 파일을 생성 할 수 있는 파일시스템은 루트 파일시스템 뿐
  • 실제 시스템에서 루트 파일 시스템에 스왑 파일을 생성할 경우 시스템 성능 저하가 발생할 수 있으므로 권장하지 않음
[root@CentOs8 ~]# mkdir /swapdir

// 0으로 채워진 데이터를 512byte씩 1,048,000번 /swapdir/swapfile 파일에 복사
[root@CentOs8 ~]# dd if=/dev/zero of=/swapdir/swapfile bs=512 count=1048000
1048000+0 records in
1048000+0 records out
536576000 bytes (537 MB, 512 MiB) copied, 2.87316 s, 187 MB/s

[root@CentOs8 ~]# file -s /swapdir/swapfile
/swapdir/swapfile: data

[root@CentOs8 ~]# mkswap /swapdir/swapfile
mkswap: /swapdir/swapfile: insecure permissions 0644, 0600 suggested.
Setting up swapspace version 1, size = 511.7 MiB (536571904 bytes)
no label, UUID=11e9518c-0edd-4760-b16a-f92045aa614c

[root@CentOs8 ~]# swapon /swapdir/swapfile
swapon: /swapdir/swapfile: insecure permissions 0644, 0600 suggested.

[root@CentOs8 ~]# swapon -s
Filename                Type        Size    Used    Priority
/dev/sdb1                                  partition    3145724    55296    -2
/swapdir/swapfile                          file        523996    0    -3

dd 명령

  • 블록단위로 파일을 변환하거나 복사하는 명령
  • 'if' 에는 복사할 파일
  • 'of' 에는 생성될 파일
  • 'bs' 에는 복사할 때 사용할 블록의 크기를 바이트(byte)단위로 지정
  • 'count' 에는 복사할 횟수