Carbon Graphite изменение времени хранения данных

По уполчанию в базе whisper хранятся данные в течении 24-х часов после чего удаляются. Изменить это можно в конфигурационном файле storage-schemas.conf. Для Graphite на Centos он находится в /opt/graphite/conf/storage-schemas.conf. Этот файл перечитывается один раз в 60 секунд, так что если там нет ошибок его изменение будет применено максимально через 1 минуту. Как проверить отсутствие ошибок в файле конфигурации описано несколько ниже. Однако изменение внесённое в файл storage-schemas.conf будет применено только к новым базам. Уже созданные файлы останутся со старыми значениями.
С помощью утилиты whisper-info.py можно посмотреть параметры одной базы whisper.

whisper-info.py /opt/graphite/storage/whisper/stats/gauges/projects/emailer/admin_new/schedule_queue_length/emailsend.wsp
maxRetention: 86400
xFilesFactor: 0.5
aggregationMethod: average
fileSize: 17308

Archive 0
retention: 86400
secondsPerPoint: 60
points: 1440
size: 17280
offset: 28

А при помощи утилиты whisper-resize.py можно изменить параметры выбранной базы.
Continue reading Carbon Graphite изменение времени хранения данных

Обновление базы дисков smartctl на CentOS 6.7

Чтобы обновить базу дисков smartctl на CentOS release 6.7 (Final) нужно использовать новый скрипт, так как старый, который идёт в дистрибутиве не работает.

update-smart-drivedb -v ./aa.txt
Download from branches/RELEASE_5_43_DRIVEDB
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
109   329  109   329    0     0   1108      0 --:--:-- --:--:-- --:--:--  2611
./aa.txt.error: rejected by /usr/sbin/smartctl, probably no longer compatible

С момента моего предыдущего обновления снова изменилась структура smartmontools линков для получения свежей базы. Поэтому я написал скрипт который загружает скрипт обновления и настраивает его так чтобы он стянул свежую базу дисков.
Continue reading Обновление базы дисков smartctl на CentOS 6.7

OpenWRT смена MAC адреса сетевого интерфейса

Как изменить MAC адрес сетевого интерфейса под OpenWRT

Смена MAC адреса может потребоваться если кабельный провайдер завязывается на адрес устройства. И часто такая смена адреса через провайдера может занять несколько часов. Также если у вас несколько устройств и вы иногда переключаете их то “дёргать” провайдера может быть обременительно. Поэтому быстрее адрес поменять самостоятельно, тем более это не сложно.

Через uci это меняется так:

root@OpenWrt:~# uci set network.wan.macaddr="00:0c:42:89:d3:e8" ; uci commit network

Continue reading OpenWRT смена MAC адреса сетевого интерфейса

Мониторинг состояния диска SSD Intel DC S3500

После установки на сервер диска SSD Intel DC S3500 необходимо было подключить его к системе мониторинга.

Для этого необходимо было обновить базу smartctl разобраться с параметрами и выбрать те которые будем мониторить.

Чтобы разобраться с параметрами нужно взять спецификацию на диск. Она нашлась по адресу http://www.intel.com/content/dam/www/public/us/en/documents/product-specifications/ssd-dc-s3500-spec.pdf

Как видно из спецификации для параметров мониторинга подходит несколько атрибутов:
Continue reading Мониторинг состояния диска SSD Intel DC S3500

Проверка что в sudoers все скрипты для Zabbix существуют

zabbix_agentd который используется для мониторинга сероверов, может запускать скрипты. Для большинства из этих скриптов необходимы права root. Это обеспечивается через su в файле конфигурации агента и sudoers.
Но иногда при конфигурировании множества серверов (zabbix-agentd) сталкиваешься с тем, что некоторые скрипты которые там перечислены отсутствуют на диске. Это приведёт к тому что скрипт не будет выполняться. А чтобы по-быстрому проверить я набросал скрипт который проверяет все ли скрипты или программы есть на диске и пишет имена отсутствующих. По правде говоря скрипт не обрабатывает файлы с Cmnd_Alias и файлы вложенные в каталог /etc/sudoers.d/

cat /etc/sudoers | grep -i "zabbix ALL=NOPASSWD:" | cut -d ':' -f2- | sed 's/[,]\+/\n/g' | sed -e 's/^[ \t]\+//g;s/^\(\/[^ ]*\).*$/\1/g' | while read FN ; do [ ! -e "${FN}" ] && echo "${FN} - not exists" ; done

Continue reading Проверка что в sudoers все скрипты для Zabbix существуют

Разбираемся с томами Bacula/Bareos

