Подробный гайд: Альтернативные способы создания swap-файла в Linux (2024–2026)

Создание swap-файла в Linux: fallocate, dd, Btrfs, ZFS, zram. Настройка, безопасность и оптимизация под разные файловые системы.

2026.04.23                  


Подробный гайд: Альтернативные способы создания swap-файла в Linux (2024–2026)Подробный гайд: Альтернативные способы создания swap-файла в Linux (2024–2026) Для кого: системные администраторы, DevOps-инженеры, продвинутые пользователи.
Цель: освоить современные, безопасные и оптимизированные под разные ФС методы создания swap-файла, понять ограничения и выбрать оптимальный подход для вашей среды.


Что такое swap-файл и зачем он нужен?

Swap-файл — это обычный файл на диске, который ядро использует как расширенную оперативную память.

Применяется:

  • При нехватке RAM (предотвращает OOM-killer)
  • Для поддержки гибернации (hibernate / suspend-to-disk)
  • Стабилизации работы серверов с переменной нагрузкой
  • В контейнерных/виртуальных средах, где выделение отдельного раздела затруднено

Важные предостережения перед созданием

  1. Файловая система: Не все ФС поддерживают swap-файлы одинаково. Btrfs и ZFS требуют особых настроек.
  2. Безопасность: Данные в swap попадают на диск в открытом виде. Если диск не зашифрован (LUKS/dm-crypt), конфиденциальная информация может остаться после выключения.
  3. Права: Файл обязательно должен иметь права 600. Иначе ядро откажется активировать swap из соображений безопасности.
  4. Производительность: Swap на HDD работает медленно. На SSD предпочтительно использовать discard или TRIM. В 2025+ ядрах swap автоматически учитывает особенности NVMe.

Способ 1: fallocate (рекомендуемый для ext4 / XFS / NTFS)

Самый быстрый и современный метод. Не заполняет файл нулями, а сразу резервирует блоки.

# 1. Создаём файл нужного размера
sudo fallocate -l 4G /swapfile

# 2. Устанавливаем права
sudo chmod 600 /swapfile

# 3. Форматируем как swap
sudo mkswap /swapfile

# 4. Активируем
sudo swapon /swapfile

# 5. Добавляем в fstab для постоянной работы
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab

Плюсы: мгновенное создание, минимальное влияние на I/O, поддержка большинства современных ФС
Минусы: не работает "из коробки" на Btrfs без отключения COW, не подходит для sparse-файловых систем


Способ 2: Классический dd (универсальный, но медленный)

Старый надёжный метод. Явно записывает нули, гарантируя смежность блоков.

sudo dd if=/dev/zero of=/swapfile bs=1M count=4096 status=progress conv=fdatasync
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile

Совет: для ускорения на современных системах используйте bs=4M или bs=16M. Параметр conv=fdatasync гарантирует сброс кэша до завершения.


Способ 3: truncate (только для тестов / лабораторий)

Создаёт "дырявый" (sparse) файл. Занимает место на диске только по мере фактической записи данных в swap.

sudo truncate -s 4G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile

Внимание: Ядро часто отказывается активировать swap на sparse-файлах, так как блоки не гарантированно смежны. Используйте только для отладки или в средах с поддержкой swap on sparse (экспериментально в некоторых ядрах).


Способ 4: Swap-файл на Btrfs

Btrfs по умолчанию использует Copy-on-Write (CoW), что несовместимо со стабильной работой swap. Начиная с ядра 5.0+ поддержка разрешена, но требует явного отключения CoW и фрагментации.

Вариант А: Создание на отдельном субтоме (рекомендуется)

# 1. Создаём субтом без CoW
sudo btrfs subvolume create /swapvol
sudo chattr +C /swapvol

# 2. Создаём файл
sudo fallocate -l 4G /swapvol/swapfile
sudo chmod 600 /swapvol/swapfile

# 3. Форматируем и активируем
sudo mkswap /swapvol/swapfile
sudo swapon /swapvol/swapfile

# 4. В fstab указываем субтом
echo '/swapvol/swapfile none swap sw,nofail 0 0' | sudo tee -a /etc/fstab

Вариант Б: Использование btrfs filesystem mkswapfile (ядро 5.15+)

sudo btrfs filesystem mkswapfile -s 4G /swapfile
sudo chmod 600 /swapfile
sudo swapon /swapfile

Команда сама отключает CoW, проверяет смежность и форматирует файл.

Проверка фрагментации:

sudo filefrag -v /swapfile | grep "extents"
# Должно быть: 1 extent

Способ 5: Swap на ZFS

