Log2ram: шпаргалка IT-инженера по переносу логов в RAM

Log2ram шпаргалка: перенос логов в RAM для продления жизни SD-карт и SSD. Установка log2ram на Raspberry Pi, Ubuntu, Debian. Настройка конфигурации, logrotate, синхронизация, мониторинг. Защита SD-карт от износа в Home Assistant, Pi-hole

Короче: log2ram — это когда логи пишутся не на диск, а в RAM. Зачем? SD-карты в Raspberry Pi умирают от постоянной записи логов. SSD изнашиваются. А RAM — быстрая и не боится перезаписей. Log2ram создаёт tmpfs в памяти, складывает туда логи, а на диск сбрасывает раз в день или при выключении.

Эта шпаргалка — для тех, кто устал менять SD-карты в RPi каждые полгода, хочет продлить жизнь SSD на серверах с высокой нагрузкой на запись, ускорить работу логирования и наконец перестать убивать флешки в промышленных системах.

Концепция: зачем логи в памяти

Как это работает обычно (и почему это плохо)

Классический сценарий (без log2ram):

  1. Запускаете Raspberry Pi с Home Assistant на SD-карте
  2. Система пишет логи каждую секунду в /var/log/
  3. SD-карта умирает через 6 месяцев
  4. Покупаете новую SD-карту
  5. Повторяете п. 1-4 бесконечно
  6. Начинаете ненавидеть SD-карты

Почему SD-карты и SSD умирают от логов:

  • SD-карты — рассчитаны на ~10,000-100,000 циклов перезаписи на ячейку
  • SSD (TLC/QLC) — ~1,000-3,000 циклов перезаписи
  • Логи — пишутся постоянно, в одни и те же места
  • Результат — диск изнашивается в 10 раз быстрее обычного

Типичные жертвы:

  • Raspberry Pi с Home Assistant — SD-карта умирает за 3-6 месяцев
  • Pi-hole — то же самое
  • Серверы мониторинга (Zabbix, Prometheus) — SSD изнашивается за год
  • Промышленные контроллеры на eMMC/флешках — выход из строя без предупреждения
  • Роутеры с USB-флешкой — флешка умирает, теряются настройки

Как работает log2ram (и почему это гениально)

Сценарий с log2ram:

  1. При загрузке системы log2ram создаёт tmpfs (файловая система в RAM) размером, например, 128MB
  2. Монтирует tmpfs в /var/log (или другую директорию логов)
  3. Копирует существующие логи с диска в RAM
  4. Все программы пишут логи в RAM (не знают о подвохе)
  5. Log2ram раз в день (или по расписанию) синхронизирует логи из RAM на диск
  6. При выключении системы логи сохраняются на диск
  7. SD-карта/SSD живёт в 10-50 раз дольше

Визуализация:


БЕЗ log2ram:
Программа → /var/log (на диске) → 1000 записей в минуту → SD-карта умирает

С log2ram:
Программа → /var/log (в RAM) → 1000 записей в минуту в RAM (не изнашивается)
                ↓
         Раз в день/при выключении
                ↓
         Сохранение на диск (1 операция вместо 1,440,000)

Почему это круто

1. SD-карта перестаёт умирать каждые полгода

Помните этот момент, когда Raspberry Pi не загружается, потому что SD-карта сдохла? И все ваши настройки Home Assistant пропали? И резервной копии нет, потому что «сделаю завтра»?

С log2ram SD-карта живёт годами. Потому что вместо миллиона записей в день она получает одну. И это не преувеличение — это реальная математика.

2. SSD на сервере живёт в 10 раз дольше

У вас сервер мониторинга. Zabbix пишет логи 24/7. SSD изнашивается. Производитель обещал 5 лет, но TBW (Total Bytes Written) исчерпан за год.

Log2ram: логи в RAM, на диск синхронизация раз в сутки. SSD живёт те самые 5 лет, которые обещали.

3. Система работает быстрее

RAM в тысячи раз быстрее SD-карты:

  • SD-карта — ~20-50 MB/s запись (в лучшем случае)
  • RAM — ~10,000-50,000 MB/s

Запись логов мгновенная. Программы не тормозят в ожидании I/O. Система отзывчивее.

