Устройство или ресурс занято linux

Ошибка device or resource busy

Часто при работе с флешками, дисками, образами или другими подобными объектами может возникать ошибка device or resource busy. Она может выводится, когда вы пытаетесь отмонтировать внешний диск, раздел, а также при попытке переместить или удалить файл.

В этой небольшой статье мы рассмотрим, почему может возникать данная ошибка, а также пути её устранения. Конечно, в случае с флешкой вы можете просто вынуть её из компьютера, но это не решение, потому что высока вероятность потерять не сохранённые данные. Есть пути обхода этой проблемы.

Что означает «device or resource busy»?

Если переводить дословно с английского, то это сообщение означает, что устройство или ресурс занято. Если объяснять более подробно — файл, который вы пытаетесь удалить или диск, который нужно отмонтировать, ещё используется одной из запущенных программ.

Это могло произойти потому, что программа ещё не завершила свою работу, зависла, возникли какие-либо проблемы в процессе её работы. Это актуально как для файлов, так и для съёмных носителей.

Как исправить device or resource busy?

Самое первое, что можно посоветовать — закрыть программы, которые могут использовать этот файл или один из файлов на съёмном носителе. Например, если сейчас воспроизводится один из видеофайлов, то проигрыватель надо закрыть. И только поле этого пробовать ещё раз выполнять операции.

Если вы не знаете какая программа мешает вам выполнить операцию, то это можно очень просто узнать с помощью команды lsof. Просто выполните её и отсейте только те записи, которые относятся к точке монтирования вашего носителя:

Чтобы отсеять нужные процессы в самой утилите, используйте опцию +D, так даже лучше, потому что она не будет показывать системные службы, а отобразит только программу, которую надо завершить:

Теперь вы можете видеть все процессы, которые используют файлы на нашем носителе, и завершить их с помощью команды kill. В нашем случае надо завершить плеер totem с PID 5616:

Также, чтобы посмотреть, какие процессы используют файл, можно использовать команду fuser:

Здесь вы тоже увидите всю необходимую информацию: будет отображаться пользователь, от имени которого запущен процесс. Точно так же можно его завершить:

Если вы закрыли все программы, но это не помогло, можно попытаться очистить файловый кэш системы с помощью такой команды:

Выводы

В этой небольшой статье мы рассмотрели, как бороться с ошибкой device or resource busy Linux. Как видите, её очень просто исправить, даже если по началу кажется, что совсем непонятно, что можно сделать.

Источник

Ошибка device or resource busy

Часто при работе с флешками, дисками, образами или другими подобными объектами может возникать ошибка device or resource busy. Она может выводится, когда вы пытаетесь отмонтировать внешний диск, раздел, а также при попытке переместить или удалить файл.

В этой небольшой статье мы рассмотрим, почему может возникать данная ошибка, а также пути её устранения. Конечно, в случае с флешкой вы можете просто вынуть её из компьютера, но это не решение, потому что высока вероятность потерять не сохранённые данные. Есть пути обхода этой проблемы.

Что означает «device or resource busy»?

Если переводить дословно с английского, то это сообщение означает, что устройство или ресурс занято. Если объяснять более подробно — файл, который вы пытаетесь удалить или диск, который нужно отмонтировать, ещё используется одной из запущенных программ.

Это могло произойти потому, что программа ещё не завершила свою работу, зависла, возникли какие-либо проблемы в процессе её работы. Это актуально как для файлов, так и для съёмных носителей.

Как исправить device or resource busy?

Самое первое, что можно посоветовать — закрыть программы, которые могут использовать этот файл или один из файлов на съёмном носителе. Например, если сейчас воспроизводится один из видеофайлов, то проигрыватель надо закрыть. И только поле этого пробовать ещё раз выполнять операции.

Читайте также:  Windows live net framework

Если вы не знаете какая программа мешает вам выполнить операцию, то это можно очень просто узнать с помощью команды lsof. Просто выполните её и отсейте только те записи, которые относятся к точке монтирования вашего носителя:

lsof | grep /media/sergiy/83AE-2346

Чтобы отсеять нужные процессы в самой утилите, используйте опцию +D, так даже лучше, потому что она не будет показывать системные службы, а отобразит только программу, которую надо завершить:

lsof +D /media/sergiy/83AE-2346

Теперь вы можете видеть все процессы, которые используют файлы на нашем носителе, и завершить их с помощью команды kill. В нашем случае надо завершить плеер totem с PID 5616:

Также, чтобы посмотреть, какие процессы используют файл, можно использовать команду fuser:

fuser -vm /home/sergiy/83AE-2346

Здесь вы тоже увидите всю необходимую информацию: будет отображаться пользователь, от имени которого запущен процесс. Точно так же можно его завершить:

