Вопрос или проблема
Когда мы используем svn для загрузки файлов с локального или удаленного сервера в svn или для удаления файлов, мы можем столкнуться с проблемой “невозможно удалить: Устройство или ресурс заняты”. Причина в том, что мы не сделали svn commit и svn update после выполнения одной svn add или svn delete, а затем сделали другую svn add или svn delete.
В данном случае svn cleanup может не решить эту проблему.
Итак, как мы можем решить эту проблему.
Эту проблему можно решить, завершив сессии, которые работают с этими файлами nfs0000*.
Введите код
lsof |grep nfs000000000b0c04750000001f
Здесь nfs000000000b0c04750000001f – это имя вашего nfs файла. Ваше может быть другим.
Затем вы увидите что-то подобное.
less 22081 xxxx 4r REG 0,43 7834 185336964
less 25122 xxxx 4r REG 0,43 7834 185336964
Здесь во второй колонке содержится идентификатор сессии, который равен 22081 или 25122.
Далее, мы завершаем эти сессии.
kill -9 Session_ID(2nd column)
После завершения сессии мы запускаем svn cleanup
, затем svn commit -m "blabla"
.
Ответ или решение
Решение проблемы с SVN: E155037 – Устройство или ресурс занят
Проблема, с которой вы столкнулись, может возникнуть при работе с системой управления версиями Subversion (SVN), когда вы пытаетесь выполнить операции, такие как добавление или удаление файлов, но встретили ошибку:
svn: E155037: Previous operation has not finished; run 'cleanup' if it was interrupted
Device or resource busy
Причины возникновения проблемы
Ошибка возникает, когда вы пытаетесь выполнить несколько операций SVN (например, svn add
или svn delete
), не сделав предварительно коммит (svn commit
) или обновление (svn update
) после предыдущей операции. Эта ситуация может привести к тому, что некоторые ресурсы остаются занятыми, и как результат – вы не можете продолжить работу.
Шаги для решения проблемы
-
К убийству зависимых процессов
Ваша первая задача заключается в том, чтобы идентифицировать активные процессы, которые блокируют работу с файлами. Это можно сделать с помощью команды, которая отображает все текущие процессы, работающие с вашими NFS-файлами:lsof | grep nfs000000000b0c04750000001f
Замените
nfs000000000b0c04750000001f
на имя вашего конкретного NFS файла. -
Проверка результатов
После выполнения команды вы увидите список процессов, использующих NFS. Например:less 22081 xxxx 4r REG 0,43 7834 185336964 less 25122 xxxx 4r REG 0,43 7834 185336964
В данном случае, во втором столбце указаны идентификаторы процессов (PID), такие как
22081
и25122
. -
Завершение процесса
Теперь, когда вы знаете идентификаторы процессов, вы можете завершить их с помощью командыkill
. Например:kill -9 22081 kill -9 25122
Используйте флаг
-9
для принудительного завершения процесса. Будьте осторожны с использованием этой команды, так как она не дает процессу возможности корректно завершить свои операции. -
Очистка и коммит
После завершения всех зависимых процессов выполните командуsvn cleanup
, чтобы восстановить нормальное состояние вашей рабочей копии:svn cleanup
Далее, вы можете продолжить работу с SVN, выполнив команду коммита с соответствующим сообщением:
svn commit -m "Ваше сообщение коммита"
Заключение
Следуя вышеизложенным шагам, вы сможете эффективно решить проблему с ошибкой svn: E155037
. Важно понимать циклы операций со SVN и избегать одновременного изменения состояния файлов без соответствующих коммитов и обновлений. Подобные действия помогут избежать блокировок и сохранить целостность вашего репозитория.
Если у вас часто возникают подобные проблемы, рассмотрите возможность оптимизации рабочего процесса, чтобы минимизировать риск возникновения конфликтов и зависаний.