4. Меньше шума (для HDD)

Если используете старый добрый HDD, он перестанет постоянно трещать, записывая логи. Тишина. Покой. Гармония.

5. Энергоэффективность

Диск не крутится постоянно (HDD) или не записывает постоянно (SSD). Меньше энергопотребление. Актуально для серверов и встраиваемых систем.

6. Работает прозрачно

Программы не знают, что логи в RAM. Никаких изменений в конфигах. Установили log2ram — всё работает.

Когда НЕ нужен log2ram (важно!)

❌ Критичные логи, которые нельзя потерять:

  • Финансовые транзакции
  • Логи аудита безопасности (требуется compliance)
  • Системы с юридическими требованиями к логированию

При аварийном выключении (отключили свет, kernel panic) логи с момента последней синхронизации потеряются.

❌ Сервера с большим объёмом логов:

  • Если логи занимают 10GB в день — log2ram не поможет (не хватит RAM)
  • Highload веб-серверы с огромными access.log

❌ Системы с недостатком RAM:

  • Если у вас 512MB RAM и этого едва хватает — log2ram заберёт ещё часть памяти

✅ Идеально подходит для:

  • Raspberry Pi (любые модели)
  • Orange Pi, Banana Pi и другие SBC
  • Домашние серверы на SD/USB
  • Pi-hole, Home Assistant, OpenWRT
  • Thin clients на CF/USB
  • Промышленные контроллеры на flash
  • VPS с небольшими логами
  • Роутеры на USB-флешках

Когда это использовать

Реальные кейсы:

  • Raspberry Pi умная дома — SD-карта умирает каждые полгода от логов
  • Pi-hole DNS — огромные логи DNS-запросов убивают карту
  • Сервер мониторинга на SSD — продление жизни диска в 10 раз
  • NAS на ARM — логи на системной флешке, данные на HDD/SSD
  • Промышленный контроллер — нельзя менять флешку каждый год
  • Роутер с OpenWRT на USB — флешка перестаёт умирать
  • Тестовые стенды — быстрая запись логов без износа дисков

Типовые ситуации:

  • SD-карта в Raspberry Pi уже умерла 2-3 раза
  • SSD показывает износ 50% за год эксплуатации
  • Система тормозит из-за постоянной записи логов
  • Нет возможности часто менять носитель (удалённый сервер, промышленное оборудование)
  • Хочется тишины (HDD перестанет трещать)

Ошибки новичков:

  • Выделяют слишком много RAM под логи — системе не хватает памяти
  • Забывают про синхронизацию — логи теряются при сбое
  • Используют на критичных системах без понимания рисков
  • Не настраивают logrotate — логи растут, заполняют RAM
  • Устанавливают на системах с 10GB логов в день — не работает
  • Не проверяют работу после установки — думают, что работает

Быстрый старт

Установка на Debian/Ubuntu/Raspberry Pi OS


# Обновляем систему
sudo apt update && sudo apt upgrade -y

# Устанавливаем log2ram
echo "deb [signed-by=/usr/share/keyrings/azlux-archive-keyring.gpg] http://packages.azlux.fr/debian/ bullseye main" | sudo tee /etc/apt/sources.list.d/azlux.list
wget -O /tmp/azlux-archive-keyring.gpg https://azlux.fr/repo.gpg.key
sudo gpg --dearmor -o /usr/share/keyrings/azlux-archive-keyring.gpg /tmp/azlux-archive-keyring.gpg

sudo apt update
sudo apt install log2ram -y

# Перезагружаем
sudo reboot

Альтернативный способ — установка с GitHub (универсальный)


# Клонируем репозиторий
cd /tmp
git clone https://github.com/azlux/log2ram.git
cd log2ram

# Устанавливаем
sudo ./install.sh

# Перезагружаем
sudo reboot

Проверка работы


# Проверяем, что log2ram запущен
systemctl status log2ram

# Должно быть: active (exited)

# Проверяем монтирование
df -h | grep log2ram

# Вывод:
# log2ram         128M   12M  116M   10% /var/log

# Проверяем использование RAM
free -h

# Проверяем, что /var/log в tmpfs
mount | grep log2ram

