Как отключить занятое устройство - PullRequest
178 голосов
/ 24 октября 2011

У меня есть несколько дисков Samba, к которым ежедневно обращаются несколько пользователей. У меня уже есть код для распознавания общих дисков (из таблицы SQL) и подключения их в специальный каталог, где все пользователи могут получить к ним доступ.

Я хочу знать, если я удаляю диск из таблицы SQL (фактически переводя его в автономный режим), каким образом или вообще существует способ размонтировать занятое устройство? До сих пор я обнаружил, что любая форма umount не работает.

Игнорирование возможности уничтожения данных - возможно ли отключить устройство, которое в данный момент читается?

Ответы [ 7 ]

358 голосов
/ 14 ноября 2013

ДА !! Существует способ немедленно отсоединить занятое устройство (даже если оно занято и не может быть принудительно размонтировано). Вы можете очистить все позже:

umount -l /PATH/OF/BUSY-DEVICE
umount -f /PATH/OF/BUSY-NFS(NETWORK-FILE-SYSTEM)

Примечание:

  1. Эти команды могут нарушить работающий процесс, привести к потере данных или повреждению открытых файлов. Программы, получающие доступ к целевым файлам DEVICE / NFS, могут выдавать ошибки ИЛИ не работать должным образом после принудительного отключения.
  2. Попробуйте выполнить эти команды, когда НЕ находятся внутри смонтированной папки / диска / устройства.
81 голосов
/ 24 октября 2011

Если возможно, давайте найдем / идентифицируем занятого процесса, уничтожим процесс, а затем размонтируем ресурс samba, чтобы минимизировать ущерб.

  • lsof | grep '<mountpoint of /dev/sda1>' (или каким бы ни было установленное устройство)

  • pkill target_process (убивает занятого по имени | kill PID | killall target_process)

  • umount /dev/sda1 (или каким бы ни было установленное устройство)

51 голосов
/ 28 апреля 2017

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

40 голосов
/ 30 июня 2014

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

Флаг -i заставляет fuser спрашивать перед убийством.

fuser -kim /address  # kill any processes accessing file
unmount /address
6 голосов
/ 20 апреля 2014

Проверка экспортируемых файловых систем NFS с помощью exportfs -v. Если найдено, удалите с помощью команды exportfs -d share: / directory. Они не отображаются в списке fuser / lsof и могут помешать успешной установке umount.

6 голосов
/ 24 октября 2011

Выезд umount2:

В Linux 2.1.116 добавлен системный вызов umount2 (), который, подобно umount (), демонтирует цель, но позволяет дополнительные флаги, контролирующие Поведение операции:

MNT_FORCE (начиная с Linux 2.1.116) Принудительное отключение, даже если он занят. (Только для NFS монтирует.) MNT_DETACH (начиная с Linux 2.4.11) Выполните отложенную размонтировку: сделать точку монтирования недоступной для новых обращений, и фактически выполнить размонтирование, когда точка монтирования перестает быть занятой. MNT_EXPIRE (начиная с Linux 2.6.8) Отметьте точку монтирования как просроченную. Если точка монтирования в настоящее время не используется, затем начальный вызов umount2 () с этим флаг завершается с ошибкой EAGAIN, но помечает точку монтирования как истекший. Точка монтирования остается устаревшей до тех пор, пока к ней нет доступа любым процессом. Второй вызов umount2 () с указанием размонтирования MNT_EXPIRE истек срок монтирования. Этот флаг не может быть указан с MNT_FORCE или MNT_DETACH. Возвращаемое значение

В случае успеха возвращается ноль. При ошибке возвращается -1, а errno - установить соответственно.

1 голос
/ 31 мая 2018

Другая альтернатива, когда что-то работает, - это редактирование /etc/fstab, добавление флага noauto и перезагрузка машины.Устройство не будет подключено, и когда вы закончите делать что-либо, снимите флажок и перезагрузите компьютер.

...