> Полный список статей есть в [llms.txt](https://docs.f3cloud.com/llms.txt). Markdown-версия есть у каждой страницы, достаточно добавить .md к её адресу. Эта страница в Markdown: [https://docs.f3cloud.com/ru/linux/swap-linux.md](https://docs.f3cloud.com/ru/linux/swap-linux.md).

# Файл подкачки swap в Linux – как создать и настроить на VPS

Как создать файл подкачки swap на Linux VPS с Ubuntu или Debian. Зачем нужен swap, сколько его делать, fallocate и mkswap, автоподключение через fstab, настройка swappiness, изменение размера и удаление. Проверено на Debian 12.

**Swap**, или файл подкачки, это место на диске, куда Linux временно переносит данные из оперативной памяти, когда её не хватает. На сервере с небольшим объёмом памяти swap спасает от внезапных падений программ во время пиковой нагрузки. В этой статье мы разберём, как устроена подкачка, создадим файл подкачки, сделаем так, чтобы он подключался после перезагрузки, и настроим, насколько охотно система будет им пользоваться. Все команды мы проверили на тестовом сервере с Debian 12.

***

## Как Linux распоряжается памятью и зачем нужен swap

Чтобы понять, когда swap действительно помогает, нужно сначала посмотреть, на что сервер тратит оперативную память. Часть её занимают сами программы, например база данных, веб-сервер или контейнеры Docker. Эту память программы получают в своё распоряжение и заполняют собственными данными, поэтому система не может просто взять и освободить её без потерь. Остальную память Linux не оставляет пустой, а заполняет кэшем файлов. Когда программа читает файл с диска, его содержимое остаётся в памяти, и следующее чтение того же файла происходит мгновенно. Кэш полезен, но его можно в любой момент сбросить, ведь оригинал файла по-прежнему лежит на диске. Именно поэтому команда `free` часто показывает, что свободной памяти почти нет, хотя в столбце **available** при этом остаётся много места. Под кэш занята память, которую система вернёт программам по первому требованию.

Трудности начинаются, когда программам становится тесно даже после того, как кэш сброшен. Предположим, что на сервере с 1 ГБ памяти работают сайт и база данных, а вы запускаете обновление системы или сборку проекта, которой на несколько минут нужно ещё 300 МБ. Если свободной памяти нет и забрать её неоткуда, ядро Linux вынуждено выбрать один из процессов и принудительно завершить его. Этим занимается механизм **OOM killer** (от английского out of memory). Чаще всего под удар попадает самый крупный процесс, то есть та самая база данных, и сайт перестаёт работать посреди ночи без видимой причины.

Swap даёт ядру другой выход. Вместо того чтобы завершать процесс, система переносит на диск те страницы памяти, к которым программы давно не обращались, например код редко используемой функции или данные фоновой службы, которая просыпается раз в час. Освободившееся место получает программа, которой память нужна прямо сейчас. Если позже понадобятся перенесённые данные, ядро прочитает их с диска обратно. Однако диск работает во много раз медленнее оперативной памяти даже на быстрых NVMe, поэтому swap не заменяет память, а служит страховкой. Если сервер постоянно активно читает и пишет подкачку, программы начинают заметно тормозить. На нашем тестовом сервере с 1 ГБ памяти нейросеть, которой памяти не хватало, работала со swap, но печатала одно слово за несколько минут. Такое поведение означает, что серверу нужно больше памяти, и swap здесь уже не поможет.

Остаётся вопрос, как система решает, что выгоднее, сбросить кэш файлов или отправить в подкачку данные программ. Этот баланс задаёт параметр **swappiness**. Он принимает значения от 0 до 200, и в Debian 12 по умолчанию равен 60. Чем меньше значение, тем дольше ядро будет держать данные программ в памяти и тем охотнее будет жертвовать кэшем. Для сервера обычно разумно уменьшить swappiness до 10. Тогда подкачка включается в основном тогда, когда память действительно на исходе, и не трогает работающие программы в спокойное время.

***

## Что понадобится

* **Сервер** с Ubuntu или Debian. На тестовом сервере с нашим образом Debian 12 подкачки по умолчанию не было, поэтому её стоит создать самостоятельно.
* **Подключение по SSH**, например через [Termius](https://docs.f3cloud.com/ru/vps/termius-connection.md). Команды выполняются от имени `root`.
* **Свободное место на диске** под файл подкачки. Проверить его можно командой `df -h /`.

***

## 1. Проверьте, есть ли swap

```bash
free -h
swapon --show
```

Если в строке **Swap** у команды `free -h` стоят нули, а `swapon --show` ничего не выводит, подкачки на сервере нет.

***

## 2. Создайте файл подкачки

Сначала решите, какого размера будет файл. Мы советуем ориентироваться так.

* **Память до 2 ГБ.** Swap размером с объём памяти, то есть 1–2 ГБ.
* **От 2 до 8 ГБ.** Достаточно 2 ГБ.
* **Больше 8 ГБ.** Хватит 2–4 ГБ, большая подкачка такому серверу обычно не нужна.

Для примера создадим файл на 2 ГБ. Выполните команды по очереди.

```bash
# Выделяем на диске файл нужного размера
fallocate -l 2G /swapfile

# Доступ к файлу только у root
chmod 600 /swapfile

# Размечаем файл как область подкачки
mkswap /swapfile

# Включаем подкачку
swapon /swapfile
```

Проверьте результат ещё раз командами `swapon --show` и `free -h`. В строке **Swap** должен появиться объём **2.0Gi**.

<figure><img src="https://docs.f3cloud.com/img/swap-create.png" alt="Создание файла подкачки на 2 ГБ командами fallocate, chmod, mkswap и swapon, после чего free -h показывает Swap 2.0Gi"><figcaption><p>До создания swap был пустым, после него система видит 2 ГБ подкачки</p></figcaption></figure>

> **Если fallocate не сработал.**
>
> На некоторых файловых системах `fallocate` выдаёт ошибку. Тогда создайте файл командой `dd`, она медленнее, но работает везде. Вместо первой команды выполните `dd if=/dev/zero of=/swapfile bs=1M count=2048 status=progress`, где **2048** это размер в мегабайтах, а остальные шаги оставьте прежними.

***

## 3. Подключайте swap после перезагрузки

Команда `swapon` включает подкачку только до перезагрузки. Чтобы файл подключался автоматически, добавьте его в файл `/etc/fstab`.

```bash
echo "/swapfile none swap sw 0 0" >> /etc/fstab
```

Проверить, что запись правильная, можно без перезагрузки. Команда ниже отключит подкачку и включит её заново уже по записям из `/etc/fstab`.

```bash
swapoff -a && swapon -a && swapon --show
```

Если в выводе снова есть `/swapfile`, всё настроено верно.

> **Знак >> важен.**
>
> В команде с `echo` должно быть два знака `>>`. Они добавляют строку в конец файла. Один знак `>` полностью перезапишет `/etc/fstab`, и сервер может не загрузиться. Перед правкой можно сделать копию файла командой `cp /etc/fstab /root/fstab.bak`.

***

## 4. Настройте swappiness

Посмотрите текущее значение и уменьшите его до 10. Настройка в отдельном файле в каталоге `/etc/sysctl.d/` сохранится после перезагрузки.

```bash
# Текущее значение, по умолчанию 60
cat /proc/sys/vm/swappiness

# Сохраняем новое значение и сразу применяем его
echo "vm.swappiness=10" > /etc/sysctl.d/99-swappiness.conf
sysctl -p /etc/sysctl.d/99-swappiness.conf
```

<figure><img src="https://docs.f3cloud.com/img/swap-fstab.png" alt="Запись swap в /etc/fstab, установка vm.swappiness=10 и проверка swapon -a"><figcaption><p>Swap прописан в fstab, swappiness уменьшен до 10</p></figcaption></figure>

***

## Как изменить размер swap

Увеличить файл можно на месте. Отключите подкачку, задайте новый размер, разметьте файл заново и включите его.

```bash
swapoff /swapfile
fallocate -l 4G /swapfile
mkswap /swapfile
swapon /swapfile
```

Уменьшить файл таким способом не получится, `fallocate` только добавляет место. Чтобы сделать swap меньше, удалите старый файл и создайте новый нужного размера.

```bash
swapoff /swapfile
rm /swapfile
fallocate -l 1G /swapfile
chmod 600 /swapfile
mkswap /swapfile
swapon /swapfile
```

Запись в `/etc/fstab` менять не нужно, имя файла осталось прежним.

***

## Как отключить и удалить swap

```bash
# Отключаем подкачку
swapoff /swapfile

# Удаляем файл
rm /swapfile

# Убираем строку из fstab
sed -i '\|^/swapfile |d' /etc/fstab
```

Перед удалением убедитесь командой `free -h`, что в памяти хватит места для данных, которые сейчас лежат в подкачке. Иначе `swapoff` будет долго переносить их обратно и может не справиться из-за нехватки памяти.

***

## Частые вопросы

<details>

<summary>swapon: /swapfile: insecure permissions 0644, 0600 suggested</summary>

Файл подкачки доступен для чтения другим пользователям, а в нём могут оказаться пароли и другие данные из памяти программ. Ограничьте доступ.

```bash
chmod 600 /swapfile
```

</details>

<details>

<summary>swapon: /swapfile: swapon failed: Device or resource busy</summary>

Этот файл уже подключён как подкачка. Проверьте командой `swapon --show`. Если нужно что-то в нём поменять, сначала выполните `swapoff /swapfile`.

</details>

<details>

<summary>Swap есть, но сервер всё равно тормозит</summary>

Посмотрите, сколько подкачки занято, командой `free -h`. Если в swap постоянно лежат сотни мегабайт и система продолжает активно с ним работать, программам не хватает оперативной памяти. Swap здесь уже не поможет, нужно уменьшить потребление памяти или перейти на тариф с большим её объёмом. Как перейти на тариф мощнее, рассказано в [частых вопросах](https://docs.f3cloud.com/ru/client-area/frequently-asked-questions.md), данные и IP-адрес при этом сохраняются.

</details>

<details>

<summary>Нужен ли swap, если памяти много</summary>

Небольшой swap полезен и на сервере с большим объёмом памяти. Он позволяет системе вынести из памяти данные, которые давно не используются, и оставить больше места под кэш файлов. Кроме того, он даёт запас на случай утечки памяти в какой-нибудь программе, и у вас будет время заметить проблему до того, как сработает OOM killer.

</details>

***

## Наши ресурсы

**Telegram-канал:** [https://t.me/f3cloud_news](https://t.me/f3cloud_news)\
**Официальный сайт:** [https://f3cloud.com](https://f3cloud.com/ru)
