Автоматическая настройка гибридной подкачки (swapfile + zram) для Debian/Ubuntu VPS с малым объёмом RAM (512 МБ – 8 ГБ).
Одна команда — скачивает, устанавливает в /usr/local/sbin/ и запускает интерактивный мастер:
wget -qO- https://raw.githubusercontent.com/civisrom/swapfile-script/main/install.sh | sudo bashС параметрами (без интерактивного режима):
wget -qO- https://raw.githubusercontent.com/civisrom/swapfile-script/main/install.sh | sudo bash -s -- --lang ru --ram 1После установки скрипт доступен как системная команда:
sudo swap-setup.sh --lang ru --status
sudo swap-setup.sh --lang ru --removeУстановщик проверяет загруженный swap-setup.sh по встроенной SHA-256 сумме до копирования в системный каталог. Если ветка обновилась между загрузкой установщика и основного скрипта, проверка безопасно завершится ошибкой — достаточно повторить команду установки.
- Определяет систему — автоматически определяет ОС, CPU и объём RAM, выводит баннер с информацией
- Проверяет конфликты — проверяет существующую конфигурацию swap (активные устройства,
/etc/fstab, zramswap) перед установкой - Выполняет preflight-проверки — проверяет нужные команды, свободное место, тип файловой системы, zram-модуль и поддержку выбранного алгоритма
- Создаёт swap-файл staged-методом на диске с явным приоритетом
10: сначала создаётся и форматируется временный файл, затем он атомарно ставится на место/swapfile - Устанавливает и настраивает zram-tools (сжатая подкачка в RAM, приоритет
100) и включает сервисzramswapна автозапуск - Настраивает
vm.swappinessс сохранением после перезагрузки - Обновляет
/etc/fstabатомарно и делает резервную копию перед изменением - Проверяет итоговую конфигурацию — активность
/swapfile,/dev/zram0, приоритеты, размер zram, алгоритм,vm.swappinessи запись/etc/fstab - Выводит итоговую информацию —
zramctl,swapon --show,zramctl --output-all,free -h
При запуске без параметров скрипт сначала спрашивает язык интерфейса, затем запускает интерактивный мастер настройки:
sudo bash swap-setup.shВыбор языка:
Select language / Выберите язык:
1) English
2) Русский
Language [1/en, 2/ru; default: en]:
Для неинтерактивного запуска язык задаётся явно:
sudo bash swap-setup.sh --lang ru --ram 1 --yes
sudo bash swap-setup.sh --lang en --statusСкрипт покажет:
╔══════════════════════════════════════════════════════╗
║ swap-setup.sh — Hybrid Swap + Zram for VPS ║
╠══════════════════════════════════════════════════════╣
║ OS: Debian GNU/Linux 12 (bookworm)
║ CPU: Intel Xeon E5-2680 v4
║ RAM: 1024 MB (~1 GB)
╚══════════════════════════════════════════════════════╝
Available RAM templates:
┌──────┬────────┬──────────────┬───────────┬───────┬──────────┬────────────┐
│ # │ RAM │ Swapfile │ zram % │ ALGO │ PRIORITY │ swappiness │
├──────┼────────┼──────────────┼───────────┼───────┼──────────┼────────────┤
│ 0.5 │ 512MB │ 1024 MB │ 100% │ zstd │ 100 │ 100 │
│ 1 │ 1GB │ 512 MB │ 100% │ zstd │ 100 │ 100 │ << recommended
│ 2 │ 2GB │ 1024 MB │ 75% │ zstd │ 100 │ 100 │
│ 3 │ 3GB │ 1024 MB │ 60% │ zstd │ 100 │ 80 │
│ 4 │ 4GB │ 1536 MB │ 50% │ zstd │ 100 │ 80 │
│ 6 │ 6GB │ 2048 MB │ 40% │ zstd │ 100 │ 60 │
│ 8 │ 8GB │ 2048 MB │ 25% │ zstd │ 100 │ 60 │
├──────┼────────┼──────────────┼───────────┼───────┼──────────┼────────────┤
│ 9 │ Manual input — configure every parameter │
└──────┴────────┴──────────────┴───────────┴───────┴──────────┴────────────┘
Select template (0.5, 1, 2, 3, 4, 6, 8; 9 for manual):
При выборе шаблона скрипт спросит, хотите ли вы подкорректировать параметры:
Adjust individual parameters before installing?
Edit parameters? [y/N]:
Если y — можно изменить любой параметр, нажав Enter для сохранения текущего значения.
При выборе 9 скрипт последовательно запросит каждый параметр с подсказками:
1. Swap file size (MB)
Template recommendation for detected RAM: 512 MB. Larger file = more emergency swap, but uses disk space.
Swapfile size MB [512]:
2. Compression algorithm (ALGO)
Available: zstd | lz4 | lzo | lzo-rle | lz4hc | zlib | 842
zstd — best compression ratio (~3:1), moderate CPU (recommended 2025-2026)
lz4 — fastest, lower compression (~2:1), good for weak CPU
lzo — legacy, balanced
Press Enter to keep the template default. If default is unsupported, the script can choose a safe supported fallback.
ALGO [zstd]:
3. zram size as % of RAM (PERCENT)
With PERCENT=100 on your 1024MB RAM -> zram swap device ~1024 MB
Template recommendation: 100%. Normal range: 25-200; hard limit: 300. This is logical zram swap size, not extra RAM.
PERCENT [100]:
-> zram swap device will be ~1024 MB (100% of 1024 MB)
4. zram swap priority (PRIORITY)
Higher priority is used first. It must be above disk swap (10). Valid range: 11-32767.
PRIORITY [100]:
5. vm.swappiness
Template default: 100. Higher values make Linux use zram earlier. Valid range: 0-200.
swappiness [100]:
Перед установкой показывается итоговый план:
┌─────────────────────┬─────────────────────────────────────┐
│ System RAM │ 1024 MB (~1 GB) │
├─────────────────────┼─────────────────────────────────────┤
│ Swap file │ 512 MB at /swapfile (pri 10) │
│ zram ALGO │ zstd │
│ zram PERCENT │ 100% (~1024 MB) │
│ zram PRIORITY │ 100 │
│ vm.swappiness │ 100 │
└─────────────────────┴─────────────────────────────────────┘
Swap priority: zram (100) >> disk swap (10)
zram logical swap size is ~1024 MB; at ~3:1 compression its data may use ~342 MB RAM
Proceed with installation? [y/N]:
| Параметр | 512 МБ RAM | 1 ГБ RAM | 2 ГБ RAM | 3 ГБ RAM | 4 ГБ RAM | 6 ГБ RAM | 8 ГБ RAM |
|---|---|---|---|---|---|---|---|
| Swap-файл | 1024 МБ | 512 МБ | 1024 МБ | 1024 МБ | 1536 МБ | 2048 МБ | 2048 МБ |
| zram PERCENT | 100% | 100% | 75% | 60% | 50% | 40% | 25% |
| ALGO | zstd | zstd | zstd | zstd | zstd | zstd | zstd |
| PRIORITY | 100 | 100 | 100 | 100 | 100 | 100 | 100 |
| swappiness | 100 | 100 | 100 | 80 | 80 | 60 | 60 |
Если ядро не поддерживает zstd, скрипт автоматически выберет первый поддерживаемый алгоритм из списка zstd, lz4, lzo-rle, lzo, zlib, 842. Если алгоритм явно задан через --zram-algo, неподдерживаемое значение считается ошибкой.
Usage: sudo bash swap-setup.sh [OPTIONS]
Без опций — запускается интерактивный мастер.
Options:
--lang en|ru Язык вывода (en или ru)
--ram N Шаблон для N ГБ RAM (0.5, 1, 2, 3, 4, 6, 8)
--swapfile-size MB Размер swap-файла в МБ (переопределяет шаблон)
--zram-percent N Размер zram как % от RAM (переопределяет шаблон)
--zram-algo ALGO Алгоритм сжатия zram (по умолчанию: zstd)
--zram-priority N Приоритет zram swap, выше 10 (по умолчанию: 100)
--swappiness N Значение vm.swappiness (переопределяет шаблон)
--yes Пропустить запросы подтверждения
--remove Удалить swapfile и конфигурацию zram
--status Показать текущий статус swap/zram
-h, --help Показать справку
# Интерактивный мастер (рекомендуется)
sudo bash swap-setup.sh
# Интерактивный мастер сразу на русском
sudo bash swap-setup.sh --lang ru
# Шаблон для 1 ГБ RAM VPS
sudo bash swap-setup.sh --lang ru --ram 1
# Шаблон + переопределение параметров
sudo bash swap-setup.sh --lang ru --ram 1 --zram-percent 150 --swappiness 120
# Полностью ручная настройка через CLI
sudo bash swap-setup.sh --lang ru --swapfile-size 512 --zram-percent 80 --zram-algo lz4 --swappiness 120
# Автоматический режим без подтверждений (для скриптов/ansible)
sudo bash swap-setup.sh --lang ru --ram 1 --yes
# Проверка текущего статуса
sudo bash swap-setup.sh --lang ru --status
# Удаление конфигурации
sudo bash swap-setup.sh --lang ru --removeПеред перезаписью существующих /etc/default/zramswap, /etc/sysctl.d/99-swappiness.conf и /etc/fstab создаются резервные копии рядом с исходными файлами. При удалении скрипт не трогает конфигурационные файлы без маркера Configured by swap-setup.sh и никогда не удаляет swap-файл, если swapoff завершился ошибкой.
# zram DISKSIZE должен соответствовать выбранному PERCENT, алгоритм zstd
zramctl
# Должно быть два swap: zram prio 100 → диск prio 10
swapon --show
# Смотрим степень сжатия (самое интересное — DATA / COMPR)
zramctl --output-all
free -hОжидаемый результат:
- zram DISKSIZE ≈
RAM * PERCENT / 100(например, около 1 ГБ для шаблона 1 ГБ RAM) - Степень сжатия считается как DATA / COMPR ≈ 2.0–3.5 : 1 (чем выше — тем лучше)
- Дисковый swap почти не используется (zram с приоритетом 100 используется первым)
- Скрипт дополнительно проверяет активность swap, порядок приоритетов, zram DISKSIZE, алгоритм,
vm.swappinessи запись/etc/fstab. Критичные несовпадения завершают работу с ошибкой; нормализованные дистрибутивом размер, алгоритм или точные значения приоритетов выводятся как предупреждения, если zram всё равно имеет более высокий приоритет.
zram — сжатая подкачка в оперативной памяти. Работает значительно быстрее дискового swap, т.к. данные сжимаются алгоритмом zstd (степень сжатия 2.5–3.5:1) и хранятся прямо в RAM. Важно: PERCENT задаёт логический размер zram swap-устройства, а сжатие уменьшает фактическое потребление RAM. Например, при 1 ГБ RAM и PERCENT=100 система увидит около 1 ГБ zram swap, а не 2–3.5 ГБ.
Гибридная схема: система сначала использует zram (приоритет 100), и только когда он заполнится — переходит на дисковый swap (приоритет 10). Явный неотрицательный приоритет дискового swap одинаково поддерживается Debian/Ubuntu, а разрыв приоритетов сохраняет предпочтение zram.
| Алгоритм | Сжатие | Скорость | Рекомендация |
|---|---|---|---|
| zstd | ~3:1 | Средняя | Лучший выбор 2025-2026, баланс сжатия и скорости |
| lz4 | ~2:1 | Очень быстрый | Для слабых CPU, где важна скорость |
| lzo | ~2.5:1 | Быстрый | Legacy, сбалансированный |
| lzo-rle | ~2.5:1 | Быстрый | Улучшенный lzo |
| lz4hc | ~2.5:1 | Средняя | lz4 с лучшим сжатием |
| zlib | ~3.5:1 | Медленный | Максимальное сжатие, высокая нагрузка CPU |
- Debian / Ubuntu (или производные: Mint, Pop!_OS и т.д.)
- Права root (sudo)
- Пакет
zram-tools(устанавливается автоматически) - Достаточно свободного места для staged-создания swap-файла: размер swap-файла + примерно 100 МБ запаса
MIT