# Вывод:
# log2ram on /var/log type tmpfs (rw,nosuid,nodev,noexec,relatime,size=131072k,mode=755)

Базовая конфигурация


# Редактируем конфиг
sudo nano /etc/log2ram.conf

Основные параметры:


# Размер tmpfs в RAM (по умолчанию 128M)
SIZE=128M

# Использовать zram сжатие (экономит RAM)
USE_RSYNC=true

# Почтовые уведомления при проблемах
MAIL=false

# Путь к логам (по умолчанию /var/log)
PATH_DISK="/var/log"

# Отключить журналирование (fsync)
JOURNAL_SYNC=false

# Использовать zstd компрессию
ZL2R=false

# Применяем изменения
sudo systemctl restart log2ram

Установка log2ram

Debian 11/12, Ubuntu 20.04+, Raspberry Pi OS

Способ 1: Через репозиторий Azlux (рекомендуется)


# Добавляем репозиторий
echo "deb [signed-by=/usr/share/keyrings/azlux-archive-keyring.gpg] http://packages.azlux.fr/debian/ $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/azlux.list

# Добавляем GPG ключ
wget -O /tmp/azlux.gpg.key https://azlux.fr/repo.gpg.key
sudo gpg --dearmor -o /usr/share/keyrings/azlux-archive-keyring.gpg /tmp/azlux.gpg.key

# Обновляем и устанавливаем
sudo apt update
sudo apt install log2ram -y

# Перезагружаем
sudo reboot

Способ 2: Установка с GitHub (универсальный)


# Установка git (если нет)
sudo apt install git -y

# Клонируем
cd /tmp
git clone https://github.com/azlux/log2ram.git
cd log2ram

# Устанавливаем
sudo ./install.sh

# Перезагружаем
sudo reboot

CentOS/RHEL/Rocky/AlmaLinux


# Устанавливаем зависимости
sudo dnf install git rsync -y

# Клонируем
cd /tmp
git clone https://github.com/azlux/log2ram.git
cd log2ram

# Устанавливаем
sudo ./install.sh

# Перезагружаем
sudo reboot

Arch Linux


# Через AUR
yay -S log2ram

# ИЛИ вручную
cd /tmp
git clone https://aur.archlinux.org/log2ram.git
cd log2ram
makepkg -si

# Включаем сервис
sudo systemctl enable log2ram
sudo systemctl start log2ram

# Перезагружаем
sudo reboot

Alpine Linux


# Устанавливаем зависимости
apk add git rsync bash

# Клонируем
cd /tmp
git clone https://github.com/azlux/log2ram.git
cd log2ram

# Устанавливаем
./install.sh

# Включаем в автозагрузку
rc-update add log2ram default
rc-service log2ram start

# Перезагружаем
reboot

OpenWRT/LEDE


# Обновляем пакеты
opkg update

# Устанавливаем зависимости
opkg install rsync

# Скачиваем log2ram
cd /tmp
wget https://github.com/azlux/log2ram/archive/refs/heads/master.zip
unzip master.zip
cd log2ram-master

# Адаптируем для OpenWRT (нужна ручная настройка)
# См. раздел "Log2ram на OpenWRT" ниже

Проверка установки


# Статус сервиса
sudo systemctl status log2ram

# Монтирование
df -h | grep log2ram

# Детали монтирования
mount | grep log2ram

# Версия
log2ram --version

# Конфиг
cat /etc/log2ram.conf

Конфигурация log2ram.conf

Основные параметры


sudo nano /etc/log2ram.conf

# Размер tmpfs (рекомендации ниже)
SIZE=128M

# Путь к директории логов
PATH_DISK="/var/log"

# Использовать rsync для синхронизации (рекомендуется)
USE_RSYNC=true

# Почтовые уведомления
MAIL=false

# Email для уведомлений
MAIL_ADDRESS="admin@example.com"

# Использовать zram (сжатие в RAM)
ZL2R=false

# Компрессор для zram (если ZL2R=true)
COMP_ALG=lz4

# Уровень логирования (1-7)
LOG_DISK_SIZE=100M

# Отключить синхронизацию журнала
JOURNAL_SYNC=false

Рекомендуемые размеры SIZE

