У меня есть сервер A и сервер B. B действует как сервер nfs, A монтируется из B.
Оба работают на EC2.
Иногда мне приходится выключать B и запускать новый экземпляр (идентичный экземпляр). После резервного копирования B попытка сделать что-либо внутри смонтированного каталога на A (например, ls) просто зависает.
Я пытаюсь настроить cron, который проверяет статус монтирования и перемонтирует, если что-то не так.
Есть ли способ проверить состояние маунта?
Я понял, что когда сервер NFS перезагружается, он меняет свой ip, поэтому монтирование не работает.
Написал этот сценарий, который проверяет, является ли IP-адрес хоста NFS тем IP, который в настоящее время используется при монтировании, если нет, он размонтируется и повторно монтируется. Может помочь кому-нибудь в будущем.
#!/bin/bash
NFS_HOST=$(mount | grep nfs | awk '{ print $1 }' | cut -d ":" -f 1)
NFS_HOST_PATH=$(mount | grep nfs | awk '{ print $1 }' | cut -d ":" -f 2)
host $NFS_HOST
if [[ $? -ne 0 ]]; then
echo "NFS host $NFS_HOST doesn't exist!"
exit 2
fi
MOUNT_POINT=$(mount | grep $NFS_HOST | awk '{ print $3 }')
NFS_IP=$(host $NFS_HOST | awk '{ print $4 }')
mount | grep "$NFS_IP"
if [[ $? -ne 0 ]]; then
umount -fl $MOUNT_POINT
mount "$NFS_HOST:$NFS_HOST_PATH" $MOUNT_POINT
fi
Вы можете выполнить fork, чтобы дочерний элемент вошел в каталог, а затем вышел из дочернего. Попросите родителя отслеживать существование дочернего процесса с тайм-аутом. Если у вас устаревшее монтирование, дочерний элемент не сможет выйти и будет оставаться там в течение долгого времени, поэтому таймаут произойдет в родительском. Попросите родителя убить -9 ребенка и попробуйте размонтировать.
Однако проблема, с которой вы можете столкнуться, заключается в том, что если какой-либо другой процесс использует файл, который находится на сломанном монтировании, вы не сможете размонтировать его, не завершив сначала эти процессы. Вы можете (часто) определить, используют ли какие-либо процессы недоступные ресурсы на устаревшем монтировании с помощью lsof или fuser.
Однако я бы избегал автоматического уничтожения произвольных процессов с помощью магии; отправьте себе уведомление для дальнейшего расследования вручную.
Чтобы снизить вероятность этого, вам может потребоваться автоматическое монтирование, которое не будет монтировать том, пока он не понадобится / не будет запрошен ресурс на сервере, и автоматически отключит его, когда он больше не нужен.
- кстати, чтобы сделать его более доступным для поиска, вы можете пометить его словами stale, stuck, nfs и mount. Это явление не связано с использованием ec2.