12

Как размонтировать файловую систему в Linux, не выясняя, почему она занята?

Я хочу сделать это в одной команде. Он должен обрабатывать приложения, использующие эту файловую систему, субмонтирования, контейнеры (lxc-execute -n qqq <command>) и все остальное.

Просто "размонтировать. Нет возражений!». Специальные патчи ядра или конфигурация разрешены.

Файловая система должна быть действительно размонтирована, поэтому umount -l , безусловно, не вариант. Например, для cryptsetup remove (Кстати, как принудительно cryptsetup remove? Обновление: cryptsetup luksSuspend , но вы не сможете использовать cryptsetup luksResume если это не LUKS).

Как сделать все файловые дескрипторы в этой файловой системе недействительными?

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

PS Уже знаю крепление fuser , lsof | grep , cat /proc/*/mounts | grep и устаревший нерабочий "патч badfs".

4 ответа4

3

Используйте комбинацию клавиш Magic SysRq : Alt+SysRq+u

Обратите внимание, что вам, вероятно, следует сначала выполнить аварийную синхронизацию: Alt+SysRq+s

Также обратите внимание, что на некоторых (особенно новых) клавиатурах вы должны использовать PrtSc вместо SysRq

2

umount --force или umount -f (эквивалент)

Если это не помогло, используйте:

umount --lazy или umount --l (эквивалент)

Опция « lazy » теперь «отсоединит файловую систему от иерархии файловой системы и очистит все ссылки на файловую систему, как только она больше не будет занята. (Требуется ядро 2.4.11 или более поздняя версия.)"Это может вызвать нестабильность, но это приведет к отключению устройства. Любые программы, использующие диск, могут аварийно завершить работу.

1

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

Но не беспокойтесь, есть один способ сделать все это одной командой: создать скрипт shell/Perl, который убивает требуемые процессы, размонтирует контейнеры, перемонтирует и, наконец, размонтирует другое монтирование. Тогда вы можете просто вызвать свой скрипт по требованию. Изначально это больше для вас, но после того, как вы запустите сценарий, все станет детской игрой. :)

1
umount -f

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .