Каждый день мне приходится добавлять место на одном, двух, трех, пяти, а бывает – и десяти database серверах. Почему? Потому что для них характерен естественный рост баз. Серверов сотни, все они виртуалки с дисками на thin provisioning. Если им заранее выдать много места, то будет обязательно какой нибудь “runaway”, типа апгрейда с переливом таблиц, который пожрет все это место, а если не пожрет, то поднадкусает. Как вы знаете, thin provisioning – это путь в одну сторону, если место сожрано, но то его назад не вернуть.
В итоге большинство серверов болтаются где то у границы 90% space used – именно потому, что на границе 90% срабатывает алерт. Как только я даю немного, именно немного места – сервер отправляется в район 80%-85% used, и через месяц другой место надо добавлять снова. И, тем не менее, много сразу давать не буду – слишком много прецедентов с runaways.
Я так часто делал механическую работу по расширению места на дисках, что мне это надоело и я решил это автоматизировать с помощью Jenkins:
![](https://habrastorage.org/r/w1560/webt/du/4o/rw/du4orw8chagsb_vdlmu6alouqjo.png)
Прошу прощения за несколько занудное и детализированное описание ниже, но если это может быть полезно кому-то, то важны как раз мелкие детали – именно на них всегда тратишь больше всего времени. Если детали не важны, сразу прокрутите на последнюю картинку.
Разумеется, прежде чем добавлять место я смотрю историю роста space used %, автоматически приложенную к алерту моей тайной системой мониторинга. Чаще всего рост естественный:
![](https://habrastorage.org/r/w1560/webt/ir/q4/ri/irq4rirrevysr21dsyaxgn7ko44.png)
А вот тут лучше вначале разобраться:
![](https://habrastorage.org/r/w1560/webt/bg/kn/no/bgknnofg68vwbwhyn-6ytff4vy4.png)
Вернемся к Jenkins, который есть лишь интерфейс к Powershell script. У нас много VMware Vcenters, так что специальная процедура на SQL по имени сервера определяет, где находится данный сервер и коннектится именно к нему:
![](https://habrastorage.org/r/w1560/webt/no/2a/jc/no2ajc1a9tlxvs8bpvd92mqyuas.png)
Теперь мы считываем размер диска, добавляем дельту и устанавливаем новое значение.
![](https://habrastorage.org/r/w1560/webt/5d/va/2a/5dva2abwezp0vq2mfgxttu4sklc.png)
Правда, я нагло пользуюсь тем, что все сервера у нас отлиты подобным образом, например, D: всегда Hard disk 2. Если у вас это не так, то придется помучиться.
Теперь диск расширен с точка зрения VMware, но не с точки зрения guest (Windows). Мы должны выделенное место использовать. Для этого надо выполнить внутри guestа команды DISKPART.
![](https://habrastorage.org/r/w1560/webt/lp/em/y_/lpemy_1vfmax1lddrxzznp61nkq.png)
Мы нагло запихиваем в корень D: файл BAT и IN, и с помощью WMIC заставляем машинку выполнить эти команды. Файл doresizeX.bat (X – название драйва) содержит лишь
А doresizeX.in содержит:
Теперь все готово, надо только чуть подождать (команда то асинхронная!) и прочитать результат, отфильтровав ненужное:
![](https://habrastorage.org/r/w1560/webt/o7/uk/hh/o7ukhh-xtgw_jwxsubwzycicut8.png)
И ждем письма от Jenkins:
![](https://habrastorage.org/r/w1560/webt/of/05/dd/of05ddtxffy0vpxtapc0vo11x28.png)
В итоге большинство серверов болтаются где то у границы 90% space used – именно потому, что на границе 90% срабатывает алерт. Как только я даю немного, именно немного места – сервер отправляется в район 80%-85% used, и через месяц другой место надо добавлять снова. И, тем не менее, много сразу давать не буду – слишком много прецедентов с runaways.
Я так часто делал механическую работу по расширению места на дисках, что мне это надоело и я решил это автоматизировать с помощью Jenkins:
![](https://habrastorage.org/webt/du/4o/rw/du4orw8chagsb_vdlmu6alouqjo.png)
Прошу прощения за несколько занудное и детализированное описание ниже, но если это может быть полезно кому-то, то важны как раз мелкие детали – именно на них всегда тратишь больше всего времени. Если детали не важны, сразу прокрутите на последнюю картинку.
Разумеется, прежде чем добавлять место я смотрю историю роста space used %, автоматически приложенную к алерту моей тайной системой мониторинга. Чаще всего рост естественный:
![](https://habrastorage.org/webt/ir/q4/ri/irq4rirrevysr21dsyaxgn7ko44.png)
А вот тут лучше вначале разобраться:
![](https://habrastorage.org/webt/bg/kn/no/bgknnofg68vwbwhyn-6ytff4vy4.png)
Вернемся к Jenkins, который есть лишь интерфейс к Powershell script. У нас много VMware Vcenters, так что специальная процедура на SQL по имени сервера определяет, где находится данный сервер и коннектится именно к нему:
![](https://habrastorage.org/webt/no/2a/jc/no2ajc1a9tlxvs8bpvd92mqyuas.png)
Теперь мы считываем размер диска, добавляем дельту и устанавливаем новое значение.
![](https://habrastorage.org/webt/5d/va/2a/5dva2abwezp0vq2mfgxttu4sklc.png)
Правда, я нагло пользуюсь тем, что все сервера у нас отлиты подобным образом, например, D: всегда Hard disk 2. Если у вас это не так, то придется помучиться.
Теперь диск расширен с точка зрения VMware, но не с точки зрения guest (Windows). Мы должны выделенное место использовать. Для этого надо выполнить внутри guestа команды DISKPART.
![](https://habrastorage.org/webt/lp/em/y_/lpemy_1vfmax1lddrxzznp61nkq.png)
Мы нагло запихиваем в корень D: файл BAT и IN, и с помощью WMIC заставляем машинку выполнить эти команды. Файл doresizeX.bat (X – название драйва) содержит лишь
diskpart <d:\doresizeX.in >d:\doresize.out
А doresizeX.in содержит:
rescan
select volume X
extend
exit
Теперь все готово, надо только чуть подождать (команда то асинхронная!) и прочитать результат, отфильтровав ненужное:
![](https://habrastorage.org/webt/o7/uk/hh/o7ukhh-xtgw_jwxsubwzycicut8.png)
И ждем письма от Jenkins:
![](https://habrastorage.org/webt/of/05/dd/of05ddtxffy0vpxtapc0vo11x28.png)