Как добавить файл подкачки (swap) в Linux без изменения разделов

Ключевые темы
- Сравнение: swap файл vs swap раздел
- Особенности Btrfs и SSD
- Проверка текущего состояния swap
- Рекомендации по размеру swap
- Пошаговое создание, подготовка и включение swap файла
- Добавление в /etc/fstab и установка приоритета
- Мониторинг, тесты, устранение неполадок и безопасность
Введение
Добавить или увеличить пространство подкачки (swap) в Linux можно быстро и без создания новых разделов — с помощью swap файла. Это удобно для серверов, рабочих станций и ноутбуков, когда изменить разделы сложно или рискованно. Этот материал объясняет, как безопасно создать swap файл, на что обратить внимание при использовании Btrfs и SSD, как настроить приоритет, а также содержит вспомогательные чек-листы, сценарии тестирования и рекомендации по безопасности.
Important: любые операции с системными файлами делайте от имени root или с sudo. Перед редактированием /etc/fstab сохраните его копию.
Swap файл vs swap раздел
Коротко:
- Swap раздел — выделенный раздел диска, который используется как swap. Надёжно и просто в некоторых случаях (например, при установке системы).
- Swap файл — обычный файл в файловой системе, который ядро использует как swap. Гибко: можно создать, изменить, удалить без изменения разделов.
Когда выбирать swap файл:
- Нужно быстро добавить swap без переразметки диска.
- Нужно тестировать разные размеры swap и приоритеты.
- На большинстве современных систем разница в производительности минимальна.
Когда предпочесть раздел:
- На старых системах или специфичных окружениях, где ожидается строгая изоляция.
- Если вы используете специальные настройки загрузчика или окружения восстановления, требующие swap как раздела.
Контекст: раньше swap файл мог быть медленнее из-за особенностей файловых систем и работы с hole-совыми файлами. Современные ядра и файловые системы сделали swap файлы надёжным вариантом в большинстве сценариев.
Перед началом: Btrfs и SSD
Btrfs
Btrfs имеет особенности, которые ранее мешали использовать swap файлы. С ядра Linux 5.0 появились условия, при которых swap файл на Btrfs поддерживается. Требования:
- Файл не должен использовать copy-on-write (NOCOW).
- Файл не должен быть сжат.
- Файл не должен располагаться одновременно на нескольких устройств (не “straddle”).
Если вы используете Btrfs, создавайте файл с атрибутом NOCOW (chattr +C) или размещайте swap в другом файловом разделе (например, ext4). Пример создания файла с NOCOW будет приведён ниже.
SSD
Ранее советовали не размещать swap на SSD из-за опасений по износу. Сегодня это в большинстве случаев неактуально:
- Современные SSD имеют ресурс, превышающий срок службы типичной машины.
- Swap на SSD обычно быстрее, чем swap на механическом диске.
Тем не менее:
- Если конфиденциальные данные могут попасть в swap, рассмотрите шифрование swap (LUKS/полная шифровка раздела) или использование zram/zswap.
- Для интенсивных сценариев своппинга (частые своп/ансвоп операции) SSD может изнашиваться быстрее, но для обычного использования это редко критично.
Проверка существующего swap
Перед созданием нового swap файла посмотрите, есть ли уже swap, и сколько памяти у системы.
Используйте команду free с опцией -h:
free -h
Полезные поля:
- “total” — общий объём памяти.
- “available” — объём памяти, доступный приложениям.
- “buff/cache” — объём используемой под кеширование памяти, который при необходимости можно освободить.
Для просмотра активных swap устройств используйте:
swapon --showЕсли команда возвращает пустой вывод — swap отсутствует.
Важно: учитывайте уже существующий swap при расчёте дополнительного пространства. Можно добавлять несколько swap файлов, и они будут работать параллельно.
Сколько swap нужно
Нету универсального ответа. Ранее рекомендовалось “в два раза больше RAM” — это устаревшее правило. Советы зависят от целей:
- Если вы планируете гибернацию (suspend-to-disk), swap должен быть как минимум равен объёму RAM + немного про запас (например, +1–2 ГБ). Гибернация сохраняет содержимое RAM в swap.
- Для обычных рабочих станций с большим объёмом RAM (16–64 ГБ) swap обычно требуется для аварийного вытеснения и не обязан быть большим: 1–4 ГБ часто достаточно.
- Для серверов и систем с переменными нагрузками анализируйте фактическое использование: swapon –show, vmstat, sar.
Практическая эвристика:
- RAM ≤ 4 ГБ: swap 1–2× RAM.
- RAM 4–16 ГБ: swap 0.5–1× RAM (или 2–8 ГБ).
- RAM >16 ГБ: swap 1–4 ГБ обычно достаточно, если нет гибернации.
Главное: проще добавить/удалить swap файл, чем перестраивать разделы. Начните с разумного размера и мониторьте использование.
Создание swap файла (без fallocate)
Рекомендуемый способ — использовать dd с /dev/zero. Это гарантирует отсутствие «holes» и совместимость с разными файловыми системами.
Команда и пояснение параметров:
- if — input file (обычно /dev/zero для нулевых байтов).
- of — output file (путь к swap файлу, например /swapfile).
- bs — блок (например, 1K, 4K, 1M).
- count — количество блоков (size = bs × count).
Пример создания 1 ГБ swap файла (машина с 2 ГБ RAM в оригинальном примере):
sudo dd if=/dev/zero of=/swapfile bs=1024 count=1048576Примеры с более понятной записью (рекомендуемая практика):
- 1 ГБ:
sudo dd if=/dev/zero of=/swapfile bs=1M count=1024 status=progress- 4 ГБ:
sudo dd if=/dev/zero of=/swapfile bs=1M count=4096 status=progressЗамечание: параметр status=progress показывает прогресс на современных версиях dd.
Альтернатива fallocate:
- fallocate быстрее, но может создать разрежённый файл (holes) на некоторых файловых системах, что приведёт к ошибке swapon.
- На XFS с Linux >=4.18 fallocate поддерживается, но чтобы избежать проблем, используйте dd или заранее убедитесь в совместимости.
Создание swap файла на Btrfs
На Btrfs надо отключить COW для файла:
sudo btrfs property set -ts / file COW falseДругой подход — создать файл в каталоге с установленным атрибутом NOCOW:
sudo mkdir /swap-btrfs
sudo chattr +C /swap-btrfs
sudo dd if=/dev/zero of=/swap-btrfs/swapfile bs=1M count=1024 status=progressПосле создания файла можно проверить, что у него отсутствует атрибут COW и что файл не сжат.
Подготовка swap файла
Перед использованием необходимо пометить файл как swap:
sudo mkswap /swapfilemkswap выведет предупреждение о правах доступа (Ownership/Permissions). Нужно сделать файл доступным только для root:
sudo chmod 600 /swapfileПояснение: режим 600 означает, что владелец (root) может читать и писать, а группа и остальные — нет. Это снижает риск несанкционированного чтения содержимого swap файла.
Включение swap файла
Чтобы включить swap немедленно:
sudo swapon /swapfileПроверка:
swapon --show
free -hКоманды покажут активный swap и сколько из него используется.
Добавление swap в /etc/fstab
Чтобы swap подключался автоматически после перезагрузки, добавьте строку в /etc/fstab:
/swapfile none swap sw,pri=10 0 0Пояснения полей:
- File system: путь к swap файлу.
- Mount point: none — файл не монтируется как файловая система.
- Type: swap.
- Options: например sw или sw,pri=10. pri задаёт приоритет использования.
- Dump и Pass: обычно 0 0 для swap.
Важное примечание: не оставляйте пробелы внутри поля options между sw и запятой. После правки сохраните /etc/fstab и проверьте корректность:
sudo mount -aЕсли mount -a не выдаёт ошибок, запись корректна.
Приоритет swap и как он работает
Каждому swap ресурсу можно задать приоритет (pri). Диапазон 0..32767 для ручного задания; автоматически назначенные приоритеты — всегда отрицательные.
Правила использования:
- Swap с большим pri будет использоваться раньше.
- Если два ресурса имеют одинаковый pri, они будут использоваться поочерёдно.
Чтобы задать приоритет, добавьте опцию pri в /etc/fstab: pri=10. После перезагрузки проверьте:
swapon --showУдаление или замена swap файла
Если нужно удалить swap файл:
sudo swapoff /swapfile
sudo rm /swapfileЗатем удалите строку из /etc/fstab, чтобы при следующей загрузке система не пыталась активировать отсутствующий файл.
Чтобы увеличить swap, проще создать новый больший swap файл или добавить ещё один swap файл, чем изменять существующий:
sudo dd if=/dev/zero of=/swapfile2 bs=1M count=2048
sudo mkswap /swapfile2
sudo chmod 600 /swapfile2
sudo swapon /swapfile2Или удалить старый и создать новый с нужным размером.
Альтернативы и расширенные опции
zram
- zram создаёт сжатый swap в оперативной памяти. Подходит для систем с малой RAM и где важна скорость.
- Плюсы: низкая задержка, снижение I/O на диск.
- Минусы: использует часть RAM как пул для сжатого swap.
zswap
- zswap — компрессионный кэш swap, который размещается в оперативной памяти. При переполнении сбрасывается на физический диск.
Шифрование swap
- Swap может содержать конфиденциальные данные. Для защиты используйте шифрование (например, LUKS на разделе swap) или включите автоматическое шифрование swap при загрузке.
Swap на LVM
- Можно создать логический том (LV) и сделать его swap. Это удобно, если вы управляете LVM и хотите гибко изменять размер swap без работы с файловой системой.
Настройка swappiness и другие тюнинги
Swappiness — параметр ядра, который управляет склонностью использовать swap. Значение в диапазоне 0..100:
- 0 — минимальная склонность к своппингу (используется только в крайних случаях).
- 60 — значение по умолчанию в большинстве дистрибутивов.
- 100 — агрессивное использование swap.
Посмотреть текущее значение:
cat /proc/sys/vm/swappinessВременно установить:
sudo sysctl vm.swappiness=10Постоянно в /etc/sysctl.conf:
vm.swappiness=10Подбор значения:
- Для настольных систем с большим объёмом RAM можно понизить swappiness до 10–20.
- Для серверов с ограниченной RAM и предсказуемыми нагрузками оставьте дефолт или немного выше.
Другие параметры:
- vm.vfs_cache_pressure — контроль очистки кэшей VFS (по умолчанию 100). Уменьшение значения удерживает кэш дольше.
Мониторинг и тестирование
Команды для мониторинга:
- free -h
- swapon –show
- vmstat 1 5
- top или htop (посмотрите столбцы VIRT, RES, SWAP для процессов)
- iostat, iotop — для оценки I/O нагрузки при активном swap
Тесты и критерии приёмки:
- Swap активирован: swapon –show показывает созданный файл.
- Swap не используется в постоянном режиме: длительное использование swap — индикатор недостатка RAM или неправильной настройки swappiness.
- При включении swap не появляются ошибки в dmesg или journalctl.
Примеры тест-кейсов:
- Создание 1 ГБ swap файла, включение и проверка swapon –show.
- Добавление в /etc/fstab, перезагрузка, проверка активации.
- Установка pri и проверка приоритетов при наличии двух swap ресурсов.
- Проверка поведения при заполнении swap и наблюдение I/O.
Устранение распространённых ошибок
Ошибка: swapon: /swapfile: swapon failed: Invalid argument
- Причина: файл может быть разрежённым (holes) или сжат/использует COW (Btrfs). Решения: создайте файл через dd, отключите COW, используйте не сжатый каталог.
Ошибка: При загрузке система зависает или долго грузится
- Проверьте /etc/fstab на синтаксические ошибки. Перед перезагрузкой выполните sudo mount -a для проверки.
Swap не ведёт себя как ожидалось
- Проверьте swappiness, vmstat и iotop. Возможно, приложение использует слишком много RAM и активно свопится.
Безопасность и конфиденциальность
- Swap может содержать данные, которые были в RAM (включая фрагменты файлов, ключи, пароли). Если это важно, используйте шифрование swap или отключайте swap для конфиденциальных систем.
- Для ноутбуков и портативных устройств с чувствительными данными: используйте шифрование диска (LUKS) или шифрованный swap.
- Для серверов: рассмотрите использование tmpfs/zram, если допустима потеря в случае перезагрузки.
Роль-based чек-листы
Для администратора сервера:
- Оценить текущее использование RAM и swap.
- Решить, нужен ли swap для гибернации.
- Создать swap файл через dd или LV на LVM.
- Защитить права на файл chmod 600.
- Добавить запись в /etc/fstab с pri при необходимости.
- Настроить swappiness и vm.vfs_cache_pressure.
- Настроить мониторинг (Prometheus/node_exporter, sysstat).
Для домашнего пользователя/настольного ПК:
- Создать небольшой swap (1–4 ГБ) если RAM < 16 ГБ.
- Для гибернации — убедиться, что swap >= RAM.
- Ограничить swappiness до 10–20.
- Рассмотреть zram для экономии дискового I/O.
Для разработчика/тестирования:
- Быстро добавлять и удалять swap файлы для тестов.
- Логировать поведение при высокой нагрузке памяти.
- Использовать отдельный диск/раздел для воспроизводимости тестов.
Мини-SOP: быстрый сценарий (шаг за шагом)
- Проверить наличие swap:
free -h
swapon --show- Создать файл 2 ГБ:
sudo dd if=/dev/zero of=/swapfile bs=1M count=2048 status=progress- Подготовить и защитить файл:
sudo mkswap /swapfile
sudo chmod 600 /swapfile- Включить swap:
sudo swapon /swapfile
swapon --show- Добавить в /etc/fstab:
/swapfile none swap sw,pri=10 0 0- Проверить после перезагрузки.
Примеры команд и сниппеты (cheat sheet)
- Создать 512 МБ swap:
sudo dd if=/dev/zero of=/swapfile512 bs=1M count=512 status=progress
sudo mkswap /swapfile512
sudo chmod 600 /swapfile512
sudo swapon /swapfile512- Выключить и удалить swap:
sudo swapoff /swapfile512
sudo rm /swapfile512- Временно изменить swappiness:
sudo sysctl vm.swappiness=10- Постоянно изменить swappiness:
echo 'vm.swappiness=10' | sudo tee -a /etc/sysctl.confСовместимость и заметки по версиям ядра
- swap файлы на Btrfs официально поддерживаются с Linux 5.0 при соблюдении условий (NOCOW, не сжатые).
- fallocate для swap стал безопасным на XFS начиная с Linux 4.18; на других FS fallocate может привести к созданию разрежённого файла.
- Всегда проверяйте dmesg/journalctl после попытки swapon, если возникают ошибки.
Decision flowchart
flowchart TD
A[Нужен ли swap?] -->|Да| B{Есть ли swap сейчас?}
B -->|Нет| C[Создать swap файл]
B -->|Да| D{Достаточен ли размер?}
D -->|Да| E[Настроить swappiness]
D -->|Нет| F[Добавить swap файл / увеличить]
C --> G[Использовать dd, mkswap, chmod, swapon]
F --> G
G --> H[Добавить в /etc/fstab]
H --> I[Проверить после перезагрузки]
E --> IЧастые сценарии и примеры применения
Сценарий: ноутбук с 8 ГБ RAM и планом на гибернацию — создайте swap ≥ 8 ГБ. Для настольного ПК с 32 ГБ RAM, где гибернация не нужна, достаточно 2–4 ГБ.
Сценарий: сервер с 4 ГБ RAM, высокий пиковый спрос — лучше выделить 4–8 ГБ swap и настроить мониторинг; рассмотрите zram как альтернативу при ограниченном дисковом I/O.
Краткое резюме
- Swap файл — гибкий и безопасный способ добавить подкачку без изменения разделов.
- Используйте dd для совместимости между файловыми системами; на Btrfs отключите COW и не используйте сжатие.
- Защитите swap файл правами 600 и при необходимости шифруйте.
- Настройте swappiness и мониторьте поведение системы.
Notes: если вы не уверены в последствиях, протестируйте пассивно: создайте небольшой swap файл, проверьте поведение и постепенно увеличивайте.


