Иногда сервер начинает странно тормозить: команда
df -h зависает, ls не отвечает, а проблема оказывается в примонтированной NFS/SMB/сетевой ФС. Причина простая: mount есть, но I/O к нему не отвечает.Проверить это можно через связку: timeout + stat. Можно выполнить stat для точки монтирования, но ограничить время ожидания.
▪️ Пример ручной проверки
timeout 3 stat /mnt/backup
Если ФС отвечает - увидим информацию о каталоге. Если команда зависла и была остановлена по таймауту - mount подозрительный.
🛠 Скрипт проверки всех mount
#!/usr/bin/env bash
TIMEOUT=3
findmnt -rn -o TARGET | while read -r mountpoint; do
if timeout "$TIMEOUT" stat "$mountpoint" >/dev/null 2>&1; then
echo "OK: $mountpoint"
else
echo "HANG: $mountpoint"
fi
done
Сохраняем:
nano check-mounts.sh
Делаем исполняемым:
chmod +x check-mounts.sh
Запускаем:
sudo ./check-mounts.sh
Пример вывода
OK: /
OK: /boot
OK: /home
HANG: /mnt/backup
HANG: /mnt/nfs-share
🛠 Также можно проверять только сетевые ФС
#!/usr/bin/env bash
TIMEOUT=3
findmnt -rn -t nfs,nfs4,cifs,smb3 -o TARGET | while read -r mountpoint; do
if timeout "$TIMEOUT" stat "$mountpoint" >/dev/null 2>&1; then
echo "OK: $mountpoint"
else
echo "HANG: $mountpoint"
fi
done
Такой вариант удобнее для серверов, где много локальных mount.
⚠️ stat может зависнуть, если ядро ждет ответ от удаленного хранилища. Поэтому мы оборачиваем его в timeout. Без timeout ваш скрипт сам может зависнуть на проблемной точке монтирования.
▪️ Быстрая проверка одной строкой
findmnt -rn -o TARGET | while read -r mp; do
timeout 3 stat "$mp" >/dev/null 2>&1 \
&& echo "OK: $mp" \
|| echo "HANG: $mp"
done
BashTex 📱 #mount #script