Система Размер логов Рекомендуемый SIZE
Raspberry Pi (минимальная система) 10-50 MB 64M — 128M
Raspberry Pi (Home Assistant) 50-200 MB 128M — 256M
Pi-hole 100-300 MB 256M — 512M
Debian минимальный сервер 20-100 MB 128M — 256M
Сервер с веб + БД 200-500 MB 512M — 1G
Мониторинг (Zabbix, Prometheus) 500MB — 2GB 1G — 2G

Как определить нужный размер:


# Текущий размер /var/log
du -sh /var/log

# Размер с учётом роста за день
du -sh /var/log
# Умножаем на 2-3 для запаса

# Пример:
# /var/log = 80MB
# SIZE = 256M (запас в 3 раза)

Использование zram (сжатие)

Zram сжимает содержимое tmpfs, экономя RAM.


# Включаем zram
ZL2R=true

# Компрессор (lz4 быстрее, zstd лучше сжимает)
COMP_ALG=lz4
# ИЛИ
COMP_ALG=zstd

Преимущества zram:

  • Экономия RAM (сжатие 2-3x)
  • Можно выделить больше SIZE при том же RAM

Недостатки zram:

  • Дополнительная нагрузка на CPU (незначительная)
  • Может быть проблемой на слабых системах (RPi Zero)

Email уведомления


# Включаем почту
MAIL=true

# Email администратора
MAIL_ADDRESS="admin@example.com"

# Настраиваем sendmail/postfix для отправки
sudo apt install mailutils -y

Применение изменений


# Перезапускаем log2ram
sudo systemctl restart log2ram

# ИЛИ перезагружаем систему (надёжнее)
sudo reboot

Управление log2ram

Основные команды systemctl


# Статус
sudo systemctl status log2ram

# Запуск
sudo systemctl start log2ram

# Остановка (сохраняет логи на диск)
sudo systemctl stop log2ram

# Перезапуск
sudo systemctl restart log2ram

# Включить автозагрузку
sudo systemctl enable log2ram

# Отключить автозагрузку
sudo systemctl disable log2ram

Ручная синхронизация логов


# Принудительная синхронизация RAM → диск
sudo log2ram write

# Чтение с диска в RAM (после изменений на диске)
sudo log2ram sync

Проверка состояния


# Использование RAM
df -h | grep log2ram

# Детальная информация
sudo log2ram status

# Размер логов в RAM
du -sh /var/log

# Размер логов на диске (бэкап)
du -sh /var/hdd.log

# Список файлов в RAM
ls -lh /var/log

# Список файлов на диске
ls -lh /var/hdd.log

Мониторинг использования


# Скрипт мониторинга
#!/bin/bash
echo "=== Log2ram Status ==="
df -h | grep log2ram
echo ""
echo "=== Log Sizes ==="
echo "RAM: $(du -sh /var/log 2>/dev/null | awk '{print $1}')"
echo "Disk: $(du -sh /var/hdd.log 2>/dev/null | awk '{print $1}')"
echo ""
echo "=== Service Status ==="
systemctl is-active log2ram

Логи log2ram


# Системные логи log2ram
sudo journalctl -u log2ram

# Последние 50 строк
sudo journalctl -u log2ram -n 50

# Логи в реальном времени
sudo journalctl -u log2ram -f

# Логи за сегодня
sudo journalctl -u log2ram --since today

Настройка автоматической синхронизации

Синхронизация по расписанию (cron)

По умолчанию log2ram синхронизируется раз в день и при выключении. Можно добавить свои правила.


# Редактируем crontab
sudo crontab -e

# Синхронизация каждый час
0 * * * * /usr/local/bin/log2ram write

# Синхронизация каждые 6 часов
0 */6 * * * /usr/local/bin/log2ram write

# Синхронизация в 3 часа ночи
0 3 * * * /usr/local/bin/log2ram write

Синхронизация через systemd timer

Более современный способ (вместо cron):


# Создаём timer
sudo nano /etc/systemd/system/log2ram-sync.timer

[Unit]
Description=Log2ram hourly sync timer

[Timer]
OnCalendar=hourly
Persistent=true

[Install]
WantedBy=timers.target

# Создаём service
sudo nano /etc/systemd/system/log2ram-sync.service

