Есть виртуалка с плеском, на которой настроены квоты на дисковое пространство. При нештатном отключении сервера, после запуска виртуалка очень долго стартует, т.к. происходит проверка квот. В конфиге vz.conf параметр VZFASTBOOT=yes, но похоже он не действует. Как отключить эту проверку и чем это может грозить ? Спасибо !
Почитайте скрипт /etc/init.d/vz, там вроде всё не сверхсложно…
Не знаю что именно вы имели в виду, но в стартовом скрипте нашёл только вот эти строки относяшиеся к квотам. if [ "x${VZFASTBOOT}" = "xyes" -a "x${DISK_QUOTA}" = "xyes" ]; then $VZQUOTA stat ${veid} >/dev/null 2>&1 if [ $? -eq 6 ]; then if $VZQUOTA show ${veid} 2>&1 | grep "vzquota : (warning) Quota is running" >/dev/null 2>&1; then $VZQUOTA on ${veid} --nocheck >/dev/null 2>&1 need_restart="${need_restart} ${veid}" fi fi fi msg=`$VZCTL start ${veid} 2>&1` print_result "$msg"
Так кто-нибудь может просветить меня что нужно сделать чтобы при старте виртуальной машины не проверялись квоты ? Спасибо !
Этот кусок кода делает следующее: - если $VZFASTBOOT и $DISK_QUOTA стоят в "yes" смотрим в ядро на наличие quota статистики для данной VE, - если ядро не имеет таковой для для нашей VE (vzquota stat вернула 6), смотрил "vzquota show", то есть информацию из quota файла (при аварийном выключение VE, quota файл может оказаться в неконсистентном состоянии, то есть по-прежнему думать, что quota для данной VE включена), - если quota файл "плохой" и думает, что quota включена ( if $VZQUOTA show ${veid} 2>&1 | grep "vzquota : (warning) Quota is running" >/dev/null 2>&1; then) - включает "по-тихому" квоту с опцией nocheck и в ядре и записывает данную VE в need_restart список. - далее стартуем VE ( msg=`$VZCTL start ${veid} 2>&1`), таким образом, избежим проверки при старте (так как quota уже включена), ну а потом (следующие строчки, которые вы здесь на написали) перестартовывают ve из списка need_restart, чтобы как-то синхронизировать quota информацию в ядре и в файле это не то, что Вам нужно?
Видимо как раз то, но дело в том что это не работает так как Вы описали. Для полной ясности опишу то каким образом у меня запускается виртуалка. В конфите виртуалки прописано ONBOOT=no При старте сервера, запускается только /etc/init.d/vz, а виртуальные машины запускаются отдельно, как одна из служб кластера. Для этого я создал скрипт следующего содержания и прописал его запуск в сервисах кластера. cat /etc/init.d/vhost100 #!/bin/sh # # Source function library. . /etc/rc.d/init.d/functions prog="vhost100" PATH=$PATH:/usr/bin:/usr/local/bin: # By default it's all good RETVAL=0 rc_done='..done' rc_failed='..failed' # Source function library. DISTR=redhat print_success() { if [ "$DISTR" = "redhat" ]; then echo_success else echo -n "$rc_done" fi echo } print_failure() { echo -n "$1" if [ "$DISTR" = "redhat" ]; then failure $"$1" else echo -n "$rc_failed" fi echo } # See how we were called. case "$1" in start) # Start daemon. echo -n $"Starting $prog: " vzctl start 100 RETVAL=$? echo if [ $RETVAL = 0 ]; then touch /var/lock/subsys/vhost100 fi print_success ;; stop) # Stop daemons. echo -n $"Stopping $prog: " vzctl stop 100 RETVAL=$? echo if [ $RETVAL = 0 ]; then rm -f /var/lock/subsys/vhost100 fi print_success ;; restart) $0 stop sleep 3 $0 start ;; status) vzctl status 100 RETVAL=$? ;; *) echo "Usage: $0 {start|stop|restart|status}" RETVAL=1 ;; esac exit $RETVAL Подозреваю что именно в этом может быть причина, т.к. первоначально, запуская виртуалку сразу при старте скрипта vz, проверка квот не производилась. Но мне нужно запускать каждую виртуальную машину отдельно, т.к. на каждой из машин в кластере должна работать своя виртуалка. Что необходимо добавить в скрипт vhost100 чтобы он отрабатывал так-же как скрипт vz ? Простите за глупые вопросы, но я не очень силён в скриптописании и мне нужна помощь. Спасибо !
Если хотим ту же логику, нужно сделать то же самое : #!/bin/sh # # Source function library. VZCONF=/etc/vz/vz.conf [ -f ${VZCONF} ] || exit 0 . ${VZCONF} VZQUOTA=/usr/sbin/vzquota VZCTL=/usr/sbin/vzctl # далее следует Ваш код .... start) # Start daemon. need_restart="" echo -n $"Starting $prog: " if [ "x${VZFASTBOOT}" = "xyes" -a "x${DISK_QUOTA}" = "xyes" ]; then $VZQUOTA stat 100 >/dev/null 2>&1 if [ $? -eq 6 ]; then if $VZQUOTA show 100 2>&1 | grep "vzquota : (warning) Quota is running" >/dev/null 2>&1; then $VZQUOTA on 100 --nocheck >/dev/null 2>&1 need_restart="yes" fi fi fi if [ "x${need_restart}" != "xyes" ]; then $VZCTL start 100 RETVAL=$? echo if [ $RETVAL = 0 ]; then touch /var/lock/subsys/vhost100 print_success fi else $VZCTL start 100 sleep 3 $VZCTL stop 100 $VZCTL start 100 RETVAL=$? echo if [ $RETVAL = 0 ]; then touch /var/lock/subsys/vhost100 print_success fi fi # далее следует опять ваш код ... Этот набросок не очень хорош, но если хотите, вы его можете допилить.
Спасибо ! Попробую применить и отпишусь что из этого выйдет. Кстати, может можно сделать проще ? Поставить строчку vzquota on 200 --nocheck >/dev/null 2>&1 перед строкой vzctl start 200 Вот только нужно ли после этого делать ещё раз рестарт контейнера как это сделано в скрипте VZ ? Пробуя и так и так на тестовой машине, разницы не увидел.