Короче: log2ram — это когда логи пишутся не на диск, а в RAM. Зачем? SD-карты в Raspberry Pi умирают от постоянной записи логов. SSD изнашиваются. А RAM — быстрая и не боится перезаписей. Log2ram создаёт tmpfs в памяти, складывает туда логи, а на диск сбрасывает раз в день или при выключении.
Эта шпаргалка — для тех, кто устал менять SD-карты в RPi каждые полгода, хочет продлить жизнь SSD на серверах с высокой нагрузкой на запись, ускорить работу логирования и наконец перестать убивать флешки в промышленных системах.
Концепция: зачем логи в памяти
Как это работает обычно (и почему это плохо)
Классический сценарий (без log2ram):
- Запускаете Raspberry Pi с Home Assistant на SD-карте
- Система пишет логи каждую секунду в
/var/log/ - SD-карта умирает через 6 месяцев
- Покупаете новую SD-карту
- Повторяете п. 1-4 бесконечно
- Начинаете ненавидеть 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:
- При загрузке системы log2ram создаёт tmpfs (файловая система в RAM) размером, например, 128MB
- Монтирует tmpfs в
/var/log(или другую директорию логов) - Копирует существующие логи с диска в RAM
- Все программы пишут логи в RAM (не знают о подвохе)
- Log2ram раз в день (или по расписанию) синхронизирует логи из RAM на диск
- При выключении системы логи сохраняются на диск
- 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 на сервере не изнашивается за год. Флешки в промышленных системах работают десятилетиями.
Три команды для быстрого старта:
sudo apt install log2ram— установкаsudo reboot— перезагрузка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.