[Unit]
Description=Log2ram manual sync
After=log2ram.service

[Service]
Type=oneshot
ExecStart=/usr/local/bin/log2ram write

# Включаем timer
sudo systemctl daemon-reload
sudo systemctl enable log2ram-sync.timer
sudo systemctl start log2ram-sync.timer

# Проверяем
sudo systemctl list-timers | grep log2ram

Интеграция с logrotate

Проблема: логи растут бесконечно

Log2ram не управляет размером логов — только переносит их в RAM. Если логи растут, они заполнят tmpfs.

Решение: настроить logrotate

Базовая настройка logrotate


# Проверяем конфигурацию logrotate
ls /etc/logrotate.d/

# Основной конфиг
sudo nano /etc/logrotate.conf

Пример агрессивной ротации для экономии места:


sudo nano /etc/logrotate.d/custom

/var/log/*.log {
    daily
    rotate 7
    compress
    delaycompress
    missingok
    notifempty
    create 0640 root adm
    sharedscripts
    postrotate
        /usr/local/bin/log2ram write
    endscript
}

/var/log/syslog {
    daily
    rotate 3
    compress
    delaycompress
    missingok
    notifempty
    create 0640 root adm
    sharedscripts
    postrotate
        systemctl reload rsyslog
        /usr/local/bin/log2ram write
    endscript
}

Тестирование logrotate


# Тест конфигурации
sudo logrotate -d /etc/logrotate.conf

# Принудительная ротация
sudo logrotate -f /etc/logrotate.conf

# Проверка размера логов после ротации
du -sh /var/log

Автоматическая очистка старых логов


# Скрипт очистки логов старше 7 дней
sudo nano /usr/local/bin/clean-old-logs.sh

#!/bin/bash
# Удаляем логи старше 7 дней
find /var/log -type f -name "*.log.*" -mtime +7 -delete
find /var/log -type f -name "*.gz" -mtime +7 -delete

# Синхронизируем
/usr/local/bin/log2ram write

# Делаем исполняемым
sudo chmod +x /usr/local/bin/clean-old-logs.sh

# Добавляем в cron (раз в день в 4 утра)
sudo crontab -e
0 4 * * * /usr/local/bin/clean-old-logs.sh

Продвинутые настройки

Несколько директорий логов

Если нужно перенести в RAM не только /var/log, но и другие директории:


# Создаём дополнительный конфиг для nginx логов
sudo nano /etc/log2ram-nginx.conf

SIZE=256M
PATH_DISK="/var/log/nginx"
USE_RSYNC=true
ZL2R=false

Копируем systemd unit:


sudo cp /etc/systemd/system/log2ram.service /etc/systemd/system/log2ram-nginx.service

# Редактируем
sudo nano /etc/systemd/system/log2ram-nginx.service

Меняем конфиг:


[Service]
Environment="CONFIG_FILE=/etc/log2ram-nginx.conf"
ExecStart=/usr/local/bin/log2ram start $CONFIG_FILE
ExecStop=/usr/local/bin/log2ram stop $CONFIG_FILE

# Включаем
sudo systemctl daemon-reload
sudo systemctl enable log2ram-nginx
sudo systemctl start log2ram-nginx

Использование overlay filesystem

Альтернатива tmpfs — overlayfs (экономит RAM при малых изменениях):


sudo nano /etc/log2ram.conf

# Вместо tmpfs используем overlay
USE_OVERLAY=true

Преимущества overlay:

  • Экономия RAM (только изменения в RAM)
  • Подходит для больших логов с малыми изменениями

Недостатки:

  • Сложнее в настройке
  • Не все версии log2ram поддерживают

Исключение некоторых логов из RAM

Если какие-то логи критичны и их нельзя терять:


# Создаём symlink для критичных логов на диск
sudo mkdir -p /var/log.disk/critical

# Переносим критичные логи
sudo mv /var/log/auth.log /var/log.disk/critical/
sudo ln -s /var/log.disk/critical/auth.log /var/log/auth.log

# Теперь auth.log пишется на диск, остальные в RAM

Log2ram для Docker контейнеров

Если Docker пишет много логов:


# Переносим логи Docker в RAM
sudo nano /etc/log2ram.conf

PATH_DISK="/var/lib/docker/containers"
SIZE=512M

Альтернатива — ограничить размер логов Docker:


sudo nano /etc/docker/daemon.json

{
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "10m",
    "max-file": "3"
  }
}

sudo systemctl restart docker

Log2ram на разных платформах

Raspberry Pi + Home Assistant


# Устанавливаем log2ram
sudo apt install log2ram -y

# Настраиваем для Home Assistant
sudo nano /etc/log2ram.conf

SIZE=256M
PATH_DISK="/var/log"
USE_RSYNC=true
ZL2R=true
COMP_ALG=lz4

# Также переносим логи Home Assistant
sudo mkdir -p /var/hdd.log/homeassistant
sudo ln -s /var/hdd.log/homeassistant /config/logs

sudo reboot

Pi-hole


# Устанавливаем
curl -sSL https://install.log2ram.com | sudo bash

# Настраиваем для Pi-hole
sudo nano /etc/log2ram.conf

SIZE=512M  # Pi-hole пишет много логов DNS
PATH_DISK="/var/log"
USE_RSYNC=true
ZL2R=true

# Также настраиваем ротацию логов Pi-hole
sudo nano /etc/pihole/logrotate

/var/log/pihole.log {
    daily
    rotate 5
    compress
    delaycompress
    notifempty
    missingok
}

sudo reboot

OpenWRT/LEDE

OpenWRT имеет встроенный механизм логов в RAM (logd), но можно использовать log2ram для дополнительных логов:


# Устанавливаем зависимости
opkg update
opkg install rsync

# Создаём скрипт log2ram вручную
cat > /etc/init.d/log2ram << 'EOF' #!/bin/sh /etc/rc.common START=99 STOP=01 start() { mkdir -p /tmp/log mount -t tmpfs -o size=64M tmpfs /tmp/log rsync -aAXv /overlay/log/ /tmp/log/ 2>/dev/null
    mount --bind /tmp/log /var/log
}

stop() {
    rsync -aAXv /tmp/log/ /overlay/log/
    umount /var/log
    umount /tmp/log
}
EOF

# Делаем исполняемым
chmod +x /etc/init.d/log2ram

# Включаем
/etc/init.d/log2ram enable
/etc/init.d/log2ram start

Proxmox VE


# Устанавливаем log2ram на Proxmox host
bash <(wget -qO- https://raw.githubusercontent.com/azlux/log2ram/master/install.sh)

# Настраиваем
nano /etc/log2ram.conf

SIZE=512M  # Proxmox пишет много логов
PATH_DISK="/var/log"
USE_RSYNC=true
ZL2R=true

systemctl restart log2ram

# Проверяем
df -h | grep log2ram

Мониторинг и диагностика

Скрипт проверки здоровья log2ram


#!/bin/bash
# log2ram-health.sh

echo "=== Log2ram Health Check ==="
echo ""

# Проверка сервиса
if systemctl is-active --quiet log2ram; then
    echo "✓ Service: Running"
else
    echo "✗ Service: NOT RUNNING"
fi

# Проверка монтирования
if mount | grep -q "log2ram"; then
    echo "✓ Mount: OK"
else
    echo "✗ Mount: FAILED"
fi

# Использование RAM
RAM_USAGE=$(df -h | grep log2ram | awk '{print $5}')
echo "RAM Usage: $RAM_USAGE"

# Размер логов
LOG_SIZE=$(du -sh /var/log 2>/dev/null | awk '{print $1}')
echo "Log Size: $LOG_SIZE"

# Проверка заполнения
USAGE_PERCENT=$(df | grep log2ram | awk '{print $5}' | sed 's/%//')
if [ "$USAGE_PERCENT" -gt 80 ]; then
    echo "⚠ WARNING: Log2ram usage above 80%"
fi

if [ "$USAGE_PERCENT" -gt 90 ]; then
    echo "⚠⚠ CRITICAL: Log2ram usage above 90%"
fi

echo ""
echo "=== Last Sync ==="
journalctl -u log2ram | grep "Synced" | tail -1

echo ""
echo "=== Top 10 Largest Logs ==="
du -sh /var/log/* 2>/dev/null | sort -rh | head -10

# Делаем исполняемым
chmod +x log2ram-health.sh

# Запускаем
./log2ram-health.sh

Мониторинг через Zabbix/Prometheus

Скрипт для Zabbix UserParameter:


# /etc/zabbix/zabbix_agentd.d/log2ram.conf
UserParameter=log2ram.status,systemctl is-active log2ram && echo 1 || echo 0
UserParameter=log2ram.usage,df | grep log2ram | awk '{print $5}' | sed 's/%//'
UserParameter=log2ram.size,du -sb /var/log | awk '{print $1}'

Email уведомления при проблемах


# Скрипт мониторинга с email
#!/bin/bash

USAGE=$(df | grep log2ram | awk '{print $5}' | sed 's/%//')
THRESHOLD=85

if [ "$USAGE" -gt "$THRESHOLD" ]; then
    echo "Log2ram usage is ${USAGE}% (threshold: ${THRESHOLD}%)" | mail -s "Log2ram Alert" admin@example.com
fi

# Добавляем в cron (каждый час)
0 * * * * /usr/local/bin/log2ram-monitor.sh

Частые проблемы и решения

Проблема: Log2ram не запускается после установки

Причина: Конфликт с существующими логами.

Решение:


# Проверяем логи
sudo journalctl -u log2ram -xe

# Очищаем старые логи
sudo rm -rf /var/log/*

# Перезапускаем
sudo systemctl restart log2ram

Проблема: tmpfs заполнен на 100%

Причина: Логи растут быстрее, чем ротируются.

Решение:


# Временно: принудительно синхронизируем и чистим
sudo log2ram write
sudo find /var/log -name "*.log.*" -delete
sudo find /var/log -name "*.gz" -delete

# Постоянно: увеличиваем SIZE или настраиваем logrotate
sudo nano /etc/log2ram.conf
# SIZE=256M → SIZE=512M

sudo reboot

Проблема: Логи потеряны после сбоя питания

Причина: Логи в RAM не успели синхронизироваться на диск.

Решение:


# Увеличиваем частоту синхронизации
sudo crontab -e

# Каждый час
0 * * * * /usr/local/bin/log2ram write

# ИЛИ критичные логи переносим на диск (см. раздел выше)

Проблема: Система не загружается после установки

Решение через recovery mode:


# Загружаемся в recovery mode
# В GRUB выбираем recovery mode / single user mode

# Монтируем корень в RW
mount -o remount,rw /

# Удаляем log2ram
systemctl disable log2ram
rm /etc/systemd/system/log2ram.service

# Перезагружаемся
reboot

Проблема: SD-карта всё равно умирает

Возможные причины:

  • Логи — не единственная причина износа
  • Swap на SD-карте
  • База данных пишет напрямую на диск
  • Временные файлы в /tmp (если /tmp не в tmpfs)

Решение — полная оптимизация:


# 1. Отключаем swap
sudo dphys-swapfile swapoff
sudo dphys-swapfile uninstall
sudo systemctl disable dphys-swapfile

# 2. Переносим /tmp в tmpfs
sudo nano /etc/fstab
# Добавляем:
tmpfs /tmp tmpfs defaults,noatime,nosuid,size=100M 0 0

# 3. Оптимизируем монтирование (noatime)
# В /etc/fstab меняем все ext4 разделы:
# /dev/mmcblk0p2 / ext4 defaults,noatime 0 1

# 4. Перезагружаемся
sudo reboot

Альтернативы log2ram

Ramlog

Альтернативный проект с похожей функциональностью:


# Установка
sudo apt install ramlog -y

# Конфигурация
sudo nano /etc/default/ramlog

Отличия от log2ram:

  • Проще, меньше функций
  • Не сохраняет логи при выключении (только по cron)
  • Менее активная разработка

Ручная настройка tmpfs

Самый простой способ (без дополнительных программ):


# Создаём tmpfs для логов
sudo nano /etc/fstab

tmpfs /var/log tmpfs defaults,noatime,nosuid,mode=0755,size=128M 0 0

# Перезагружаемся
sudo reboot

Минусы:

  • Логи полностью теряются при перезагрузке
  • Нет автоматической синхронизации
  • Нужно настраивать вручную

Overlayfs (для read-only root)

Более радикальный подход — весь root в read-only + overlay:


# Raspberry Pi OS имеет встроенную опцию
sudo raspi-config
# Performance Options → Overlay File System → Enable

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

  • Вся файловая система защищена от износа
  • Максимальная защита SD-карты

Недостатки:

  • Сложнее в настройке
  • Все изменения теряются при перезагрузке (кроме специально сохранённых)

Краткий чек-лист

Установка:

  • ☐ Log2ram установлен: sudo apt install log2ram
  • ☐ Сервис запущен: systemctl status log2ram
  • ☐ tmpfs смонтирован: df -h | grep log2ram
  • ☐ Система перезагружена после установки

Настройка:

  • ☐ Размер SIZE подобран правильно: du -sh /var/log
  • ☐ Zram включен (если мало RAM): ZL2R=true
  • ☐ Logrotate настроен для контроля размера логов
  • ☐ Email уведомления настроены (опционально)

Проверка работы:

  • ☐ Логи пишутся в RAM: mount | grep log2ram
  • ☐ Синхронизация работает: sudo log2ram write
  • Backup на диске существует: ls /var/hdd.log
  • ☐ Использование RAM приемлемо: df -h | grep log2ram

Дополнительные оптимизации:

  • ☐ Swap отключен (Raspberry Pi)
  • ☐ /tmp в tmpfs: mount | grep /tmp
  • ☐ noatime в fstab для всех разделов
  • ☐ Автоматическая синхронизация настроена (cron/timer)

Мониторинг:

  • ☐ Регулярная проверка использования: df -h | grep log2ram
  • ☐ Проверка логов log2ram: journalctl -u log2ram
  • ☐ Алерты настроены (при заполнении >80%)

Резюме

Log2ram — это спасение для всех, кто устал менять SD-карты в Raspberry Pi каждые полгода. Простая идея: логи пишутся в RAM (быстро, не изнашивается), на диск сохраняются раз в день (минимальный износ). SD-карта живёт годами вместо месяцев. SSD на сервере не изнашивается за год. Флешки в промышленных системах работают десятилетиями.

Три команды для быстрого старта:

  1. sudo apt install log2ram — установка
  2. sudo reboot — перезагрузка
  3. df -h | grep log2ram — проверка работы

Что даёт log2ram:

  • Продление жизни носителя — SD/SSD/флешка живёт в 10-50 раз дольше
  • Скорость — логи пишутся мгновенно в RAM вместо медленной SD-карты
  • Тишина — HDD не трещит постоянно (если используете HDD)
  • Энергоэффективность — меньше обращений к диску = меньше энергопотребление
  • Прозрачность — программы не знают о подмене, работают как обычно

Важно помнить:

  • Риск потери логов — при аварийном отключении питания логи с момента последней синхронизации потеряются
  • Не для критичных логов — финансовые транзакции, аудит безопасности лучше писать сразу на диск
  • Нужно настроить logrotate — иначе логи разрастутся и заполнят RAM
  • Подбирайте SIZE правильно — слишком мало = переполнение, слишком много = мало RAM для системы

Идеальные сценарии использования:

  • Raspberry Pi с Home Assistant / Pi-hole / любой другой софт
  • NAS на ARM с системой на флешке
  • Серверы мониторинга (Zabbix, Prometheus)
  • Промышленные контроллеры на flash
  • Роутеры с прошивкой на USB/CF
  • Тестовые стенды с частой перезаписью логов

Log2ram — это не про «может быть полезно», это про «почему я не поставил это раньше». Особенно когда в третий раз покупаешь SD-карту для Raspberry Pi и понимаешь, что проблема не в качестве карты, а в том, что логи убивают её за полгода.

Установите log2ram. Настройте logrotate. Забудьте про частую замену носителей. И наслаждайтесь тем, что ваш Raspberry Pi проработает годы без проблем с SD-картой.

Сохраните статью в закладки — пригодится при следующей настройке RPi или установке сервера на SSD, который жалко убивать логами.

Следующая шпаргалка: tmpfs и ramfs — файловые системы в памяти для Linux.

Поделитесь:

Оставьте комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Прокрутить вверх