Введение / Зачем это нужно
Файл подкачки (swap) в Linux — это область на диске, которая используется как расширение оперативной памяти (RAM). Когда физической памяти становится недостаточно, система автоматически перемещает неактивные данные из RAM в swap, что предотвращает аварийное завершение процессов из-за нехватки памяти.
Создание swap-файла — это быстрая и гибкая альтернатива выделению swap-раздела. Вы сможете:
- Стабилизировать работу системы при пиковых нагрузках или при работе с памятью-ёмкими приложениями.
- Увеличить доступную память без апгрейда железа.
- Настроить параметры подкачки под конкретные задачи (сервер, десктоп, встраиваемая система).
После выполнения этого гайда у вас будет настроенный и активный swap-файл, который будет автоматически подключаться при загрузке системы.
Требования / Подготовка
Перед началом убедитесь, что:
- У вас есть доступ к root-учётной записи или права sudo.
- На диске есть незанятое пространство. Размер swap-файла зависит от ваших потребностей:
- Для систем с 4 ГБ RAM и менее: размер swap = 1.5–2 × RAM.
- Для систем с 8+ ГБ RAM: достаточно 1–4 ГБ swap (или даже меньше, если RAM >16 ГБ).
- Для серверов с большими базами данных: может потребоваться swap размером с RAM.
- Установлены базовые утилиты:
fallocate(обычно в пакетеutil-linux) илиdd(есть везде). Проверить:which fallocate.
Пошаговая инструкция
Шаг 1: Проверьте текущую конфигурацию swap
Прежде чем создавать новый файл, убедитесь, что у вас нет уже активного swap (например, раздела или файла по умолчанию).
free -h
или
swapon --show
Что вы увидите:
total used free shared buff/cache available
Mem: 7.7G 1.2G 5.1G 156M 1.4G 6.1G
Swap: 2.0G 0B 2.0G
Если в строке Swap показан ноль или раздел отсутствует в выводе swapon --show, продолжайте создание файла.
Шаг 2: Создайте файл нужного размера
Рекомендуемый способ — fallocate, так как он создаёт файл мгновенно, без заполнения нулями.
sudo fallocate -l 2G /swapfile
Здесь:
-l 2G— размер файла (2 гигабайта). Замените2Gна нужное значение:1G,4G,512Mи т.д./swapfile— путь к файлу. Обычно размещают в корне/.
Альтернатива для старых систем (если fallocate недоступен):
sudo dd if=/dev/zero of=/swapfile bs=1M count=2048 status=progress
bs=1M count=2048 создаст файл размером 2048 МБ (2 ГБ). Этот метод медленнее, так как записывает нули во весь файл.
Шаг 3: Установите корректные права доступа
Swap-файл содержит чувствительные данные (фрагменты памяти процессов). Он должен быть доступен только суперпользователю.
sudo chmod 600 /swapfile
Проверьте права:
ls -lh /swapfile
Вывод должен быть: -rw------- 1 root root ... /swapfile.
Шаг 4: Отформатируйте файл под swap
Подготовьте файл к использованию в качестве пространства подкачки:
sudo mkswap /swapfile
Пример вывода:
Setting up swapspace version 1, size = 2 GiB (2147479552 bytes)
no label, UUID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
Запомните UUID (если планируете использовать его в /etc/fstab), но обычно достаточно указать путь к файлу.
Шаг 5: Активируйте swap-файл
Включите файл в систему без перезагрузки:
sudo swapon /swapfile
Сделайте настройку постоянной (чтобы swap активировался после каждой перезагрузки):
Откройте файл /etc/fstab в редакторе (например, sudo nano /etc/fstab) и добавьте в конец строку:
/swapfile none swap sw 0 0
Сохраните и закройте редактор.
Шаг 6: Настройте параметры swappiness (опционально)
Параметр vm.swappiness контролирует, насколько агрессивно система будет использовать swap. Значение от 0 (минимум) до 100 (максимум). По умолчанию часто стоит 60.
Для десктопов (чтобы не тормозить приложениях) рекомендуется 10–20.
Для серверов (чтобы оставить больше данных в RAM) — 1–5.
Установите временно (до перезагрузки):
sudo sysctl vm.swappiness=10
Чтобы значение сохранилось, добавьте в /etc/sysctl.conf:
vm.swappiness=10
И примените: sudo sysctl -p.
Проверка результата
- Убедитесь, что swap активен:
swapon --show
В выводе должен быть ваш/swapfile. - Проверьте общую память:
free -h
В строке Swap теперь будет показан размер и использование. - Убедитесь, что настройка постоянна (перезагрузите систему и снова выполните
free -h). - (Опционально) Проверьте запись в
/etc/fstab:cat /etc/fstab | grep swap
Должна быть строка с/swapfile.
Возможные проблемы
❌ Ошибка fallocate: fallocate failed: No space left on device
- Причина: На диске недостаточно свободного места.
- Решение: Освободите место (
df -hдля проверки) или создайте файл меньшего размера.
❌ Ошибка chmod: changing permissions of ‘/swapfile’: Operation not permitted
- Причина: Файл находится на смонтированной в режиме
noexecилиnosuidфайловой системе (например, некоторые разделы/home). - Решение: Создайте файл в корне
/или на разделе, где разрешены изменения прав.
❌ После перезагрузки swap не активируется
- Причина: Ошибка в
/etc/fstab(лишние пробелы, неправильный путь) или файл был перемещён/удалён. - Решение: Проверьте синтаксис
/etc/fstabкомандойsudo mount -a(ошибка будет выведена). Убедитесь, что файл/swapfileсуществует и имеет права600.
❌ Система «зависает» при активном использовании swap
- Причина: Слишком высокое значение
vm.swappiness(система агрессивно пишет в swap на медленном HDD). - Решение: Уменьшите
vm.swappinessдо 1–5. Для SSD это менее критично, но тоже стоит настроить.
❌ mkswap выдаёт предупреждение о размере файла
- Причина: Файл создан не целым числом мегабайт (например, 2.5 ГБ).
- Решение:
mkswapобычно работает с любым размером, но для совместимости лучше создавать файл размером, кратным 4 КБ. Пересоздайте файл с размером, кратным 1 МБ (например,2048Mвместо2G).