LINUX.ORG.RU
ФорумAdmin

Как реально отмонтировать занятую фс без поврежния (не lazy unmount)?

 , , ,


0

2

Что хочется: отмонтировать ФС даже в случае, если к ней имеют доступ приложения или ядро.
Многие мне сейчас ткнут на необходимость юзать скрипт, который смотрить на lsof, убивает процессы, после чего ФС можно отмонтировать. Но не всё так просто: из-за losetup дескриптор в VFS может открыть само ядро. Его уже так просто не убъёшь. Плюс бывают разные баги.
Как вариант: можно юзать fsfreeze: сделал fsfreeze нужной ФС, она синхронизировалась, подожал 10 секунд окончания сброса блочных кэшей, после этого через SCSI-подсистему форсированно отключаешь блочное устройство от ведра.
Но это чревато подвисанием ведра в ряде случаев.

Есть ли нормальные способы?

Из того, что у меня сейчас получилось сделать: нужны две машины (можно использовать виртуализацию): одна будет NFS-клиентом с приложениями, другая NFS-сервером с ФС.
Работает костыль так: 1(Приложения->VFS->NFS-клиент)->сеть->2(NFS-сервер->VFS->EXT4). В такой ситуации можно «потушить» NFS-сервер, после чего 2VFS освободиться и можно будет отмонтировать EXT4. Замечен интересный факт: 1Прилоежния повиснут на IO, однако продолжать работать после запуска NFS-сервера и автоматического переподключения NFS-клиента. Причём я пробовать прерывать на половине копирования файла в mc, так всё потом докопировалось и хэши сошлись.

По смутным воспоминаниям обсуждения не помню где - tap'иться ко всем процессам и закрывать все открытые файлы (по желанию — только на отмонтируемой ФС). Что с ядерными — не помню совсем, скорее всего, никак без спец. обрабоки ядра.

berrywizard ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.