Официально ZFS не поддерживает swap-файлы внутри пула. Рекомендуется использовать zvol (блочное устройство) или внешние решения.

Через ZVOL (безопасно и производительно)

# 1. Создаём zvol с подходящим размером блока
sudo zfs create -V 4G -b 4K -o sync=always pool/swap

# 2. Форматируем
sudo mkswap /dev/zvol/pool/swap

# 3. Активируем
sudo swapon /dev/zvol/pool/swap

# 4. В fstab
echo '/dev/zvol/pool/swap none swap sw 0 0' | sudo tee -a /etc/fstab

Альтернатива для ZFS: используйте zram или zswap (сжатие в RAM), так как swap на диске часто противоречит идеологии ZFS (ARC уже управляет кэшем эффективно).


Способ 6: Динамический и сжатый swap (современные подходы)

zram-generator (systemd, рекомендовано в 2024+)

Создаёт сжатый swap в оперативной памяти. Идеально для ноутбуков, VPS, контейнеров.

# Установка (Ubuntu/Debian)
sudo apt install zram-generator

# Конфигурация
sudo tee /etc/systemd/zram-generator.conf <<EOF
[zram0]
zram-size = min(ram, 4096)
compression-algorithm = zstd
swap-priority = 100
EOF

# Активация
sudo systemctl daemon-reload
sudo systemctl start systemd-zram-setup@zram0.service

Автоматически создаёт /dev/zram0, форматирует, активирует, обрабатывает гибернацию (при наличии resume= в GRUB)

dphys-swapfile (Debian/Ubuntu/Raspbian)

Автоматически управляет размером файла в зависимости от RAM и нагрузки.

sudo apt install dphys-swapfile
sudo nano /etc/dphys-swapfile  # настройте CONF_SWAPSIZE=2048
sudo systemctl enable --now dphys-swapfile

Автоматизация и systemd-подход

Вместо fstab можно использовать нативные юниты systemd:

/etc/systemd/system/swapfile.service

[Unit]
Description=Activate swap file
Before=local-fs.target

[Service]
Type=oneshot
ExecStart=/sbin/swapon /swapfile
RemainAfterExit=yes

[Install]
WantedBy=multi-user.target
sudo systemctl enable --now swapfile.service

Преимущество:

  • точный контроль порядка загрузки, логирование, интеграция с systemd-analyze.

Проверка и мониторинг

# Показать активные swap-устройства
swapon --show

# Подробная статистика
cat /proc/swaps

# Использование памяти + swap
free -h

# Проверить, используется ли swap
vmstat 1 5

Тонкая настройка ядра (/etc/sysctl.d/99-swap.conf)

# Как активно ядро использует swap (0–100)
vm.swappiness=10

# Давление на кэш файловой системы
vm.vfs_cache_pressure=50

# Для SSD: отправка TRIM при очистке swap
vm.swap_slot_cache=1

Применить:

  • sudo sysctl -p /etc/sysctl.d/99-swap.conf

Таблица выбора метода (2024–2026)

Среда / ФС Рекомендуемый метод Примечание
ext4 / XFS fallocate Быстро, надёжно, стандарт де-факто
Btrfs btrfs filesystem mkswapfile Ядро 5.15+, иначе субтом + +C
ZFS zvol или zram Swap в пуле официально не поддерживается
VPS / Контейнеры zram-generator Экономия места, высокая скорость
Десктоп / Ноутбук dphys-swapfile + zram Автоматическая адаптация, гибернация
Автоматизация (IaC) Ansible community.general.mkswap + systemd unit Идеально для Terraform/Packer

Безопасность и обслуживание

  1. Шифрование: Если диск не зашифрован, используйте cryptsetup или убедитесь, что swap очищается при выключении (swapoff -a в shutdown скриптах).
  2. Очистка: При удалении файла не просто rm, а swapoff /swapfile && rm -f /swapfile.
  3. Обновление ядра: Современные ядра (6.6+) улучшили поддержку swap на btrfs/zram и добавили swap_cluster_info для оптимизации NVMe.
  4. Мониторинг: Настройте алерты при использовании swap > 30% (node_exporter + Prometheus, zabbix-agent или collectd).

Заключение

Создание swap-файла давно вышло за рамки dd. В 2025–2026 годах приоритет отдаётся:

  • fallocate для классических ФС
  • нативным утилитам ФС (btrfs mkswapfile, zvol)
  • сжатым swap в памяти (zram)
  • автоматизации через systemd и конфигурационные менеджеры

Выбирайте метод исходя из файловой системы, требований к производительности и стратегии безопасности. Всегда проверяйте смежность блоков, права 600 и наличие записи в fstab/systemd.