У меня есть несколько дисков Samba, к которым ежедневно обращаются несколько пользователей. У меня уже есть код для распознавания общих дисков (из таблицы SQL) и подключения их в специальный каталог, где все пользователи могут получить к ним доступ.
Я хочу знать, если я удаляю диск из своей таблицы SQL (фактически переводя его в автономный режим), каким образом или вообще существует способ размонтировать занятое устройство? До сих пор я обнаружил, что любая форма umount
не работает.
Не обращая внимания на возможность уничтожения данных - возможно ли отключить устройство, которое в данный момент читается?
cd
подключили dir, затем вы стали пользователем root или снова вошли в систему, а другая оболочка оказалась в ловушке. Делайexit
на всех снарядах.Ответы:
ДА!! Существует способ немедленно отсоединить занятое устройство (даже если оно занято и не может быть принудительно размонтировано). Вы можете очистить все позже:
НОТА:
источник
-l
здесь строчная букваL
(для «ленивого размонтирования»). (См. Этот связанный ответ .)-l
/--lazy
не повреждает открытые файлы, но в Linux кажется, что вы не можете знать, когда устройство фактически отключено и может быть удаленоЕсли возможно, давайте найдем / идентифицируем занятый процесс, уничтожим процесс, а затем размонтируем общий ресурс samba, чтобы минимизировать ущерб.
lsof | grep '<mountpoint of /dev/sda1>'
(или каким бы ни было установленное устройство)pkill target_process
(убивает занятого по имени |kill PID
|killall target_process
)umount /dev/sda1
(или каким бы ни было установленное устройство)источник
lsof
:# opkg install lsof
Убедитесь, что вы все еще не подключены к устройству, когда пытаетесь подключиться.
источник
umount
.Попробуйте выполнить следующее, но перед запуском отметьте, что
-k
флаг уничтожит все запущенные процессы, если устройство будет занято.В
-i
флаг маркиfuser
спросить , прежде чем убить.источник
lsof | grep '/dev/<my-device>
ничего не вернул, но это прекрасно работает! Может также предложить,fuser -m /dev/<my-device>
если вы хотите узнать процесс, прежде чем убить его.Избегайте
umount -l
На момент написания, голос с наибольшим количеством голосов рекомендует использовать
umount -l
.umount -l
опасно или в лучшем случае небезопасно . В итоге:Работа вокруг / альтернатива
Полезным поведением
umount -l
является скрытие файловой системы от доступа по абсолютным путям, что сводит к минимуму дальнейшее использование точки монтирования.Такое же поведение может быть достигнуто путем монтирования пустого каталога с разрешениями
000
на размонтирование каталога.Тогда любой новый доступ к именам файлов в нижеприведенной точке монтирования попадет во вновь наложенный каталог с нулевыми разрешениями - тем самым будут предотвращены новые блокирующие устройства для размонтирования.
Сначала попытайтесь
remount,ro
Основное размонтированное достижение, которое нужно разблокировать, - это перемонтирование только для чтения. Когда вы получаете
remount,ro
значок, вы знаете, что:mount -o remount,ro /dev/device
гарантированно потерпит неудачу, если есть файлы, открытые для записи , поэтому попробуйте это прямо. Вы можете чувствовать себя счастливчиком, панк!Если вам не повезло, сосредоточьтесь только на процессах с файлами, открытыми для записи :
После этого вы сможете перемонтировать устройство только для чтения и обеспечить согласованное состояние.
Если вы не можете перемонтировать только для чтения на этом этапе, исследуйте некоторые другие возможные причины, перечисленные здесь .
Разблокировано достижение повторного монтирования только для чтения 🔓☑
Поздравляем, ваши данные на точке монтирования теперь согласованы и защищены от записи в будущем.
Почему
fuser
уступаетlsof
Почему бы не использовать использование
fuser
раньше? Ну, у вас может быть, но онfuser
работает с каталогом , а не с устройством , поэтому, если вы хотите удалить точку монтирования из пространства имен файлов и по-прежнему использоватьfuser
, вам необходимо:mount -o bind /media/hdd /mnt
другим местоположениемВот как:
Вы бы тогда имели:
fuser
.Это более запутанный [1] , но позволяет использовать:
который в интерактивном режиме попросит убить процессы с файлами, открытыми для записи. Конечно, вы могли бы сделать это, вообще не скрывая точку монтирования, но все вышеперечисленные подсказки
umount -l
, без каких-либо опасностей.В
-w
коммутаторе ограничивает для написания процессов, и-i
является интерактивным, поэтому после того, как только для чтения перемонтирования, если вы это спешкой вы могли бы использовать:убить все остальные процессы с файлами, открытыми под точкой монтирования.
Надеемся, что в этот момент вы можете размонтировать устройство. (Вам нужно будет
umount
дважды запустить точку монтирования, если вы установили привязку к000
каталогу mode сверху.)Или используйте:
в интерактивном режиме уничтожить оставшиеся процессы только для чтения, блокирующие размонтирование.
Черт возьми, я все еще получаю
target is busy
!Открытые файлы - не единственный размонтируемый блокировщик. Смотрите здесь и здесь о других причинах и способах их устранения.
Даже если у вас есть скрывающийся гремлин, который мешает вам полностью размонтировать устройство, вы, по крайней мере, получили свою файловую систему в согласованном состоянии.
Затем вы можете использовать
lsof +f -- /dev/device
список всех процессов с открытыми файлами на устройстве, содержащем файловую систему, а затем уничтожить их.[1] Это менее замысловато для использования
mount --move
, но это требует,mount --make-private /parent-mount-point
что имеет последствия . По сути, если точка монтирования монтируется под/
файловой системой, вы бы хотели этого избежать.источник
--lazy
это так опасно, почему наumount
странице руководства не так много предупреждений ? Все это говорит, « Ленивый размонтировать Detach файловую систему из файла иерархии теперь, и очистить все ссылки на эту файловую систему , как только он не занят больше.. »Проверьте экспортированные файловые системы NFS с помощью exportfs -v. Если найдено, удалите с помощью команды exportfs -d share: / directory. Они не отображаются в списке fuser / lsof и могут помешать успешному выполнению umount.
источник
Проверьте
umount2
:источник
Кто-то упоминал, что если вы используете терминал и ваш текущий каталог находится внутри пути, который вы хотите размонтировать, вы получите ошибку.
В качестве дополнения, в этом случае, вы
lsof | grep path-to-be-unmounted
должны иметь вывод ниже:источник
Другая альтернатива, когда что-то работает, - это редактирование
/etc/fstab
, добавлениеnoauto
флага и перезагрузка компьютера. Устройство не будет подключено, и когда вы закончите делать что-либо, снимите флажок и перезагрузите компьютер снова.источник
Ниша Ответ:
Если у вас есть пул zfs на этом устройстве, по крайней мере, если это пул на основе файлов,
lsof
не будет отображаться использование. Но вы можете просто запуститьа затем размонтировать.
источник