Как размонтировать файловую систему в Linux, не выясняя, почему она занята?
Я хочу сделать это в одной команде. Он должен обрабатывать приложения, использующие эту файловую систему, submounts, container ( lxc-execute -n qqq <command>
) и все остальное.
Просто «демонтировать. Нет возражений!». Специальные патчи ядра или конфигурация разрешены.
Файловая система должна быть действительно размонтирована, поэтому umount -l
, конечно, это не вариант. Например, для cryptsetup remove
(Кстати, как принудительно cryptsetup remove
? Обновить:, cryptsetup luksSuspend
но вы не сможете, cryptsetup luksResume
если это не УДАЧИ).
Как сделать все файловые дескрипторы в этой файловой системе недействительными?
Единственный надежный способ, который я знаю, - это монтировать файловую систему через FUSE (обычно нет проблем с размонтированием FUSE, потому что я могу просто убить ее процесс).
PS Уже Паспарту fuser
, lsof | grep
, cat /proc/*/mounts | grep
и устаревший нерабочий «badfs патч».
umount --force
илиumount -f
(эквивалент)Если это не помогло, используйте:
umount --lazy
илиumount --l
(эквивалент)Опция « lazy » теперь «отсоединит файловую систему от иерархии файловой системы и очистит все ссылки на файловую систему, как только она больше не будет занята (требуется ядро 2.4.11 или новее).» Это может вызвать нестабильность, но это получит вещь размонтированной. Любые программы, использующие диск, могут аварийно завершить работу.
источник
--force
не работает. И--lazy
в действительности это не размонтирование - оно не освобождает LVM, loopback или cryptsetup.может использоваться для принудительного размонтирования, когда файловая система занята.
источник
umount2: Device or resource busy
единственный частичный успех был, когда я экспериментировал с патчем badfs.Боюсь, нет способа сделать это по одной команде.
umount -f
на самом деле не работает так гладко, как можно было бы надеяться. Если под каким-либо другим монтированием есть дополнительные монтирования, вы не можете просто размонтировать эти монтировки в произвольном порядке и надеяться, что они отключатся.Но не беспокойтесь, есть один способ сделать все это одной командой: создать скрипт shell / Perl, который убивает требуемые процессы, размонтирует контейнеры, перемонтирует и, наконец, размонтирует другое монтирование. Тогда вы можете просто вызвать свой скрипт по требованию. Поначалу это больше для вас, но после того, как вы запустите сценарий, все становится детской игрой. :)
источник