Раздел подкачки в 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 тип раздела.
Просматриваем список подключенных дисков:
fdisk -l
Находим в выводе устройство, размер которого совпадает с диском или партицией, который/ую хотим использовать, в примере это /dev/vdc
fdisk /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
Тип primary
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{K,M,G} (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 утилита, непосредственно создающая раздел подкачки, принимает имя раздела
mkswap /dev/vdc1
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, таких разделов при желании можно сделать неограниченно много.
swapon -s
Filename Type Size Used Priority
/dev/vdc1 partition 5241852 0 -1
Можно повторно выполнить free -m, система покажет что теперь доступен SWAP раздел размером 5 Гб.
Система тестовая и нагрузки на оперативную память нет, поэтому в колонке used для SWAP значение 0. В реальной системе при определенном потреблении памяти раздел подкачки начинал бы задействовать.
Момент, в который система начинает сбрасывать данные в SWAP определяется параметром swappiness.
Добавление раздела подкачки в автозагрузку
Чтобы раздел подкачки монтировался автоматически после каждой перезагрузки системы необходимо добавить правило в /etc/fstab
mcedit /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 файл, это альтернативный вариант.
Такой способ подходит когда нет свободного диска или неразмеченного пространства, но есть запас по месту на системном диске.