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


13

Как размонтировать файловую систему в 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 патч».

Ответы:


3

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

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

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


Клавиша Shift не нужна, просто Alt + SysRq + клавиша. Еще одна вещь, о которой стоит упомянуть (особенно для пользователей ноутбуков): вы можете нажать Alt, нажать и отпустить SysRq, затем нажать и отпустить букву / цифру и, наконец, отпустить Alt. Что наиболее важно, это перемонтирует все файловые системы как доступные только для чтения, так что перед принудительной перезагрузкой это последний шаг, а не общий способ перемонтирования файловых систем только для чтения.
Жиль "ТАК - перестань быть злым"

@ Жиль: спасибо за подсказку о клавише Shift. Я исправил свои инструкции.
Sml

1. Это только перемонтирует только для чтения. Это не то, что хотел. Например, я хочу размонтировать его и перемонтировать с помощью FUSE. 2. Плохо то, что мне нужно "-o remount, rw" корневая файловая система и другие после этого, чтобы вернуться к нормальной работе.
Ви.

3

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

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

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

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


Конечно --forceне работает. И --lazyв действительности это не размонтирование - оно не освобождает LVM, loopback или cryptsetup.
Ви.

1
umount -f

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


1
Он никогда не работал для меня: umount2: Device or resource busyединственный частичный успех был, когда я экспериментировал с патчем badfs.
Ви.

У меня было то же самое сообщение об ошибке, но оно все равно работало. Файловая система была размонтирована после umount -f
IanH

3
Попробуйте "lazy umount", umount -l. Он всегда монтируется, но может привести к нестабильной файловой системе.
Джимми Хедман

Я думаю, что комментарий Джимми к этому ответу на самом деле лучший вариант. Это правда, что «ленивое» размонтирование может вызвать нестабильность, но предполагается, что вы уже в нестабильном состоянии, если вам нужно принудительно размонтировать файловую систему. С этой целью, почему '-l' не вариант?
Deesto

@deesto, Lazy unmount не делает несвязанные блочные устройства (том LVM, контейнер LUKS, loopback) без ссылок.
Ви.

1

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

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


1
Это случаи, когда я не могу размонтировать даже вручную: 1. процессы непрерывного сна, которые не могут быть возобновлены (сбой драйверов и т. Д.); 2. сбой хранилища (при котором каждый запрос также зависает). Я хочу, чтобы эта «грязная разборка» справилась с этим.
Ви.
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.