Иногда случается, что приложение или не запускается или работает нестабильно, из-за того, что некоторые файлы заблокированы другими процессами. Это может произойти когда нескольков клиентов используют один общий ресурс, например общая папка 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

Таким образом мы удалили все заблокированные файлы и можем запускать наше приложение снова.

 

 Оставить комментарий

(обязательно)

(обязательно)

   
Copyright © 2012. Linuxguru.ru