Если вы закрыли все программы, но это не помогло, можно попытаться очистить файловый кэш системы с помощью такой команды:

sync && echo 2 > /proc/sys/vm/drop_caches

Выводы

В этой небольшой статье мы рассмотрели, как бороться с ошибкой device or resource busy Linux. Как видите, её очень просто исправить, даже если по началу кажется, что совсем непонятно, что можно сделать.

Источник

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

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

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

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

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

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

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

. Это показывает, что любой /dev/ может быть установлен на

. Работает для меня. Спасибо @camh

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

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

  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. Теперь попробуйте удалить папку или файл.

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

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

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

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

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

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

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

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

Читайте также:  Почему не работает файл подкачки windows 10

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

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

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

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

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

Или, сделайте umount и снова смонтируйте , попробуйте umount -l : lazy umount, если вы столкнулись с какой-либо проблемой обычного umount.

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

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

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

Источник

rmdir не удалось из-за «Устройство или ресурс занят»

Есть много подобных проблем, вроде «Устройство или ресурс занят». Но я думаю, что моя проблема с ними в другом.

Я использую mount —bind для привязки каталога

А затем смог успешно размонтировать

А потом, если я сразу позвоню rm

Могу получить ошибку Device or resource busy . Если я подожду 2

3 секунды, а затем вызову rm, все будет успешно.

Это очень странное поведение. Я пытаюсь использовать

Ничего не видел.

Я также использую fuser -vm /tmp/mount , не вижу, чтобы какой-либо процесс удерживал эту папку.

Я сравниваю /proc/mounts до umount /tmp/mount и после umount /tmp/mount . /tmp/mount уже удален.

Я сравниваю stat /proc/mounts до umount /tmp/mount и после umount /tmp/mount . Inode также отличается, это означает, что /tmp/mount уже удален полностью.

Даже я звоню sync && echo 2 > /proc/sys/vm/drop_caches и пытаюсь сбросить кеши файлов, это все равно не работает.

Я пробую это как в Ubuntu 14.04, так и в CentOS 6.6. У них такие же результаты.

5 ответов

Одним словом, монтируем в родительский процесс. И затем размонтируйте дочерний процесс, поскольку из-за CLONE_NEWNS точка монтирования все еще существует, которая обрабатывается родительским процессом. Поэтому при вызове rmdir будет выдан код ошибки EBUSY.

Чтобы избежать вышеуказанных проблем, мы могли бы использовать общее монтирование или подчиненное устройство. Более подробную информацию можно найти в LWN 159092

По моему опыту, следующие операции в Linux являются асинхронными:

  • Закрытие файла. Сразу после возврата close() umount() может вернуть EBUSY , пока выполняет асинхронное освобождение. См. Обсуждение здесь: страница 1, стр. 2.
  • Размонтирование файловой системы. Подключенное устройство может быть занято, пока все данные не будут записаны на диск.

Даже я звоню sync && echo 2 > /proc/sys/vm/drop_caches и пытаюсь сбросить кеши файлов, это все равно не работает.

В Linux гарантировано, что sync только планирует запись грязных блоков; на самом деле может потребоваться некоторое время, прежде чем все блоки будут окончательно записаны. Команды reboot(8) и halt(8) учитывают это, засыпая на несколько секунд после вызова sync(2) .

Что касается /proc/sys/vm/drop_caches , см. здесь:

Это неразрушающая операция, которая не освободит грязные предметы.

Таким образом, сразу после вашей команды данные могут оставаться в очереди на запись, а размонтирование еще не завершено.

Обновить

Однако при асинхронном размонтировании ядро ​​будет возвращать EBUSY для операций на смонтированном устройстве , но не для точки монтирования .

Таким образом, указанные выше случаи не могли быть причиной вашей проблемы: P

PS.

На самом деле я не понимаю, почему на странице руководства указано, что sync(8) не синхронизирован в Linux. Он вызывает sync(2) , в котором говорится:

Согласно стандартной спецификации (например, POSIX.1-2001), sync() планирует запись, но может вернуться до того, как фактическая запись будет завершена. Однако начиная с версии 1.3.20 Linux действительно ждет. (Это все еще не гарантирует целостность данных: современные диски имеют большие кеши.)

Я столкнулся с такой проблемой, потому что я монтирую общую папку в виртуальной машине, и я хочу удалить каталог после размонтирования, и я просто хочу поделиться своим решением.

Источник

Linux: какой процесс вызывает «устройство занято» при выполнении umount? [закрытый]

Linux: какой процесс вызывает «устройство занято» при выполнении umount?

12 ответов

посмотреть lsof command (список открытых файлов) — он может сказать вам, какие процессы держат что открыто. Иногда это сложно, но часто что-то просто sudo lsof | grep (your device name here) может сделать это за вас.

