Перейти к содержимому

Добавить Swap в Rocky/CentOS/RedHat

Своп (англ. Swap) – один из самых простых способов повысить реакцию сервера и предотвратить ошибки приложения «out of memory». Своп – это область на накопителе, в которой операционная система может временно хранить данные, которые больше не могут находиться в памяти. 

Инструкция подойдет практически к любому линуксу, не зависимо от версии.

Проверяем наличие SWAP в CentOS/Fedora/RedHat

Чтобы посмотреть swapon информацию, можно выполнить одно из ниже упомянутых утилит.

Через утилиту swapon:

[root@localhost ~]# swapon
NAME      TYPE      SIZE USED PRIO
/dev/dm-1 partition 1,6G 376M   -2
[root@localhost ~]# 

Другой способ проверки — это использовать утилиту «free»:

[root@localhost ~]# free -m
              total        used        free      shared  buff/cache   available
Mem:           4796        1140        2758          86         897        3319
Swap:          1639         375        1264
[root@localhost ~]# 

Если ничего не возвращается командой, значит на сервере нет файла для подкачки. У меня он есть, я ему выделил 1,6Гб. Но предположим, что этого мало и я хотел бы добавить еще 4Гб.

Проверяем дискового пространства и свободного места

SWAP использует файл созданный на вашем диске, нам необходимо знать сколько имеется свободного места для данной операции. Используем утилиту — df c ключом h:

[root@localhost ~]# df -h
Файловая система    Размер Использовано  Дост Использовано% Cмонтировано в
devtmpfs              2,4G            0  2,4G            0% /dev
tmpfs                 2,4G            0  2,4G            0% /dev/shm
tmpfs                 2,4G          17M  2,4G            1% /run
tmpfs                 2,4G            0  2,4G            0% /sys/fs/cgroup
/dev/mapper/cl-root   268G         198G   70G           74% /
/dev/sda1            1014M         272M  743M           27% /boot
tmpfs                 480M            0  480M            0% /run/user/0
[root@localhost ~]# 

Создание файла подкачки (SWAP)

Определяем размер нового файла подкачки в мегабайтах (парметр «count») и умножить на 1K, чтобы определить количество блоков. Например, создаем файл подкачки с 4Гб:

[root@localhost ~]# dd if=/dev/zero of=/swapfile bs=1K count=4M
4194304+0 записей получено
4194304+0 записей отправлено
 скопировано 4294967296 байт (4,3 GB), 19,5212 c, 220 MB/c
[root@localhost ~]#

Файл «swapfile» создался в корневой директории «/».

Включаем/Подключаем Swap

Файл создался, но система не знает, что это за файл и как с ним работать. На нужно включить его. Перед тем, как сделать это, мы должны выставить нужные права на файл подкачки так, чтобы он не может быть прочитан кем-либо (кроме пользователя root). Предоставление другим пользователям чтение или запись в этот файл будет огромный риск для безопасности. По этому, выставляем:

[root@localhost ~]# chmod 600 /swapfile

Создаем пространство подкачки:

[root@localhost ~]# mkswap /swapfile

Подключаем файл к системе:

[root@localhost ~]# swapon /swapfile

Чтобы убедиться в том, что все выполнено правильно, нужно проверить командой swapon:

[root@localhost ~]# swapon -s

Автоматическое монтирование Swap

Файл подкачки включен, но до перезагрузки сервера. Нам нужно прописать его в файле fstab:

[root@localhost ~]# mcedit /etc/fstab

И добавляем строку:

/swapfile swap swap sw 0 0

Не забываем в конце файла сделать переход на новую строку. Сохраняем fstab.

Отключаем SWAP

Чтобы выключить swap , используйте swapoff:

[root@localhost ~]# swapoff /swapfile
[root@localhost ~]# swapon -s

Далее нужно удалять сам файл подкачки и строку из fstab.

А можно всего выше указанного не делать, автоматизировать процесс.

Скрипт добавления SWAP

Открывай любой редактор:

[root@localhost ~]# mcedit /opt/scripts/swap.sh

Добавляем следующее содержимое и сохраняем:

#!/bin/bash

# Спрашиваем у пользователя размер
read -p 'Введите размер файла в мегабайтах: ' size_mb
# Объявляем переменную которую будем умножать size_mb
size_kb=$((1024*${size_mb}))
#создаем файл подкачки
dd if=/dev/zero of=/swapfile bs=1K count=${size_kb}
# задаем права
chmod 600 /swapfile
# Создаем пространство подкачки
mkswap /swapfile
# Подключаем файл к системе
swapon /swapfile
# проверяем наличие записи в fstab
if [ "$(grep '/swapfile' /etc/fstab)" ]; then
    echo "Ошибка: в файле /etc/fstab уже есть запись 'SWAP'"
else
    echo "Запись  SWAP добавлена в файл /etc/fstab"
    echo -e '\n/swapfile swap swap defaults 0 0' >> /etc/fstab
fi
# проверяем 
swapon --show

Делаем файл исполняемым:

chmod +x /opt/scripts/swap.sh

Запускаем скрипт:

[root@localhost swap]# sh /opt/scripts/swap.sh
Введите размер файла в мегабайтах: 4096
4194304+0 записей получено
4194304+0 записей отправлено
 скопировано 4294967296 байт (4,3 GB), 17,7545 c, 242 MB/c
Setting up swapspace version 1, size = 4194300 KiB
без метки, UUID=2beb46d4-b035-4ab2-aca4-0b2d40bacf35
Запись  SWAP добавлена в файл /etc/fstab
NAME      TYPE      SIZE   USED PRIO
/dev/dm-1 partition 1,6G 399,6M   -2
/swapfile file        4G     0B   -3
[root@localhost swap]#