Создание SWAP в ОС Linux (Ubuntu, Debian, CentOS, AlmaLinux) и FreeBSD на виртуализации KVM

Операционная система делит свою оперативную память на так называемые страницы (кусочки), и иногда возникают ситуации, когда часть данных из оперативной памяти необходимо освободить. Сделать это можно с помощью специального механизма, который позволяет перенести часть данных из оперативной памяти на HDD или SSD накопитель, а точнее на специально сконфигурированный для этого раздел на диске. Этот процесс называется swapping (своппинг).

В большинстве случаев своппинг используется, когда оперативная память переполнена и для дальнейшей работы операционной системы необходимо ее освободить.

В данной статье рассмотрим, как создать специальный раздел на диске (SWAP (своп), или виртуальное пространство подкачки, или файл подкачки), как проверить его работу, а также как сделать так, чтобы после перезагрузки данный раздел подключался автоматически.

Все действия выполняются пользователем root, либо привилегированным пользователем с помощью sudo.

Рекомендуем использовать объём для SWAP максимум в два раза больше, чем реальный размер оперативной памяти. На практике обычно достаточно 50-100% от размера ОЗУ. Если для работы вам необходимо увеличить объем ОЗУ на сервере — лучше увеличить его, так как SWAP работает намного медленнее, чем ОЗУ (а в случаях с дисками SSD и NVMe ещё и сокращает время их жизни), и использование SWAP вместо ОЗУ приведёт к потерям скорости.

Linux (Ubuntu, Debian, CentOS, AlmaLinux)

Данная инструкция подходит для операционных систем Ubuntu 18.04, Ubuntu 20.04, Ubuntu 22.04, Debian 10, Debian 11, CentOS 7, AlmaLinux 8, AlmaLinux 9, и других.

Добавление SWAP

В целом для всех операционных систем семейства Linux механизм добавления SWAP одинаковый.

Проверяем, подключен ли SWAP:

# swapon --show

Если вывод пустой, то SWAP-а в системе нет. Если вывод выглядит примерно так:

NAME  TYPE   SIZE    USED  PRIO
/swapfile          file       512M   0B        -2

Значит, SWAP уже подключен. В нашем случае его размер равен 512 МБ.

Также проверим наличие SWAP с помощью команды free:

# free -h

Вывод будет примерно таким:

          total    used    free    shared  buff/cache   available

Mem:      1.9Gi    69Mi    1.7Gi   2.0Mi   128Mi         1.7Gi

Swap:     512Mi      0B    512Mi

Здесь мы видим, что SWAP есть и его размер 512МБ. В случае его отсутствия строки Swap не будет.

Перед созданием SWAP обязательно нужно проверить, есть ли свободное место на диске:

# df -h

Смотрим вывод и видим, что на диске свободно 36 ГБ. Если на диске мало места, перед добавлением SWAP необходимо очистить его либо увеличить объём диска. Для работоспособности системы необходимо минимум 5% свободного дискового пространства (либо больше, в зависимости от особенностей ваших проектов). После добавления SWAP раздел подкачки будет занят, имейте это ввиду при расчётах оставшегося свободного места на диске.

Filesystem  Size     Used    Avail   Use% Mounted on
udev        966M 0          966M   0%     /dev
tmpfs       199M   596K   199M   1%     /run
/dev/vda2    40G     1.9G    36G     5%     /
tmpfs       994M 0          994M   0%     /dev/shm
tmpfs       5.0M 0          5.0M    0%     /run/lock
tmpfs       994M 0          994M   0%     /sys/fs/cgroup
tmpfs       199M 0          199M   0%     /run/user/0

Сначала рассмотрим случай, когда SWAP в системе нет. Создаём файл для SWAP размером 2 ГБ:

# dd if=/dev/zero of=/swapfile bs=1M count=2048

Вывод будет таким:

2048+0 records in
2048+0 records out
2147483648 bytes (2.1 GB, 2.0 GiB) copied, 5.2341 s, 410 MB/s

Данная команда создаст файл /swapfile размером 2048 мегабайт. Нужно больше или меньше — можно увеличить или уменьшить значение count.

Чтобы никто не мог читать или править файл, кроме владельца — root, устанавливаем права на него:

# chmod 600 /swapfile

Проверим, что права выставлены верно:

# ls -la /swapfile

Вывод должен быть таким (rw для пользователя, владелец и группа root, размер 2 ГБ):

-rw------- 1 root root 2147483648 Dec 18 19:05 /swapfile

Форматируем файл под swap:

# mkswap /swapfile

Вывод будет примерно таким:

Setting up swapspace version 1, size = 2 GiB (2147479552 bytes)
no label, UUID=38e12a0a-58ea-4bc5-b0f9-58a29a1dd8db

