Введение / Зачем это нужно
Swap-пространство (area of swap, подкачка) — это область на диске, которая используется как расширение оперативной памяти (ОЗУ). Когда физической памяти становится недостаточно, ядро Linux перемещает неактивные страницы памяти в swap, освобождая ОЗУ для более важных процессов. Это помогает избежать аварийного завершения программ из-за нехватки памяти (OOM killer) и повышает общую стабильность системы, особенно на серверах с небольшим объёмом ОЗУ или на десктопах, где одновременно работают многие тяжёлые приложения.
В этом гайде вы научитесь создавать и настраивать swap-файл — наиболее гибкий и современный способ добавления swap-пространства в Linux. Вы сможете контролировать его размер, включать/отключать без перезагрузки и настраивать поведение системы при использовании подкачки.
Требования / Подготовка
Перед началом убедитесь, что:
- У вас есть доступ к системе с правами sudo или root.
- На целевом диске (обычно
/или/home) достаточно свободного места. Рекомендуемый размер swap: от 2 ГБ до размера вашей ОЗУ (см. FAQ). - Вы знаете путь к разделу, на котором будет размещаться файл. Проверить можно командой
df -h. - Установлены базовые утилиты:
fallocate(обычно в пакетеutil-linux) илиdd. Еслиfallocateнедоступен, используйтеdd.
Шаг 1: Проверка текущего swap-пространства
Сначала давайте посмотрим, есть ли уже активный swap и сколько он занимает. Выполните команду:
sudo swapon --show
Или используйте утилиту free:
free -h
В выводе ищите строку Swap:. Если она показывает 0B или раздел swap отсутствует в списке, значит, активного swap нет, и вам нужно его создать.
Также можно проверить, есть ли уже swap-раздел в системе, с помощью:
lsblk -f
Ищите тип swap в колонке FSTYPE.
Шаг 2: Создание swap-файла
Мы создадим swap-файл в корневом каталоге (/). Вы можете выбрать другое место, например /swapfile или /var/swap. Размер укажем в гигабайтах. Для примера создадим файл размером 4 ГБ.
Способ A: С помощью fallocate (быстро, рекомендовано)
sudo fallocate -l 4G /swapfile
Эта команда мгновенно создаёт файл заданного размера, резервируя место на диске. Если fallocate не работает на вашей файловой системе (например, на некоторых старых версиях ext4 с включённым -o discard), используйте Способ B.
Способ B: С помощью dd (медленнее, но универсальнее)
sudo dd if=/dev/zero of=/swapfile bs=1M count=4096 status=progress
Здесь bs=1M — блок в 1 мегабайт, count=4096 — количество блоков (4096 * 1М = 4ГБ). status=progress показывает ход выполнения (доступно в современных версиях dd).
⚠️ Важно: Убедитесь, что на целевом разделе достаточно места. Команда
df -hпокажет свободное пространство.
Шаг 3: Настройка прав дочения и превращение в swap
По умолчанию созданный файл доступен на чтение и запись всем. Это небезопасно для swap-файла. Установим правильные права:
sudo chmod 600 /swapfile
Теперь только пользователь root может читать и записывать в этот файл.
Далее инициализируем файл как swap-область:
sudo mkswap /swapfile
Вывод команды будет примерно таким:
Setting up swapspace version 1, size = 4 GiB (4294967296 bytes)
no label, UUID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
Запомните или сохраните UUID (уникальный идентификатор) — он понадобится для настройки /etc/fstab.
Шаг 4: Активация swap-файла
Теперь включим новое swap-пространство в текущей сессии:
sudo swapon /swapfile
Снова проверьте его наличие:
sudo swapon --show
Вы должны увидеть ваш /swapfile в списке с указанием размера и типа file.
Также команда free -h покажет общий объём swap в строке Swap:.
Шаг 5: Настройка параметров и постоянное включение
5.1 Добавление в /etc/fstab
Чтобы swap активировался автоматически при каждой загрузке системы, добавьте запись в файл /etc/fstab. Откройте его для редактирования (например, sudo nano /etc/fstab) и добавьте строку:
/swapfile none swap sw 0 0
Если вы хотите использовать UUID (более надёжный способ, особенно если путь к файлу может измениться), укажите:
UUID=ваш-uuid-из-шага-3 none swap sw 0 0
Сохраните файл и закройте редактор.
5.2 Настройка vm.swappiness (опционально)
Параметр vm.swappiness контролирует, насколько агрессивно ядро будет использовать swap. Значение от 0 до 100.
0— ядро будет избегать swap, пока не будет полностью исчерпана ОЗУ.100— ядро будет активно использовать swap.- По умолчанию в большинстве дистрибутивов —
60.
Проверить текущее значение:
cat /proc/sys/vm/swappiness
Временно изменить (до перезагрузки):
sudo sysctl vm.swappiness=10
Постоянно изменить: добавьте строку в /etc/sysctl.conf или создайте отдельный конфиг в /etc/sysctl.d/99-swappiness.conf:
vm.swappiness=10
Примените изменения без перезагрузки:
sudo sysctl -p
Для большинства десктопных систем рекомендуемое значение — 10-30. Для серверов с большим объёмом ОЗУ можно оставить 60 или даже понизить до 10.
Проверка результата
- Перезагрузите систему (
sudo reboot), чтобы убедиться, что swap активируется автоматически. - После загрузки выполните:
В выводе должен присутствовать ваш swap-файл.sudo swapon --show free -h - Проверьте, что запись в
/etc/fstabне вызывает ошибок при загрузке. Можно выполнить:
Если команда завершится без ошибок, конфигурация верна.sudo mount -a - Следите за использованием swap в реальном времени:
Или используйте утилитуwatch -n 2 free -hhtop(если установлена), где swap отображается вверху.
Возможные проблемы
Проблема: fallocate не работает, файл создаётся с нулевым размером
Решение: Используйте dd (Способ B). Это может происходить на файловых системах, не поддерживающих fallocate (например, некоторые конфигурации NFS или старые ext4).
Проблема: При активации появляется ошибка swapon: /swapfile: swapon failed: Invalid argument
Решение: Скорее всего, файл создан неправильно или имеет неверные права. Убедитесь, что:
- Файл существует и имеет размер больше нуля (
ls -lh /swapfile). - Права установлены в
600(sudo chmod 600 /swapfile). - Файл инициализирован через
sudo mkswap /swapfile.
Проблема: Swap не активируется после перезагрузки
Решение:
- Проверьте синтаксис записи в
/etc/fstab. Лучше использовать UUID. - Проверьте вывод
sudo mount -aна наличие ошибок. - Убедитесь, что файл
/swapfileсуществует по указанному пути и не был удалён.
Проблема: Система не использует swap, хотя память заканчивается
Решение: Проверьте значение vm.swappiness. Если оно равно 0, система будет стараться не использовать swap. Увеличьте его до 10 или 20. Также проверьте, не переполнен ли swap (free -h показывает Swap: 4.0G 0B 4.0G — это нормально, если используется 0Б).
Проблема: Производительность падает при активном использовании swap
Решение: Swap на HDD (обычный жёсткий диск) сильно замедляет систему. Рассмотрите возможность:
- Добавления большего объёма ОЗУ (наиболее эффективное решение).
- Использования swap-файла на SSD (гораздо быстрее, но износ накопителя увеличится).
- Настройки
vm.vfs_cache_pressureи других параметров в/etc/sysctl.confдля оптимизации кэширования. - Увеличения
vm.swappinessдо0, если swap используется только как аварийный запас.
Проблема: Недостаточно места на диске для создания swap-файла
Решение: Очистите место, удалив ненужные файлы (/var/log, кэш пакетов, старые ядра). Либо создайте swap-файл на другом разделе/диске, где есть свободное место. В крайнем случае можно создать swap-раздел (через fdisk/gdisk и mkswap), но это потребует переразметки диска и перезагрузки.