- Раздел подкачки в Linux (SWAP раздел)
- Какой объем выделить под SWAP раздел
- Как проверить подключен ли SWAP
- Создание раздела подкачки или SWAP раздела в Linux
- Раздел подкачки и mkswap
- Добавление раздела подкачки в автозагрузку
- Создание SWAP в ОС Linux (Ubuntu, Debian, CentOS, AlmaLinux) и FreeBSD на виртуализации KVM
- Linux (Ubuntu, Debian, CentOS, AlmaLinux)
- Добавление SWAP
- Автоматическое подключение SWAP после перезагрузки
- Изменение SWAP
- FreeBSD
- Добавление SWAP
- Автоматическое подключение SWAP после перезагрузки
Раздел подкачки в Linux (SWAP раздел)
Раздел подкачки в Linux или SWAP раздел позволяет использовать жесткий диск для сохранения информации, которая должна сохраняться в оперативной памяти и при этом в оперативную память не помещается.
Данные, которые должны попадать в RAM при ее нехватке будут занимать пространство выделенное под SWAP.
Время обращения к данным, которые размещены в разделе подкачки, и время получения ответа несколько увеличится, но присутствие раздела позволит избежать системных сбоев.
Операционная система распознает, что скорость работы с данными в разделе подкачки ниже и будет задействовать его для более старых данных, храня те, к которым обращения происходят чаще всего непосредственно в RAM.
SWAP раздел будет использоваться системой при нехватке оперативной памяти и в качестве оперативной памяти
Раздел подкачки в Linux — частое решение в ситуациях, когда на сервере скриптам периодически не хватает оперативной памяти и возникают ситуации OOM.
Какой объем выделить под SWAP раздел
Обычно для раздела, который будет использоваться в качестве оперативной памяти в дополнение к системной RAM выделяется столько же места, сколько имеется RAM или вдвое больше.
Однако никаких правил нет и реальное значение подбирается экспериментально.
Если на сервере 8 Гб RAM — под раздел подкачки можно выделить 8 Гб.
И дальше смотреть за потреблением. При необходимости увеличивать SWAP.
Как проверить подключен ли SWAP
Использует ли система SWAP можно понять по выводу free -m
Первая строка в выводе показывает данные по оперативной памяти, вторая по SWAP
В примере машине доступен 1 Гб оперативной памяти, SWAP не подключен, он этом говорят значения ‘0 0 0 ‘
Создание раздела подкачки или SWAP раздела в Linux
В Linux чаще используется понятие именно раздела под SWAP, но есть также SWAP файлы — с ними обычно работают в Windows.
В рамках данного материала рассмотрим только создание раздела подкачки (отдельной партиции под SWAP).
Чтобы приступить нужен отдельный неиспользуемый диск подключенный к серверу. Или можно выделить партицию на используемом диске если на нём есть неразмеченное пространство.
В примере будем использовать партицию, которую создадим при помощи fdisk. Для неё установим необходимый для SWAP тип раздела.
Просматриваем список подключенных дисков:
Находим в выводе устройство, размер которого совпадает с диском или партицией, который/ую хотим использовать, в примере это /dev/vdc
Command (m for help): p
Disk /dev/vdc: 5368 MB, 5368709120 bytes
16 heads, 63 sectors/track, 10402 cylinders, total 10485760 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x27e517f5
Device Boot Start End Blocks Id System
Создаем новый раздел (ключ n в fdisk — new)
Command (m for help): n
Partition type:
p primary (0 primary, 0 extended, 4 free)
e extended
Select (default p): p
Номер партиции, а также начало и конец секторов оставляем по-умолчанию
Partition number (1-4, default 1): 1
First sector (2048-10485759, default 2048):
Using default value 2048
Last sector, +sectors or +size (2048-10485759, default 10485759):
Using default value 10485759
Самое важное — выбираем тип раздела
Command (m for help): t
Selected partition 1
Большая буква L выведет все варианты, из них потребуется идентификатор, которому соответствует тип Linux swap. Код может быть 82, 19 или другой.
Пример типов партиции:
Сейчас выделена партиция /dev/vdc1 объемом 5 Гб.
Это подходящий объем для сервера, который обслуживает веб-проект.
Ключ p fdisk позволяет просмотреть получившуюся разметку диска.
Command (m for help): p
Disk /dev/vdc: 5368 MB, 5368709120 bytes
9 heads, 40 sectors/track, 29127 cylinders, total 10485760 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x27e517f5
Device Boot Start End Blocks Id System
/dev/vdc1 2048 10485759 5241856 82 Linux swap / Solaris
После ввода w просмотренная на предыдущем шаге таблица разделов запишется на диск.
! Важно проверить что имя диска верное и работа производится именно с пустым диском. Запись изменений на системный диск повлечёт потерю данных
Command (m for help): w
Изменения записаны, партиция почти готова для подключения в качестве раздела подкачки.
Раздел подкачки и mkswap
mkswap утилита, непосредственно создающая раздел подкачки, принимает имя раздела
Setting up swapspace version 1, size = 5241852 KiB
no label, UUID=2f7a89e2-4bc3-4fa2-a442-b0e587d752d1
В последней строке выводится уникальный идентификатор UUID.
Монтировать раздел SWAP командой mount не нужно, достаточно его активировать.
После ключа -U указываем идентификатор
swapon -U 2f7a89e2-4bc3-4fa2-a442-b0e587d752d1
Посмотреть все разделы, выделенные под SWAP можно командой swapon с ключом -s, таких разделов при желании можно сделать неограниченно много.
Filename Type Size Used Priority
/dev/vdc1 partition 5241852 0 -1
Можно повторно выполнить free -m, система покажет что теперь доступен SWAP раздел размером 5 Гб.
Система тестовая и нагрузки на оперативную память нет, поэтому в колонке used для SWAP значение 0. В реальной системе при определенном потреблении памяти раздел подкачки начинал бы задействовать.
Момент, в который система начинает сбрасывать данные в SWAP определяется параметром swappiness.
Добавление раздела подкачки в автозагрузку
Чтобы раздел подкачки монтировался автоматически после каждой перезагрузки системы необходимо добавить правило в /etc/fstab
Последней строкой в файл дописываем
UUID=2f7a89e2-4bc3-4fa2-a442-b0e587d752d1 none swap sw 0 0
Идентификатор относится только к тому устройству, которое было создано ранее и размечено как swap. Вместо него можно использовать имя партиции — в примере это /dev/vdc1
Монтирование будет выполняться каждый раз при старте системы. Вручную перечитать содержимое /etc/fstab можно выполнив mount -a.
Это выполнять mount -a после каждого редактирования /etc/fstab. В случае ошибок в синтаксисе файла информация выведется в консоль.
Желательно затем также для проверки перезагружать сервер.
SWAP раздел не будет отображаться среди примонтированных в выводе mount и df -h, это нормальная ситуация.
Итог
Раздел подкачки для сервера добавлен и используется системой.
Кроме раздела подкачки можно подключить SWAP файл, это альтернативный вариант.
Такой способ подходит когда нет свободного диска или неразмеченного пространства, но есть запас по месту на системном диске.
Создание 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:
NAME TYPE SIZE USED PRIO /swapfile file 512M 0B -2
Значит, SWAP уже подключен. В нашем случае его размер равен 512 МБ. Также проверим наличие SWAP с помощью команды free :
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 обязательно нужно проверить, есть ли свободное место на диске:
Смотрим вывод и видим, что на диске свободно 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
# 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, устанавливаем права на него:
-rw------- 1 root root 2147483648 Dec 18 19:05 /swapfile
Setting up swapspace version 1, size = 2 GiB (2147479552 bytes) no label, UUID=38e12a0a-58ea-4bc5-b0f9-58a29a1dd8db
# 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 включался при загрузке, нужно добавить его в /etc/fstab . Добавляем в конец файла /etc/fstab строку:
/swapfile none swap sw 0 0
/dev/vda2 / ext4 errors=remount-ro 0 1 /swapfile none swap sw 0 0
После этого можно перезагрузить VDS и проверить наличие SWAP командой free -m . Должно быть что-либо вида:
Изменение SWAP
# swapon --show /swapfile file 256M 0B -2
Видим, что у нас в /swapfile 256 МБ, а нам нужно 2 ГБ. Как уже писали ранее, проверяем, что на накопителе есть свободное место с помощью команды df -h . Далее выключаем имеющийся файл подкачки /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
# swapon --show # cat /etc/fstab
FreeBSD
Добавление SWAP
В ОС FreeBSD 12 и FreeBSD 13 SWAP добавляется иначе. Для начала необходимо проверить, есть ли в системе SWAP. Это можно сделать с помощью команд:
(если в выводе не будет строки SWAP, то файла подкачки нет). Обязательно проверяем наличие свободного дискового пространства:
Если места недостаточно, либо если после добавления 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 . Правим права на него:
Это чтобы никто не мог писать и читать файл, кроме владельца — root. Проверим, что права и владелец файла подкачки правильные:
-rw------- 1 root wheel 2147483648 Dec 18 21:36 /swapfile
Пользователь root, группа wheel (для FreeBSD это нормально), права rw для пользователя. Включаем SWAP:
Device 1K-blocks Used Avail Capacity /dev/md42 2097152 0 2097152 0%
Swap: 2048M Total, 2048M Free
Автоматическое подключение SWAP после перезагрузки
Осталось сделать так, чтобы SWAP подключался после перезагрузки системы. Для этого в конец файла /etc/fstab нужно добавить строку:
md42 none swap sw,file=/root/swap1 0 0
Swap: 2048M Total, 2048M Free