Хотелось бы реализовать возможность ожидания отключения инициаторов от всех целей tgtd в /etc/rc.d/init.d/tgt. Например, что-то типа переменной STOP_WAIT=300 в /etc/sysconfig/tgtd и кода вроде такого в функции stop() /etc/rc.d/init.d/tgt: --- tgt 2018-08-24 10:39:40.857100951 +0300 +++ tgt.init.withwait 2018-08-24 10:33:25.783602194 +0300 @@ -79,6 +79,13 @@ return 1 fi msg_stopping "$NAME" + local wt=0 + [ -z "$STOP_WAIT" ] STOP_WAIT=30 + while [ $($ADM --op show --mode target | grep "Initiator:" | wc -l) -gt 0 -a $wt -lt $STOP_WAIT ]; do + echo -n "." + let wt=$wt+5 + sleep 5 + done $ADM $STOP_OPTIONS1 RETVAL=$? [ ! $RETVAL -eq 0 ] && failure && return $RETVAL Это позволит при питании нескольких машин от одного ИБП дождаться отключения инициаторов от целей у корректно завершить работу системы в целом. А установка переменной STOP_WAIT в 0 вернет старое поведение.
Не реализовано. scsitarget-utils 1.0.97-alt1: stop() в /etc/rc.d/init.d/tgt (tgt.init:69-98 в gear-репозитории) сразу выполняет tgtadm ... State -v offline → tgt-admin --update ALL -c /dev/null → tgtadm --op delete --mode system, без какого-либо ожидания отключения инициаторов; /etc/sysconfig/tgtd содержит только TGTD_OPTS и TGTD_CONFIG. В tgt.service — те же три ExecStop с апстримным предупреждением "Shutdown of the iscsi target may cause data corruption for initiators that are connected". Апстрим tgt такого ожидания тоже не добавил. Патч из отчёта применим и сегодня; в нём одна опечатка — строка [ -z "$STOP_WAIT" ] STOP_WAIT=30 должна быть с && между условием и присваиванием. Для systemd понадобится аналог: обёртка в ExecStop с тем же циклом по "Initiator:" в выводе tgtadm --op show --mode target. Перевешиваю с внешнего адреса на andy@: все сборки 1.0.91–1.0.97 (задания 342214 … 400616) его.