=========== Подробности системы ===========

=========== Подробности системы ===========

=========== Подробности системы ===========

ОС: Solaris 10, обновление 11
CPU_ARCH: SPARC (sparcv9)
HW: Sun Fire V490 (дааааа, детка, старая школа)
KERNEL_REV: 150400-40
Программа: bpbkar32 (Symantec's Netbackup)
TL;DR: Невозможно завершить процессы даже с kill -9помощью SUSPENDED zpool из-за, возможно, не двух хороших путей.

Проблема:

У нас в системе имеется ряд (16) не поддающихся завершению процессов; команда резервного копирования уведомила нас о том, что они не могут завершить эти задания на главном сервере NB или создать новые резервные копии, поэтому мы попытались выполнить команду и ./bp.kill_allполучили:

bash-3.2#./bp.kill_all

Поиск процессов NetBackup, которые необходимо завершить.
Уничтожение процессов bpbkar...

Следующие процессы все еще активны
root 20346 1 0 02:02:33 ? 0:00 bpbkar32 -r 2678400 -ru root -dt 1047868 -to 0 -bpstart_time 1481767648 -clnt n
root 18689 1 0 Dec 09 ? 0:00 bpbkar32 -r 8035200 -ru root -dt 0 -to 0 -bpstart_time 1481325879 -clnt nerp323
root 12618 1 0 Dec 07 ? 0:00 bpbkar32 -r 2678400 -ru root -dt 357484 -to 0 -bpstart_time 1481077264 -clnt ne
root 29693 1 0 Дек 09 ? 0:00 bpbkar32 -r 2678400 -ru root -dt 529430 -to 0 -bpstart_time 1481249210 -clnt ne root
10168 1 0 Дек 09 ? 0:00 bpbkar32 -r 2678400 -ru root -dt 530349 -to 0 -bpstart_time 1481250129 -clnt ne
root 1950 1 0 Дек 14 ? 0:00 bpbkar32 -r 2678400 -ru root -dt 962300 -to 0 -bpstart_time 1481682080 -clnt ne
Хотите, чтобы этот скрипт попытался завершить их? [y,n] (y) y
Завершение оставшихся процессов...
Ожидание завершения процессов...
Ожидание завершения процессов...
Ожидание завершения процессов...
Ожидание завершения процессов...
Ожидание завершения процессов...
Есть еще запущенные процессы.

...вывод сокращен для удобства чтения.

Приводя нас к тому, чтобы затем продолжить попытки убить эти процессы с крайним предубеждением, через kill -9, также безрезультатно. Я посмотрел наКак завершить задачу, которую невозможно завершить (непрерываемую?)иЧто делать, если «kill -9» не срабатывает?а также искали "Solaris uninterruptable process" с частичными результатами. Перезагрузка, похоже, является общей темой и, похоже, нашим решением "бей-головой-об-стол-тут".

Сказав это, я хотел бы:
- подтвердить свою логику и рассуждения о том, что является первопричиной
- Посмотреть, есть ли лучший способ определить, где процесс остановлен/какой системный вызов он пытается выполнить
- Решить проблему ввода-вывода без перезагрузки, если это вообще возможно, и впоследствии те процессы, которые не могут быть завершены.
По сути, просто анализ первопричины и своего рода смягчение "В будущем не выполняйте работу по переключению во время резервного копирования или если у вас нет двух рабочих путей".

Вот что я получил/о чем думаю:
1) Захожу в каталог /proc/1950/ и смотрю на статус. Никакого понимания этого вывода, даже с strings. Выдает случайные символы. Стоит отметить, что 'cwd' показывает ссылку на ничто, и попытка разрешить ее через ls -alL /proc/1950/cwdзависнет терминал и также создастбарабанная дробьеще один непрерывный процесс.

2) Запуск a pstack 1950сгенерирует некоторую полезную информацию, но ничего, что я не могу увидеть из a ps -eafили что я могу понять. Однако все нули выглядят плохо, поскольку мы не видим адреса или системные вызовы, как я вижу с рабочим pid.

bash-3.2#pstack 1950

