Заводим ramlog на дистрибутивах с systemd

    Из серии «заметки на полях». Больше, чтобы не забыть самому, но, может, кому и пригодится.

    После закупки Raspberry Pi 2 на смену не прожившему и недели Odroid XU4 началось неспешное шаманство по установке и начальной настройке системы под себя. Каково же было разочарование, когда любимый ramlog отказался не только ставиться (руками распакуем, не ленивые), но и запускаться после принудительного «внедрения». Отчаявшись и запросив Гугла, выяснил, что с systemd оно не дружит, от слова «совсем».

    Уже практически собиравшись городить что-то своё, наткнулся на один немецкий пост, где упоминался «адаптированный» ramlog. Потрошение немедленно скачанного образа показало, что там как раз и было сделано то, что мне и хотелось. Посему, вместо изобретения своего велосипеда, предлагаю воспользоваться уже готовым .

    Как оно работает


    И старая, и новая версии ramlog-а работают по одинаковому принципу: скачать /var/log в память при загрузке и записывать его на диск по команде или завершению работы.

    Отличие новой версии в использовании механизма запуска systemd и хранении логов в архиве, что радикально упростило код ценой архивирования и не изменившихся файлов. Ну и вместо запуска собственного RAM диска, используется tmpfs, которая, в случае чего, уйдёт в своп (а он у нас на zram и велик шанс, что обращений к диску не будет)

    Установка


    1. Создаём сервис ramlog-a (/usr/bin/ramlog):
      /usr/bin/ramlog
      #!/bin/sh
      . /lib/lsb/init-functions
      
      start() {
          log_begin_msg "RAMLOG: Read files from disk.."
          tar xfz /var/ram_log.tar.gz -C /
          log_end_msg 0
      }
      
      stop() {
          log_begin_msg "RAMLOG: Write files to disk.."
          tar cfz /var/ram_log.tar.gz --directory=/ var/log/
          log_end_msg 0
      }
      
      case "$1" in
          start)
              start
              ;;
          stop)
              stop
              ;;
          flush)
              stop
              ;;
          *)
               echo "Usage: $0 {start|stop|flush}"
               exit 1
      esac
      


    2. Создаём запись для systemd (/etc/systemd/system/ramlog.service):
      Скрытый текст
      [Unit]
      Description=Ramlog
      After=local-fs.target
      Before=cron.service syslog.service
      
      [Service]
      Type=oneshot
      RemainAfterExit=yes
      ExecStart=/usr/bin/ramlog start
      ExecStop=/usr/bin/ramlog stop
      
      [Install]
      WantedBy=multi-user.target
      

    3. Добавляем в CRON запись для периодического сохранения логов:
      # ...
      # каждые 15 минут, настроить по вкусу
      */15 * * * * /usr/bin/crontab flush >/dev/null 2>&1
      

    4. Правим /etc/fstab, перенося /var/log на tmpfs:
      tmpfs /var/log tmpfs nodev,nosuid 0 0
      

    5. Устанавливаем сервис:
      # insserv
      # systemctl enable ramlog.service
      

    6. Запускаем сервис
      # systemctl start ramlog.service
      

      Теперь, при ближайшей перезагрузке, содержимое /var/log будет сохранено в /var/var_log.tar.gz, а загружено уже в tmpfs
    7. ...Profit!


    Доделки-хотелки


    Вполне можно переделать логику работы по аналогии с оригинальным ramlog – потребуется лишь вместо упаковки делать rsync для сохранения. Что «выгоднее» при работе с флешки – кто знает?

    Витала идея о сжатом tmpfs, но как-то ничего пока не нагуглилось разумного.

    Можно нагородить сохранение ещё каких-либо папок, в том числе на сетевые диски. Разве что таки придётся разбираться с параметрами systemd для настройки порядка запуска этого дела.
    Поделиться публикацией
    Похожие публикации
    AdBlock похитил этот баннер, но баннеры не зубы — отрастут

    Подробнее
    Реклама
    Комментарии 5
    • 0
      А что не так с Odroid XU4? Смотрю уже некоторое время в его сторону. Много проблем с ним?
      • +1
        Брался на замену Cubietruck, ибо 4+ ядра для отрисовки веба (дома вместо ноута для почты-кина-торрентов-OpenHAB-а) ощущаются необходимостью (Rpi2 уже подтверждает). Далее ИМХО по результатам вялых пусков дней 30 в ожидании радиаторов и 2-3 дня после:

        плюсы:
        — мелкий
        — вроде, шустрый
        — USB3 таки ру́лит
        — гигабитная сеть (вроде на том же usb, но «кубик» рвёт просто в клочья)
        — разъём питания обычный, а не микро-усб

        минусы:
        — все разъёмы на 2мм (был готов, их есть у меня), все в пластиковой обёртке. Если с гребёнкой ещё можно воткнуться сверху, то UART, батарейка и т.п. — уже надо родной разъем
        — (следствие) ОБЯЗАТЕЛЬНО закупать всю возможную периферию сразу — батарейку, UART переходник и level-shifter. Желательно и MMC карточку — ощутимо пошустрее
        — для самоделок — хлопотно — TTL 1.8V, это значит, что простые платы с Али с ним ещё и не заработают (там у полевиков Vgs _от_ 1.8В, а надо бы от 1.2)
        — шумный. Не — ШУМНЫЙ! На каждый чих — вертолёт с визгом. Вроде немного лечится скриптом с форума, но не до конца
        — горячий. Со штатным вентилятором уходит в троттлинг через 2-3 минуты при загрузке всего 2х ядер cpuburn-ом (97°)
        — с радиатором на 2х тепловых трубках или хитром типа «веера» алюминии троттлинг на 4х ядрах минут через 6-8
        — есть ощущение, что у чипа проблемы с корпусом: а) пластик не сильно весело при таком нагерве, б) при температуре ядер 90° радиатор почти холодный (контакт с радиатором в норме)
        — ускоренное видео только «штатным» плеером — кастомный мод kodi, которому нельзя давать обновиться из «родных» репов, всё остальное — программно с соответсвующим нагревом
        — в ядре 4.х 2/3 аппаратных потрохов не работают, потому — ubuntu 14.10-15.04/kernel что-то типа 3.18
        — брал с CloudShield, типа под недо-NAS, дисплей параллельно с HDMI не работает (чую это общая проблема, возможно lightdm-а — на «стационаре» тоже не удалось завести терминал параллельно с cinnamon — советовали попробовать голые иксы, но пока некогда)

        У меня оно после всех экспериментов и возврата родного кулера на место поработало с час, потом раза 2-3 моргнуло экраном и вырубилось. Навсегда. Если закоротить пинцетом защитные ключи на входе питания, норовит выжрать 4.5А и больше — где-то закоротило насмерть
        • 0
          Благодарю за подробности!
          • +1
            У меня Cubietruck уже два года работает в качестве сервера. Да, процессор слабоват, но наличие специального места под винт + SATA — большой плюс. Odroid U2 использовал для непрерывной записи видео с камер (винт через USB не эстетично выглядел). Фишка Odroid U2 в огромном радиаторе. Грелся, но не шумел.
            • 0
              У меня тоже, в боксе с 7Ач аккумом, 3.5" винтом и 12В блоком питания — эдакий «кирпич» вышел. И пока до веб-браузинга не доходит — вполне себе нормально.

              Да как-то и SATA у него «не очень» в сравнении с USB3-SATA от XU4. Плюс в том, что SATA «уже на борту», но кривая сетевушка всё портит — первые 20-100Мб шустро, а потом скорость падает до 8 Мб/с вместо 40-60

        Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.