на всякий случай. иногда случается, что вы вызываете umount из терминала, и ваш текущий каталог принадлежит смонтированной файловой системе.

вы должны использовать .

например. fuser /dev/cdrom вернет PID(ы) процесса, используя /dev/cdrom .

если вы пытаетесь размонтировать, вы можете убить процесс тезисов с помощью -k (см. man fuser ).

Читайте также:  Installing raid in linux

Проверьте устройства с открытым циклом, сопоставленные с файлом в файловой системе с помощью «losetup-a». Они не появятся ни с lsof, ни с fuser.

также проверить /etc/exports . Если вы экспортируете пути внутри точки монтирования через NFS, это даст эту ошибку при попытке размонтировать, и ничего не появится в fuser или lsof .

(as перечисляет процессы, использующие файлы на монтируемой точке монтирования. Особенно полезно для поиска того, какой процесс (ы) использует установленный USB-накопитель или CD/DVD.

lsof и fuser действительно два способа найти процесс, который держит определенный файл открытым. Если вы просто хотите, чтобы umount преуспел, вы должны изучить его-f и-l варианты.

именно поэтому существует» fuser-m /mount/point».

кстати, я не думаю, что» fuser «или» lsof » будут указывать, когда ресурс удерживается модулем ядра, хотя у меня обычно нет этой проблемы..

lsof и fuser тоже ничего мне не дали.

после процесса переименования всех возможных каталогов .старый и перезагрузка системы каждый раз после внесения изменений я нашел один конкретный каталог (относящийся к postfix), который был ответственным.

оказалось, что я когда-то сделал символическую ссылку из /var/spool/postfix на /disk2/pers/mail/postfix/varspool, чтобы минимизировать записи на диске в корневой файловой системе на основе SDCARD (Sheeva Plug).

С эта символическая ссылка, даже после остановки служб postfix и dovecot (как ps aux, так и netstat-tuanp не показали ничего связанного), я не смог отключить /disk2/pers.

когда я удалил символическую ссылку и обновил файлы конфигурации postfix и dovecot, чтобы указать непосредственно на новые dirs на /disk2/pers/, я смог успешно остановить службы и размонтировать каталог.

в следующий раз я буду более внимательно на выходе:

выше команда рекурсивно перечислит все символические ссылки в дереве каталогов (здесь, начиная с /var) и отфильтрует те имена, которые указывают на определенную целевую точку монтирования (здесь disk2).

открыть файлы

процессы с открытыми файлами являются обычные преступники. Покажите их:

есть преимущество в использовании /dev/ , а не /mountpoint : точка монтирования исчезнет после umount -l , или он может быть скрыт накладным креплением.

fuser также можно использовать, но на мой взгляд lsof имеет более полезный выход. Однако fuser полезно, когда дело доходит до убийства процессов, вызывая сцены так что вы можете получить с вашей жизнь.

список файлов на (см. пример выше):

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

после переустановки только для чтения ( mount -o remount,ro ), безопасно (r) убить все остальные процессы:

Mountpoints

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

для петлевых креплений также проверьте выход:

анонимные коды (Linux)

  • временные файлы ( open С O_TMPFILE )
  • inotify часы
  • [eventfd]
  • [eventpoll]
  • [timerfd]

это самый неуловимый тип покемонов, и появиться в lsof ‘ s как a_inode (который недокументирован в lsof man page).

они не появятся в lsof +f — /dev/ , так что вам потребуется:

для процессов убийства, содержащих анонимные индексы, см.:список текущих часов inotify (путь, PID).

если вы все еще не можете размонтировать или перемонтировать устройство после остановки всех служб и процессов с открытыми файлами, то может быть файл подкачки или раздел подкачки, сохраняя устройство занято. Это не будет отображаться с fuser или lsof . Выключите замену с помощью:

вы можете проверить заранее и показать сводку любых разделов подкачки или файлов подкачки с:

в качестве альтернативы, используя команду sudo swapoff -a , вы также можно отключить своп, остановив службу или systemd в единица. Например:

в моем случае выключение swap было необходимо, в дополнение к остановке любых служб и процессов с открытыми для записи файлами, чтобы я мог переустановить свой корневой раздел только для чтения, чтобы запустить fsck на моем корневом разделе без перезагрузки. Это было необходимо на Raspberry Pi под управлением Raspbian Jessie.

файловые системы, смонтированные в файловой системе, которую вы пытаетесь размонтировать, могут вызвать target is busy ошибка в дополнение к любым файлам, которые используются. (Например, когда вы mount -o bind /dev /mnt/yourmount/dev чтобы использовать chroot там.)

чтобы найти, какие файловые системы монтируются в файловой системе, выполните следующие действия:

mount | grep ‘/mnt/yourmount’

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

Источник

Оцените статью