Раздел подкачки в Linux (SWAP раздел)


Раздел подкачки в Linux или SWAP раздел позволяет использовать жесткий диск для сохранения информации, которая должна сохраняться в оперативной памяти и при этом в оперативную память не помещается.

Данные, которые должны попадать в RAM при ее нехватке будут занимать пространство выделенное под SWAP.

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



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



SWAP раздел будет использоваться системой при нехватке оперативной памяти и в качестве оперативной памяти


раздел подкачки в Linux


Раздел подкачки в 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 или другой.


Пример типов партиции:

партиция типа linux swap


Сейчас выделена партиция /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 Гб.


swap раздел



Система тестовая и нагрузки на оперативную память нет, поэтому в колонке 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 файл, это альтернативный вариант.

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

Сказать спасибо