Много лет подряд схема именования томов в Bacula/Bareos приводила меня в полное недоумение. Я не мог понять почему свежеустановленная система резервного копирования создаёт тома в строгом соответствии с настройками прописанными в секция pool, а через какое-то время “слетает с катушек” и начинает записывать данные в старые файлы. Оказалось причина в в том, что Bacula изначально была заточена под ленточные накопители. Агалогично она поступает и с дисками: тома на дисках воспринимаются как ленты. Следствие этой особенности в том, что если Bacula создала том (файл на жёстком диске) то она НИКОГДА не удаляет его с диска. У каждого пула и задания есть параметр Volume Retention который задаёт время по истечении которого файлы попавшие в этот том бакула считает удалёнными. Если установлена опция AutoPrune = yes то bacula удалит записи из каталога (SQL). А если установлена опция ActionOnPurge = Truncate то урежет размер файла до нуля.
Continue reading Разбираемся с томами Bacula/Bareos

Отключение APM в дисках подключённых через RAID контроллер

Некоторые жёсткие диски, не только ноутбучные 2.5″ но и например 3.5″ вполне серверные модели WDC WD2002FYPS-02W3B0, имеют отвратительную особенность парковать головы. Для ноутбучных дисков это вероятно оправдано и сделано чтобы исключить повреждение дисков при возможных ударах ноутбука, компьютер то мобильный. А вот для 3.5″ дисков это сделано вроде бы как для экономии электрической энергии. Но ресурс механизма парковок ограничен и через некоторое время это приводит к его износу и поломке диска. Чтобы предотвратить износ механизма принудительной парковкой головок нужно отключить APM диска.
Отключить APM в дисках можно с помощью утилиты hdparm.

hdparm -B 255 /dev/sda

Однако она не работает если диск подключён в RAID контроллер. В этом случае RAID контроллер отдаёт в систему блочное устройство без уточнения из каких дисков оно собрано. Тоесть система обращаясь к блочному устройству представленному RAID контроллером не обращается конкретно к какому-то диску. Поэтому функционал физического доступа к порту диска через имя блочного устройства ограничен.
Continue reading Отключение APM в дисках подключённых через RAID контроллер

Отключение парковки ноутбучных дисков

Частая парковка головок ноутбучных шпиндельных накопителей на жёстких дисках приводит к износу механизма и преждевременной смерти диска. Чем больше значение SMART параметра Load_Cycle_Count тем ближе время вероятной кончины диска.

smartctl -A /dev/sda | grep 'Load_Cycle_Count'
193 Load_Cycle_Count        0x0012   098   098   000    Old_age   Always       -       21418

В старых версиях Fedora я это решал строчкой в init скрипте.
В новых использовал модуль. И итолько недавно мне подсказали решение для нормальной поддержки Hybernate и Suspend.
Continue reading Отключение парковки ноутбучных дисков

Удаление списка ожидающих заданий bacula

Случается, что на сторадже заканчивается место до того как bacula соберётся удалять старые файлы. В результате вы получаете одно оповещение, что задача не была выполнена и второе от мониторинга, что закончилось место. Если задача одна-две, это не проблема. Удалили руками и всё в порядке. Но ситуация меняется когда задач много и тем более вы не среагировали за период более чем один цикл бэкапа. Очередь закупоривается и пока она не будет выполнена целиком новые задания не будут выполнены. Данный скрипт позволяет по очереди удалить все задания начиная с последнего по очереди, чтобы дойдя до первого не стартовало следующее за ним.

#!/bin/bash

for ID in `echo 'status dir running' | bconsole | sed -n '/Running Jobs:/,/^$/p' | sed -n '/^=\+$/,/^=\+$/p' | grep -v '^=\+$' | awk '/is waiting/{print $1}' | sed -e '1!G;h;$!d'` ; do
    if [[ ! ${ID} =~ ^[0-9]+$ ]] ; then
      echo "JobID \"${ID}\" is not a number! Skipping."
    else
      echo -e "Do you want to kill waiting job ${ID}"
      read -p 'Type YES if you really want to delete job: ' input
      if [[ ! ${input} =~ ^[Yy]$  ]] ; then
        echo -e "Skip job ${ID}.\n"
        continue
      else
        echo "cancel jobid=${ID}" | bconsole
      fi
    fi
done

Backup LV тома через snapshot

Лёгкий скрипт бэкапа тома на удалённый сервер.
Хочу подчеркнуть, что создание снимка (snapshot) на работающем read/write разделе не гарантирует целосность данных в создаваемом снимке. Кеш файловой системы оставшийся в памяти не отразится на snapshot и не попадёт в бэкап. Поэтому такой бэкап является упрощённой и быстрой возможностью сохранить максимум данных.

В скрипте три важных операции:

  • Создать снимок (snapshot) достаточного размера но не больше размера тома
  • Скопировать раздел в файл через сеть на другую машину на ходу немного сжимая
  • Удалить снимок

Continue reading Backup LV тома через snapshot