Пошук заблокованих файлів Linux

Іноді трапляється, що програма або не запускається або працює нестабільно, тому що деякі файли заблоковані іншими процесами. Це може статися коли кілька клієнтів використовують один загальний ресурс, наприклад загальна папка home змонтована на декількох комп'ютерах.
Для цього нам знадобляться утиліти lsof і lslk.
Розглянемо приклад з урахуванням дистрибутива Ubuntu.
Інсталюємо необхідні пакети (має бути підключений репозиторій universe) - # sudo apt-get update # sudo apt-get install lsof lslk
Тепер усі необхідні нам інструменти є.
Для прикладу ми шукатимемо і видалятимемо заблоковані файли KDE сесій на загальному сховищі, де зберігатимемося і змонтовані на локальні машини, домашні каталоги користувачів (NFS)
Отже запускаємо lslk
Що цікаво, у цьому лістингу перші чотири рядки позначені як unknown
Ми отримали досить повну інформацію в цьому лістингу, ми знаємо, які файли використовуються в нашій файловій системі (у нашому випадку нас цікавить /mnt/home), нам знадобляться PID процесів. Для більш детального виведення параметрів зверніться до документації lslk.
Отже бачимо, що чотири процесу використовують якісь файли з /mnt/homes, спробуємо знайти файли використовувані цими процесами.
Для цього нам знадобиться утиліта lsof # lsof -p 1190,2294,2392,2397 Висновком цієї команди буде список всіх файлів перерахованих процесів. Щоправда, іноді ми можемо не отримати бажаного результату.
Тоді можна спробувати знайти файл за номером inode — # find /mnt/homes -inum 308115263 /mnt/homes/home/foo/.qt/.qtrc.lock
Заблокований файл знайдено, видаляємо його # rm -f /mnt/homes/home/foo/.qt/.qtrc.lock
Таким чином, мивидалили всі заблоковані файли і можемо запускати нашу програму знову.