| Команды Linux | |
|---|---|
| Файлы | tar · pv · cat · tac · chmod · grep · diff · sed · ar · man · pushd · popd · fsck · testdisk · seq · fd · pandoc · cd · $PATH · awk · join · jq · fold · uniq · journalctl · tail · stat · ls · fstab · echo · less · chgrp · chown · rev · look · strings · type · rename · zip · unzip · mount · umount · install · fdisk · mkfs · rm · rmdir · rsync · df · gpg · vi · nano · mkdir · du · ln · patch · convert · rclone · shred · srm · scp · gzip · chattr · cut · find · umask · wc · tr |
| Процессы | alias · screen · top · nice · renice · progress · strace · systemd · tmux · chsh · history · at · batch · free · which · dmesg · chfn · usermod · ps · chroot · xargs · tty · pinky · lsof · vmstat · timeout · wall · yes · kill · sleep · sudo · su · time · groupadd · usermod · groups · lshw · shutdown · reboot · halt · poweroff · passwd · lscpu · crontab · date · bg · fg · pidof · nohup · pmap |
| Сеть | netstat · ping · traceroute · ip · ss · whois · fail2ban · bmon · dig · finger · nmap · ftp · curl · wget · who · whoami · w · iptables · ssh-keygen · ufw · arping · firewalld |
Заключение
Добавление swap файла — несложная операция, но требует внимательности: используйте корректный метод создания (dd), установите права и при необходимости настройте приоритет и шифрование. Наблюдение за системой после изменений поможет понять, нужно ли ещё регулировать размер swap или параметры swappiness.
Boom. Job done.