it-swarm-ru.tech

Как преодолеть «устройство или ресурс занят»?

Я пытался rm -rf папку и получил "устройство или ресурс занят".

В Windows я бы использовал LockHunter, чтобы решить эту проблему. Что такое эквивалент Linux? (Пожалуйста, дайте в качестве ответа простой метод "разблокировать этот", а не полные статьи, такие как эта . Хотя они полезны, в настоящее время меня интересует только ASimpleMethodThatWorks ™)

250
ripper234

Инструмент, который вам нужен, это lsof, что означает список открытых файлов.

У него много опций, поэтому проверьте страницу руководства, но если вы хотите увидеть все открытые файлы в каталоге:

_lsof +D /path
_

Это будет проходить через файловую систему в _/path_, так что будьте осторожны, делая это на больших деревьях каталогов.

Как только вы узнаете, в каких процессах открыты файлы, вы можете выйти из этих приложений или убить их с помощью команды kill(1).

255
camh

иногда это является результатом проблем с монтированием, поэтому я размонтирую файловую систему или каталог, который вы пытаетесь удалить:

размонтирование/путь

122
kip2

Я использую fuser для такого рода вещей. Он покажет, какой процесс использует файл или файлы в монтировании.

16
BillThor

Вот решение:

  1. Зайдите в каталог и введите ls -a
  2. Вы найдете .xyz файл
  3. vi .xyz и ​​посмотрите, что содержимое файла
  4. ps -ef | grep username
  5. Вы увидите содержимое .xyz в 8-м столбце (последняя строка).
  6. kill -9 job_ids - где job_ids - значение 2-го столбца соответствующей ошибки, вызванной содержимым в 8-м столбце
  7. Теперь попробуйте удалить папку или файл.
12
user73011

У меня была такая же проблема, построил однострочник, начиная с рекомендации @camh:

lsof +D ./ | awk '{print $2}' | tail -n +2 | xargs kill -9

Команда awk захватывает PIDS. Команда tail избавляет от надоедливой первой записи: "PID". Я использовал -9 на убийство, другие могут иметь более безопасные варианты.

9
Choylton B. Higginbottom

Я часто сталкиваюсь с этим на серверах с сетевыми файловыми системами NFS. Я предполагаю, что это как-то связано с файловой системой, поскольку файлы обычно называются как .nfs000000123089abcxyz.

Мое типичное решение - переименовать или переместить родительский каталог файла, а затем вернуться через день или два, и файл будет автоматически удален, и в этот момент я могу свободно удалить каталог.

Обычно это происходит в каталогах, где я устанавливаю или компилирую программные библиотеки.

7
user5359531

У меня была эта проблема, когда автоматизированный тест создал виртуальный диск. Команды, предложенные в других ответах, lsof и ​​fuser, не помогли. После тестов я попытался размонтировать его, а затем удалить папку. Я был действительно смущен целую вечность, потому что я не мог избавиться от этого - я продолжал получать "Устройство или ресурс занят"!

Случайно я узнал, как избавиться от виртуального диска. Мне пришлось размонтировать его столько раз, сколько я выполнил команду mount, т.е. Sudo umount path

Из-за того, что он был создан с использованием автоматического тестирования, он монтировался много раз, поэтому я не мог избавиться от него, просто размонтировав его один раз после тестов. Итак, после того, как я вручную размонтировал его много раз, он, наконец, снова стал обычной папкой, и я смог удалить его.

Надеюсь, это может помочь кому-то, кто сталкивается с этой проблемой!

5
gloriphobia

Отбросив вопрос Прабхата выше, у меня была эта проблема в macos High Sierra, когда я застрял в процессе encfs, перезагрузка решила его, но это

ps -ef | grep name-of-busy-dir

Показал мне процесс и PID (столбец два).

Sudo kill -15 pid-here

починил это.

5
bil

Если у вас есть доступ к серверу, попробуйте

Удаление этого каталога с сервера

Или снова выполните mount и mount, попробуйте umount -l: ленивая размонтирование, если возникает проблема с обычным размонтированием.

У меня тоже была такая проблема где

lsof +D path: не выводит

ps -ef: не дает соответствующей информации

3
Prabhat Kumar Singh