Как создать swap-файл в Linux, увеличить или удалить его
Чтобы создать swap-файл в Linux, хватит пяти команд: fallocate -l 8G /swapfile, chmod 600, mkswap, swapon и строка в /etc/fstab для автоподключения. Увеличить swap в Ubuntu можно так же, предварительно отключив старый файл через swapoff, а на Btrfs файл создают командой btrfs filesystem mkswapfile.

Содержание
Сначала проверьте, какой swap уже есть
swapon --show
free -h
Пример вывода на Ubuntu 26.04:
NAME TYPE SIZE USED PRIO
/swap.img file 4G 512M -2
Что можно увидеть:
/swap.imgили/swapfileс типом file - swap-файл, так по умолчанию делает установщик Ubuntu;/dev/zram0- сжатый swap в памяти, стандарт в Fedora с 33-й версии. Это не файл на диске, о нём отдельная статья про ZRAM;/dev/nvme0n1p3с типом partition - классический раздел подкачки;- пустой вывод - swap нет вовсе, так часто бывает на VPS и после ручной установки Arch.
Файл и раздел работают одинаково быстро. Файл удобнее: его размер меняется за минуту без переразметки диска.
Какой размер swap-файла выбрать
Жёсткого правила "вдвое больше памяти" давно нет. Swap нужен, чтобы ядро выгрузило редко используемые страницы и не включило OOM-killer при пике нагрузки. Если нужна гибернация, правило другое: в swap должно поместиться всё содержимое занятой памяти.
| Оперативная память | Без гибернации | С гибернацией |
|---|---|---|
| до 4 ГБ | равно объёму RAM | RAM x 2 |
| 8 ГБ | 4-8 ГБ | 12 ГБ |
| 16 ГБ | 4-8 ГБ | 20 ГБ |
| 32 ГБ и больше | 4-8 ГБ | RAM + 4-8 ГБ |
| VPS на 1-2 ГБ | 1-2 ГБ | не применяется |
Это ориентиры, а не закон. Если вы компилируете большие проекты или держите тяжёлые виртуальные машины, лучше чуть больше. Место на диске под swap проверьте заранее: df -h /.
Как создать swap-файл на ext4 и XFS
Классическая последовательность работает в Debian, Ubuntu, Fedora и Arch на ext4 и XFS:
sudo fallocate -l 8G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
swapon --show
Права 600 обязательны: иначе любой пользователь прочитает выгруженную на диск память, а swapon предупредит о небезопасных правах. Если fallocate не поддерживается файловой системой, создайте файл через dd, это медленнее, но надёжно:
sudo dd if=/dev/zero of=/swapfile bs=1M count=8192 status=progress
В свежих util-linux, которые стоят в Debian 13, Ubuntu 26.04 и Fedora 44, всё делается одной командой. Она сама выставляет права и заполняет блоки:
sudo mkswap --file /swapfile --size 8G
sudo swapon /swapfile
Подключение при загрузке
Чтобы swap включался после перезагрузки, добавьте строку в /etc/fstab:
echo '/swapfile none swap defaults 0 0' | sudo tee -a /etc/fstab
sudo swapoff /swapfile && sudo swapon -a # проверка, что строка корректна
Если swapon -a молча отработал и файл снова виден в swapon --show, запись верная. Формат fstab и опции подробно разобраны в статье про монтирование и /etc/fstab.
Как увеличить swap в Ubuntu
Активный swap-файл нельзя растянуть на ходу. Его отключают, пересоздают с новым размером и включают обратно. Имя файла возьмите из swapon --show, в Ubuntu это обычно /swap.img:
sudo swapoff /swap.img
sudo fallocate -l 16G /swap.img
sudo chmod 600 /swap.img
sudo mkswap /swap.img
sudo swapon /swap.img
free -h
swapoff переносит содержимое swap обратно в оперативную память. Если свободной RAM меньше, чем занято в swap, команда будет работать долго или завершится ошибкой: закройте тяжёлые программы перед ней. Строку в /etc/fstab менять не нужно, имя файла осталось прежним.
Вместо замены можно добавить второй файл, например /swapfile2, и прописать его в fstab отдельной строкой. Ядро использует оба.
Swap-файл на Btrfs
На Btrfs обычный fallocate не подойдёт: swap-файл должен быть без копирования при записи (NOCOW), без сжатия и целиком на одном устройстве. Кроме того, подтом с активным swap-файлом нельзя снапшотить, поэтому файл кладут в отдельный подтом, который не попадает в снимки Snapper или Timeshift.
sudo btrfs subvolume create /swap
sudo btrfs filesystem mkswapfile --size 8G /swap/swapfile
sudo swapon /swap/swapfile
echo '/swap/swapfile none swap defaults 0 0' | sudo tee -a /etc/fstab
Команда mkswapfile есть в btrfs-progs начиная с 6.1 и сама ставит атрибут NOCOW. На старых системах то же делают вручную: создать пустой файл, выполнить chattr +C, затем fallocate, chmod 600 и mkswap. Если корень смонтирован как подтом @, удобнее создать подтом @swap на верхнем уровне и примонтировать его в /swap, как это делают многие установщики. Как настроить снимки, чтобы они не мешали, описано в статье про Btrfs и Snapper. Ограничения перечислены в документации Btrfs.
Swappiness: как часто ядро уходит в swap
vm.swappiness задаёт, насколько охотно ядро выгружает анонимную память (данные программ) по сравнению со сбросом файлового кэша. Диапазон от 0 до 200, по умолчанию 60.
cat /proc/sys/vm/swappiness
sudo sysctl vm.swappiness=10 # до перезагрузки
echo 'vm.swappiness=10' | sudo tee /etc/sysctl.d/99-swappiness.conf
sudo sysctl --system # применить файлы из sysctl.d
Ориентиры: 10-30 для десктопа с SSD и достаточным объёмом памяти, если раздражают подтормаживания после долгого простоя браузера; 60 оставьте, если не видите проблем. Значение 0 не отключает swap полностью, оно лишь откладывает его до последнего, и при нехватке памяти система всё равно начнёт выгружать. С ZRAM, наоборот, ставят высокие значения вроде 150-180, потому что сжатая память быстрее диска.
Если у вас одновременно ZRAM и swap-файл, задайте приоритеты: ядро сначала заполняет устройство с большим pri. В fstab это опция pri=10 для файла, а zram-generator обычно ставит zram приоритет 100.
Гибернация в swap-файл
Для гибернации ядру нужно знать при загрузке, на каком разделе лежит файл и с какого смещения он начинается. Это два параметра: resume=UUID=... и resume_offset=....
findmnt -no UUID -T /swapfile # UUID раздела с файлом
sudo filefrag -v /swapfile | awk '$1=="0:" {print substr($4, 1, length($4)-2)}' # ext4
sudo btrfs inspect-internal map-swapfile -r /swap/swapfile # Btrfs
Для Btrfs значение из filefrag не подходит, только из map-swapfile -r. Дальше впишите параметры в GRUB_CMDLINE_LINUX_DEFAULT в /etc/default/grub и обновите загрузчик и initramfs:
# пример строки в /etc/default/grub
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash resume=UUID=1234abcd-... resume_offset=34816"
# Debian, Ubuntu
sudo update-grub
sudo update-initramfs -u
# Fedora
sudo grub2-mkconfig -o /boot/grub2/grub.cfg
sudo dracut -f
# проверка
systemctl hibernate
В Arch с mkinitcpio в HOOKS должен быть хук resume (или systemd). В свежих версиях systemd на UEFI-машинах параметр resume часто не нужен: systemd сам записывает расположение образа в переменную EFI перед гибернацией. Ручная настройка остаётся самым предсказуемым вариантом.
При включённом Secure Boot ядро в режиме lockdown запрещает гибернацию, и systemctl hibernate вернёт ошибку при любом размере swap. Сначала проверьте cat /sys/kernel/security/lockdown: если в квадратных скобках стоит integrity или confidentiality, ищите решение в настройках Secure Boot, а не в swap. Подробности в статье про Secure Boot.
Как удалить swap-файл
sudo swapoff /swapfile
sudo sed -i '\#^/swapfile #d' /etc/fstab # или удалите строку вручную в nano
sudo rm /swapfile
sudo systemctl daemon-reload
Не пропускайте правку fstab. Если удалить файл, а строку оставить, systemd при загрузке будет искать swap и запишет ошибку в журнал. Если вы уходите на ZRAM, сначала настройте его, а потом удаляйте файл, чтобы не остаться совсем без подкачки.
Ошибки swapon и как их понять
- swapon: /swapfile: swapon failed: Invalid argument - на Btrfs файл создан без NOCOW или лежит в сжатом каталоге. Пересоздайте через
btrfs filesystem mkswapfile. - skipping - it appears to have holes - файл разреженный, например скопирован через
cpили созданtruncate. Создайте заново черезfallocateилиdd. - insecure permissions 0644, 0600 suggested - выполните
sudo chmod 600на файл. - read swap header failed - забыли
mkswapпосле создания или изменения размера. - Система стала тормозить и шуршать диском - память закончилась, и swap лишь отсрочил OOM. Посмотрите, кто съел RAM, в
htop. Поможет статья о зависаниях Linux и OOM, где разобраны earlyoom и Magic SysRq.
Частые вопросы
Swap-файл или раздел подкачки: что лучше?
По скорости разницы нет. Файл проще изменить и удалить без переразметки диска, поэтому установщики Ubuntu и многих других дистрибутивов создают именно файл. Раздел нужен в редких случаях, например для гибернации на файловой системе, где swap-файл не поддерживается.
Сколько swap нужно при 16 ГБ памяти?
Без гибернации обычно хватает 4-8 ГБ. Для гибернации нужен объём не меньше занятой памяти, то есть ориентир около 20 ГБ.
Вредит ли swap SSD?
При нормальной работе swap пишется редко, и на ресурс современных SSD это почти не влияет. Если система постоянно активно свопится, проблема в нехватке памяти, а не в диске. Снизить запись помогают swappiness 10-30 или ZRAM.
Как временно отключить swap?
sudo swapoff -a отключит все области подкачки до перезагрузки. Перед этим убедитесь, что свободной оперативной памяти хватает на содержимое swap.
Можно ли иметь сразу ZRAM и swap-файл?
Да. Задайте zram более высокий приоритет, чтобы ядро сначала использовало сжатую память, а файл служил запасом. Приоритет файла указывается опцией pri в /etc/fstab.
Документация и источники
- Documentation for /proc/sys/vm, The Linux Kernel documentation, 2026
- Swapfile, BTRFS documentation, 2026
- mkswap(8), util-linux, man7.org, 2026
Читайте также
- ZRAM и swap в Linux: как настроить память, чтобы система не тормозила
- Монтирование дисков в Linux: от mount до автомонтирования в fstab
- Снимки Btrfs со Snapper: настройка и восстановление системы
- Что делать, если Linux зависает намертво: от REISUB до earlyoom
- Как освободить место на диске в Linux и найти, что его съело
Команды проверены на актуальных версиях дистрибутивов на момент обновления. Перед изменением системных настроек сделайте резервную копию.