Ошибка Device or resource busy в Linux: как найти блокирующий процесс через lsof
Почему файл не удаляется?
При попытке удалить файл через rm или отмонтировать диск через umount /mnt/storage консоль возвращает ошибку Device or resource busy или Operation not permitted. Это происходит потому, что какой-то запущенный системный процесс держит открытый файловый дескриптор.
Симптомы блокировки
$ rm -rf /var/log/app.log
rm: cannot remove '/var/log/app.log': Device or resource busy Поиск и освобождение заблокированного ресурса
- Ищем процесс, удерживающий конкретный файл, через lsof:
sudo lsof /var/log/app.logВы увидите имя программы (COMMAND) и её PID.
- Ищем все процессы, удерживающие целую точку монтирования/диск:
sudo fuser -mv /mnt/storage - Завершаем блокирующий процесс:
# Мягкое завершение по PID: sudo kill -15 PID_ПРОЦЕССА # Принудительное закрытие всех процессов на точке монтирования: sudo fuser -kvm /mnt/storage - Повторяем удаление или размонтирование:
sudo rm -f /var/log/app.log sudo umount /mnt/storage
Если диск все равно не отмонтируется, используйте отложенное отключение: sudo umount -l /mnt/storage (Lazy unmount).
Частые вопросы (FAQ)
Что делать, если lsof не выдает результатов?
Убедитесь, что запускаете команду с sudo, иначе lsof не видит процессы других пользователей.
Почему удаленный файл продолжает занимать место на диске?
Процесс все еще держит его открытым (статус deleted в lsof). Перезапустите службу, создавшую файл.
Что означает флаг -k в утилите fuser?
Флаг -k (kill) автоматически отправляет сигнал завершения всем процессам, использующим ресурс.
Что делать, если файл защищен атрибутом неизменяемости (immutable)?
Проверьте атрибуты: lsattr файл. Снимите блокировку: sudo chattr -i файл.