Установка и настройка zram на Debian

Давайте разберёмся, как заставить нашу оперативку трудиться за двоих с помощью zram. Если коротко, zram создаёт внутри вашей ОЗУ виртуальное сжатое устройство подкачки. Вместо того чтобы сбрасывать неактивные страницы памяти на медленный диск (SSD или HDD), система сжимает их и оставляет в оперативной памяти. Получается двойная выгода: и доступ к данным быстрее, и реально освобождается больше места.

Раньше для настройки ставили пакет zram-tools, но времена меняются. В современных Debian (примерно с версии 11/Bullseye) есть более элегантный и родной для системы способ — systemd-zram-generator. Мы рассмотрим оба, но начнём с рекомендованного.


Способ 1: Современный и системный (через systemd-zram-generator)

Этот метод интегрирован в systemd, а значит, zram будет создаваться автоматически при загрузке, без лишних служб.

1. Установка (она же проверка наличия) Генератор уже, скорее всего, стоит в вашей системе. Но на всякий случай можно убедиться и поставить пакет systemd-zram-generator:

sudo apt update
sudo apt install systemd-zram-generator

2. Настройка — один файл, два параметра Всё управляется файлом /etc/systemd/zram-generator.conf. Создаём или редактируем его:

sudo nano /etc/systemd/zram-generator.conf

Вот пример конфигурации, которую можно назвать разумной и безопасной:

[zram0]
compression-algorithm = zstd
zram-size = ram / 2

3. Перезагрузка и проверка После сохранения файла просто перезагрузите компьютер или обработайте конфигурацию и перезапустите systemd-юниты:

sudo systemctl daemon-reload
При следующей загрузке zram создастся автоматически. Проверить его работу можно командой:
zramctl
Или посмотреть общий список активных своп-устройств:
swapon -s
Вы увидите устройство /dev/zram0 с приоритетом выше, чем у дискового свопа (обычно 100). Это значит, что система будет использовать его в первую очередь.


Способ 2: Классический (через zram-tools)

Если вам по какой-то причине ближе старый способ, он тоже рабочий.

1. Установка пакета:

sudo apt update
sudo apt install zram-tools

2. Редактируем конфиг (тут важный момент!) Откроем файл настроек. Для этого подойдёт любой текстовый редактор, кроме, пожалуй, Libreoffice Writer.

sudo nano /etc/default/zramswap
Самое главное — не ставить размер в 100% ОЗУ, как часто советуют. Это как налить чашку до самых краёв: одно неловкое движение, и потоп. Если сжатие будет неэффективным, система может исчерпать память. Лучше начать с 50% или даже меньше.

Также важное предупреждение: если вы используете гибернацию (suspend-to-disk), то вам обязательно нужен обычный дисковый своп. zram для гибернации не подходит.

Пример безопасной настройки:

# Выбираем алгоритм. Подробнее о них ниже.
ALGO=zstd
# Ставим разумный лимит. Не жадничаем!
PERCENT=50
# Приоритет оставляем высоким (выше дискового)
PRIORITY=100

3. Применяем настройки:

sudo systemctl restart zramswap.service
Проверим статус:
systemctl status zramswap.service


🔧 Технические нюансы: разбираемся с деталями

Какой алгоритм сжатия выбрать?

Не нужно искать файлы в /sys/ — просто выберите из списка ниже. Узнать, какие алгоритмы поддерживает ваше ядро, можно так:

cat /sys/module/zram/parameters/comp_algorithm
А чтобы было проще выбрать, вот краткая шпаргалка:

АлгоритмСкоростьКачество сжатияДля каких задач
lz4Очень высокаяХорошееИдеально для старых или слабых процессоров, скорость в приоритете.
zstdВысокаяОтличноеЛучший выбор для современных систем (от Intel Core i3/i5 и новее). Даёт больше свободной памяти.
lzoВысокаяСреднееЧасто используется по умолчанию, но постепенно вытесняется lz4 и zstd.

Почему не 100%? И при чём тут гибернация?

  • Размер: zram — не волшебный. Некоторые данные (например, уже сжатые архивы или видео) почти не сжимаются. Если выделить под zram всю память и засунуть туда такие данные, система может "захлебнуться". Начальная рекомендация: 25-50% от объёма ОЗУ.
  • Гибернация: Этот режим сна сохраняет содержимое памяти на диск. Поэтому, если вам нужна гибернация, не отключайте дисковый своп-файл или раздел. zram в этом процессе не участвует.

Как проверить, что всё работает? После настройки выполните:

zramctl
Вывод будет примерно таким:
NAME       ALGORITHM DISKSIZE DATA COMPR TOTAL STREAMS MOUNTPOINT
/dev/zram0 zstd           2G   0B   0B    0B       4   [SWAP]
Также полезно командой free -h посмотреть, как используется память и своп.

Итог: краткий чек-лист

  1. Для Debian 11/Bullseye и новее используйте systemd-zram-generator (Способ 1). Это современно и правильно.
  2. Не выделяйте под zram 100% оперативной памяти. Начните с ram / 2 (50%) в zram-generator.conf или PERCENT=50 в zram-tools.
  3. Выбирайте алгоритм сжатия по возможностям процессора: zstd для новых CPU, lz4 для старых или если нужна максимальная отзывчивость.
  4. Помните про гибернацию: если она вам нужна, оставьте на диске обычный своп-файл или раздел.
  5. Всегда проверяйте результат командами zramctl и swapon -s.

Зависимости: zram-tools, systemd-zram-generator