Что такое ZRAM и зачем она нужна?
ZRAM (ранее известная как compcache) — это технология ядра Linux, которая создаёт сжатый блок в оперативной памяти и использует его как swap-устройство. Вместо записи данных на медленный жёсткий диск или SSD, система сжимает неиспользуемые страницы памяти и хранит их в RAM. Это особенно полезно для:
- Старого железа с малым объёмом ОЗУ (2-4 ГБ).
- Систем без диска (например, live-системы, встроенные устройства).
- Виртуальных машин с ограниченными ресурсами.
- Серверов, где нужно минимизировать операции ввода-вывода на диске.
ZRAM не заменяет полностью swap на диске в сценариях с гибернацией, но может стать основным или единственным swap-местом для большинства рабочих нагрузок, значительно ускорив отклик системы.
Проверка текущей конфигурации
Перед настройкой убедитесь, что в системе нет уже активной ZRAM и посмотрите текущие swap-устройства:
swapon --show
Если вывод пуст или содержит только /dev/sdX (диск), вы можете приступать. Также проверьте, загружен ли модуль ядра:
lsmod | grep zram
Если модуль не загружен, его можно загрузить вручную (sudo modprobe zram), но при правильной настройке через systemd это произойдёт автоматически.
Способ 1: Настройка через zram-tools (рекомендуется для Debian/Ubuntu)
Пакет zram-tools предоставляет готовый скрипт и службу systemd для управления ZRAM. Это самый простой путь.
Установка
Для Debian, Ubuntu и производных:
sudo apt update
sudo apt install zram-tools
Конфигурация
Основной конфигурационный файл — /etc/default/zramswap. Откройте его в текстовом редакторе:
sudo nano /etc/default/zramswap
Найдите и измените параметры:
PERCENT=50— процент от общей ОЗУ, который займёт ZRAM. Для 4 ГБ ОЗУ это 2 ГБ. Можно задать абсолютный размер:DEV_SIZE=2G.ALGO=lzo(илиzstd) — алгоритм сжатия.zstdдаёт лучшее сжатие, но требует больше CPU.lzo— быстрее.SWAP_RATING=100— приоритет swap-устройства (чем выше, тем активнее используется).
Пример конфигурации для 2 ГБ ZRAM с алгоритмом zstd:
# /etc/default/zramswap
PERCENT=0
DEV_SIZE=2G
ALGO=zstd
SWAP_RATING=100
Активация
После редактирования файла перезапустите службу:
sudo systemctl restart zramswap
Или включите её на автозагрузку и запустите сразу:
sudo systemctl enable --now zramswap
Проверьте результат:
free -h
В строке Swap вы должны увидеть размер, соответствующий DEV_SIZE.
Способ 2: Ручная настройка через systemd (универсальный)
Этот способ не требует установки дополнительных пакетов и работает на любом современном Linux с systemd.
Создание systemd-юнита
Создайте файл юнита:
sudo nano /etc/systemd/system/zram-setup.service
Вставьте следующее содержимое (настройте MemoryMax и CompressionAlgorithm под свои нужды):
[Unit]
Description=Setup ZRAM
After=local-fs.target
[Service]
Type=oneshot
RemainAfterExit=true
ExecStartPre=/sbin/modprobe zram num_devices=1
ExecStart=/bin/sh -c 'echo zstd > /sys/block/zram0/comp_algorithm'
ExecStart=/bin/sh -c 'echo 2G > /sys/block/zram0/disksize'
ExecStart=/sbin/mkswap /dev/zram0
ExecStart=/sbin/swapon /dev/zram0 -p 100
[Install]
WantedBy=multi-user.target
num_devices=1— создаст одно устройствоzram0.echo zstd > ...— задаёт алгоритм сжатия (lzo,lz4,zstd).echo 2G > ...— размер устройства (можно в МБ или ГБ).swapon -p 100— устанавливает высокий приоритет.
Активация
Включите и запустите службу:
sudo systemctl daemon-reload
sudo systemctl enable --now zram-setup.service
Проверьте статус:
sudo systemctl status zram-setup.service
Настройка параметров ядра
Для более эффективной работы ZRAM можно настроить параметры виртуальной памяти в /etc/sysctl.conf:
sudo nano /etc/sysctl.conf
Добавьте строки:
# Увеличиваем склонность системы использовать swap (включая ZRAM)
vm.swappiness = 100
# Уменьшаем давление на кеш inode/dentry (может помочь при нехватке RAM)
vm.vfs_cache_pressure = 50
# Оптимизация для ZRAM (если используется сжатие)
vm.page-cluster = 3
Примените настройки без перезагрузки:
sudo sysctl -p
Способ 3: Использование zram-generator (для Fedora, RHEL 8+, современных дистрибутивов)
Некоторые дистрибутивы поставляют zram-generator — инструмент, который генерирует systemd-юниты на основе конфига.
Установка
В Fedora/CentOS/RHEL 8+:
sudo dnf install zram-generator
Конфигурация
Отредактируйте /etc/systemd/zram-generator.conf:
# /etc/systemd/zram-generator.conf
[zram0]
zram-fraction = 0.5
compression-algorithm = zstd
swap-priority = 100
zram-fraction = 0.5— 50% от ОЗУ.- Можно задать
max-zram-size = 2Gвместо дроби.
Перезагрузите систему или выполните:
sudo systemctl start /dev/zram0
Мониторинг и проверка работоспособности
После настройки убедитесь, что ZRAM активна и используется:
# Показать все swap-устройства
swapon --show
# Показать использование памяти в удобном виде
free -h
# Детальная статистика по zram0 (значения в байтах)
cat /sys/block/zram0/mm_stat
Поля в mm_stat (можно перевести в человекочитаемый вид через awk):
orig_data_size— исходный размер данных до сжатия.compr_data_size— размер после сжатия.mem_used_total— использовано памяти ZRAM (включая метаданные).same_pages— количество страниц, которые не сжались (уже были сжаты/нулевые).
Пример расчёта коэффициента сжатия:
orig=$(cat /sys/block/zram0/mm_stat | awk '{print $1}')
compr=$(cat /sys/block/zram0/mm_stat | awk '{print $2}')
echo "scale=2; $orig / $compr" | bc
Коэффициент больше 1 означает, что сжатие работает.
Распространённые проблемы и их решение
ZRAM не активируется после перезагрузки
- Причина: Служба не включена или конфигурационный файл содержит ошибки.
- Решение: Проверьте
sudo systemctl status zramswap(или вашего юнита). Посмотрите логи:sudo journalctl -u zram-setup.service. Убедитесь, что в конфиге указан корректный размер.
Система "зависает" при интенсивном использовании памяти
- Причина: Слишком маленький размер ZRAM или неоптимальный алгоритм сжатия. При нехватке памяти система начинает активно сжимать/выгружать, что нагружает CPU.
- Решение: Увеличьте размер ZRAM (например, с 1 ГБ до 2 ГБ для 4 ГБ ОЗУ). Попробуйте алгоритм
lzoвместоzstd, если CPU слабый.
ZRAM не отображается в free
- Причина: Устройство не инициализировано или не форматировано как swap.
- Решение: Вручную выполните команды из Способ 2, особенно
mkswapиswapon. Убедитесь, что модульzramзагружен:lsmod | grep zram.
Конфликт с другим swap-устройством
- Причина: Обычно система использует swap с наивысшим приоритетом. Если у вас есть и диск, и ZRAM, то ZRAM с приоритетом 100 будет использоваться в первую очередь.
- Решение: Это нормальное поведение. Если хотите использовать только ZRAM, отключите swap на диске:
sudo swapoff /dev/sdXи закомментируйте соответствующую строку в/etc/fstab.
Заключение: что даёт вам ZRAM
Настройка ZRAM — это один из самых эффективных способов увеличить отзывчивость системы без апгрейда железа. Особенно это заметно на ноутбуках и ПК с 2-4 ГБ ОЗУ, где обычного swap на диске недостаточно, а дисковые операции тормозят всю работу.
После настройки вы получите:
- Более быструю переключение между приложениями.
- Меньше "тормозов" при открытии нескольких вкладок в браузере.
- Снижение нагрузки на SSD/HDD (меньше записей swap).
- Продление жизни старых устройств.
Помните, что ZRAM — это compressible RAM, а не замена дисковому пространству. Для хранения данных она не подходит, но как буфер для неактивной памяти — идеальна.