1950: bpbkar32 -r 2678400 -ru root -dt 962300 -to 0 -bpstart_time 1481682080 00000000000000000 ???????? (0, 0, 0, 0, 0, 0)

3) Запуск trussзависнет, если попытаться запустить запущенный процесс, то же самое касается pfilesгенерации ошибки "pfiles: cannot control process 1950". Интересно, но ожидаемо.

4) Запуск stracejust сообщает мне, что «трассировщик уже существует»

5) запуск a pwdxдля печати cwd возвращает:
bash-3.2#pwdx 1950

1950: /ведро

Это интересно, так как наш DF это включает...
df -h /bucket

Размер файловой системы, используемая доступная емкость, смонтировано на
контейнере 1,9 Т 31 КБ 1,9 Т 1% / контейнер

... но попытка перейти в /bucket и выполнить команду lsприводит к тому же эффекту зависания.

bash-3.2#zpool list

НАЗВАНИЕ РАЗМЕР РАСПРЕДЕЛЕНИЕ БЕСПЛАТНО КАПИТАН ЗДОРОВЬЕ ALTROOT
ведро 1.94T 308K 1.94T 0% ПРИОСТАНОВЛЕНО -
rpool 136G 58.0G 78.0G 42% ОНЛАЙН -

bash-3.2#umount /bucket

невозможно открыть «ведро»: ввод-вывод пула в данный момент приостановлен

bash-3.2#zpool export bucket

невозможно размонтировать '/bucket': устройство занято

bash-3.2#zpool status -x


pool: состояние контейнера : ПРИОСТАНОВЛЕНО
статус: одно или несколько устройств вышли из строя из-за сбоев ввода-вывода.
действие: убедитесь, что затронутые устройства подключены, затем запустите команду «zpool clear».
см.:http://www.sun.com/msg/ZFS-8000-HC
сканирование: не запрошено
конфигурация:
ИМЯ СОСТОЯНИЕ ЧТЕНИЕ ЗАПИСЬ CKSUM
контейнер ПРИОСТАНОВЛЕН 0 0 0 возникли сбои ввода-вывода c3t50060E80102B1F5Ad78 ОШИБКА 2 0 0 слишком много ошибок

Итак... Я чувствую, что мы увязли в воде, и на самом деле, когда происходила эта «работа по переключению», НЕ БЫЛО двух активных/здоровых путей к SAN, и поэтому мы в итоге выдернули коврик из-под vdev, и так уж получилось, что резервное копирование работало там, когда оно отключилось, но любой процесс, вроде моего ls, вел бы себя так же.

У кого-нибудь есть последние спасительные мысли по типу «запустить эту неизвестную команду, которая избавит вас от перезагрузки»???

решение1

Как предположил Джефф, zpool clear должен помочь решить проблему, если путь(и) вернулись. Поскольку похоже, что этого не произошло, сервер, вероятно, не видит LUN(ы).

A zpool clear -F -n bucketтакже сообщит вам, можно ли импортировать пул, отбросив последний набор транзакций (опция -F).

Вы упомянули работу переключателя, поэтому вы можете проверить, какая работа была проделана, и удалило ли одно из изменений или какой-либо из путей. Вы смотрели на свой `luxadm display /dev/rdsk/c<____>s2 вывод? Или пробовали перенастроить пути с помощью cfgadm? Или отправить событие forcelip по пути?

Полный вывод a zpool status bucketтакже может быть полезен для определения типа пула (зеркало, кошка, полоса, ...). Я предполагаю, что это не зеркало, основываясь на проблеме.

Я понимаю, что мне легко говорить, так как я не в теме, но не паникуйте пока, так как данные должны все еще присутствовать в массиве, если предположить, что проблема не в этом. Но вам может потребоваться выполнить повторный импорт с откатом некоторых транзакций.

Удачи!

решение2

Вы можете узнать статус своего SAN (предполагается, что это FC SAN) следующим образом:

for port in `fcinfo hba-port | grep Port | awk '{ print $4 }'`; do
> fcinfo remote-port -ls -p $port
> done

Также прочитайтестраница руководства дляmpathadm. Вы можете использовать mpathadm show lu LUNдля отображения статуса LUN.

Связанный контент