Включаем SWAP:

# swapon /swapfile

После проверим, что SWAP включен и его размер соответствует тому, что мы указывали:

# free -m

            total    used     free   shared  buff/cache   available

Mem:        1977     113      65     2       1799         1691

Swap:       2047       0      2047


# swapon --show

NAME  TYPE SIZE USED PRIO

/swapfile file   2G   0B   -2

Готово. Мы добавили SWAP в систему.

Автоматическое подключение SWAP после перезагрузки

Далее сделаем так, чтобы SWAP подключался автоматически после перезагрузки системы. Чтобы SWAP включался при загрузке, нужно добавить его в /etc/fstab.

Добавляем в конец файла /etc/fstab строку:

/swapfile    none    swap    sw   0  0 

Конец файла /etc/fstab будет выглядеть примерно так:

<file system>   <mount point>   <type>  <options>             <dump>  <pass>

/dev/vda2       /               ext4     errors=remount-ro     0       1

/swapfile       none            swap     sw                    0       0

После этого можно перезагрузить VDS и проверить наличие SWAP командой free -m.

Должно быть что-либо вида:

Swap:       2048       0    2048

Изменение SWAP

Рассмотрим случай, когда в системе уже есть SWAP, и нам нужно его изменить.

# swapon --show

/swapfile file 256M   0B   -2

Видим, что у нас в /swapfile 256 МБ, а нам нужно 2 ГБ. Как уже писали ранее, проверяем, что на накопителе есть свободное место с помощью команды df -h

Далее выключаем имеющийся файл подкачки /swapfile:

# swapoff /swapfile

Проверяем с помощью swapon --show. Важно, что при отключении SWAP не должен использоваться системой. В противном случае можно отключить некоторые сервисы, которые потребляют ОЗУ, и после увеличения SWAP включить их обратно.

Меняем размер файла подкачки уже знакомой командой:

# dd if=/dev/zero of=/swapfile bs=1M count=2048

Далее инструкция такая же, как и при добавлении SWAP, только в нашем случае /swapfile уже имеет правильные права. Просто проверим, что это так:

# ls -la /swapfile

-rw------- 1 root root 2147483648 Dec 18 20:24 /swapfile

Помечаем /swapfile как файл подкачки:

# mkswap /swapfile

И активируем SWAP:

# swapon /swapfile

Проверяем, что SWAP увеличился, а также проверяем файл /etc/fstab:

# swapon --show
# cat /etc/fstab

FreeBSD

Добавление SWAP

В ОС FreeBSD 12 и FreeBSD 13 SWAP добавляется иначе.

Для начала необходимо проверить, есть ли в системе SWAP. Это можно сделать с помощью команд:

# swapinfo

(если вывод пустой, SWAP-а нет)

или

# top

(если в выводе не будет строки SWAP, то файла подкачки нет).

Обязательно проверяем наличие свободного дискового пространства:

# df -H

Если места недостаточно, либо если после добавления SWAP его останется меньше 5% — нужно очистить место на сервере либо увеличить размер дискового пространства.

Создаём файл для SWAP:

# dd if=/dev/zero of=/swapfile bs=1m count=2048

Вывод будет примерно таким:

2048+0 records in
2048+0 records out
2147483648 bytes transferred in 5.780501 secs (371504758 bytes/sec)

Данная команда создаст файл /swapfile размером 2048 мегабайт. Нужно больше — можно увеличить count.

Правим права на него:

# chmod 600 /swapfile

Это чтобы никто не мог писать и читать файл, кроме владельца — root.

Проверим, что права и владелец файла подкачки правильные:

# ls -la /swapfile

Вывод будет таким:

-rw-------  1 root  wheel  2147483648 Dec 18 21:36 /swapfile

Пользователь root, группа wheel (для FreeBSD это нормально), права rw для пользователя.

Включаем SWAP:

# swapon -aq

И проверяем:

# swapinfo -k

Вывод будет примерно таким:

Device      1K-blocks   Used    Avail      Capacity

/dev/md42   2097152     0       2097152    0%

Также можно проверить с помощью команды top, в выводе будет строка с SWAP:

Swap: 2048M Total, 2048M Free

Автоматическое подключение SWAP после перезагрузки

Осталось сделать так, чтобы SWAP подключался после перезагрузки системы. Для этого в конец файла /etc/fstab нужно добавить строку:

md42 none swap sw,file=/root/swap1 0 0

После этого можно перезагрузить VDS и проверить наличие SWAP командой top. Вывод должен быть вида:

Swap: 2048M Total, 2048M Free

Готово. Мы добавили SWAP в FreeBSD.

Этот материал был полезен?