Я хотел бы использовать cron для планирования периодических очисток моего пула ZFS и через некоторое время после завершения очистки отправлять мне отчет о состоянии. Цель этого состоит в том, чтобы поймать любые проблемы без необходимости вручную искать их (толкать, а не тянуть).
Первая часть проста: просто настройте задачу cron для запуска zpool scrub $POOL
с правами root с любым интервалом, приемлемым в моей конкретной ситуации.
Вторая часть, я не совсем уверен, как это сделать. zpool scrub
немедленно возвращается, а затем система запускается в фоновом режиме системой (что, безусловно, является желательным поведением, если очистка инициируется администратором из терминала). zpool status
выдает мне отчет о состоянии и завершает работу (с кодом выхода 0 во время работы скраба; он еще не завершен, поэтому я не знаю, изменится ли состояние выхода после его завершения, но я сомневаюсь в этом). Единственный параметр, задокументированный для zpool scrub, - это -s
«stop scrubbing».
Основная проблема заключается в обнаружении изменения статуса от очистки до законченной очистки . Учитывая это, остальные должны встать на свои места.
В идеале я хотел бы сказать, zpool scrub
чтобы не возвращаться, пока скраб не закончится, но я не вижу способа заставить это сделать это. (Было бы слишком просто просто cron zpool scrub --wait-until-done $POOL; zpool status $POOL
.)
Если это не удастся, я хотел бы спросить систему, выполняется ли в настоящий момент очистка, предпочтительно таким образом, чтобы не слишком рисковать, нарушая обновление или изменение конфигурации, чтобы я мог действовать независимо от того, запущен ли ранее очистка завершена (выполнением состояния zpool, когда состояние очистки меняется с очистки на очистку).
Эта конкретная настройка предназначена для системы рабочей станции, поэтому, хотя инструмент мониторинга, такой как Nagios, вероятно, имеет надстройки, которые могли бы решить проблему, он чувствует себя довольно излишне, устанавливая такой инструмент только для этой одной задачи. Может кто-нибудь предложить решение проблемы с более низкими технологиями?
источник
Хотя этот вопрос относится только к Linux, он является первым результатом поиска Google при поиске «дождаться окончания очистки» , поэтому я хотел бы добавить некоторую полезную информацию для людей, работающих под управлением OpenSolaris (проверено на OmniOS, но на SmartOS, illumos и т. Д.). должно быть похоже) вместо линукса (нормальный солярис тоже должен работать, но я там не тестировал).
Вы можете использовать
syseventadm
для регистрации событий ядра. Полный список можно найти в/usr/include/sys/sysevent/eventdefs.h
(просто поиск "ZFS" в этом файле). После добавления событий сервис должен быть перезапущен, например:Таким образом, скрипт будет запущен, когда закончится любая очистка любого пула - вы должны проверить внутри скрипта,
$1
равно ли оно желаемому имени пула. Тем не менее, это намного меньше, чем опрос.источник
Я использую этот простой скрипт для очистки отчетов о состоянии по электронной почте.
Если вам нужно обнаружить переход из
scrub running
вscrub finished
я бы проверитьstate
полеzpool status
вывода. Что-то вроде этого:источник
while ... done
проверки цикла для этого самого условия.grep -q
в вашем фрагменте сценария оболочки он также должен работать, исключая необходимость перенаправления в / dev / null. :)У меня был большой успех с zfswatcher
источник