Отсоединяемое устройство, например, eSATA, USB-накопитель может быть внезапно извлечено (просто потянув за вилку).
Если в разделе есть дескрипторы открытых файлов, то эти разделы не будут размонтированы, т. Е. Команда Linux umount
не будет работать, даже если диск физически отсоединен.
Если при размонтировании происходит сбой, то при повторном подключении устройства mount
также не будет выполнено. Таким образом, вы должны выяснить, какие процессы используют диск и уничтожить их или закрыть все дескрипторы. Если вы не можете сделать это, вам придется перезагрузить компьютер, чтобы подключить диск. И я определенно не могу убить процесс, используя его.
Я не вижу опции "принудительное отключение", есть опция -f
, но она только для NFS.
Это звучит очень странно, разве Linux не подходит для этого сценария, когда пользователь просто дергает диск? Кто-нибудь знает, как изящно справиться с этим сценарием в Linux?
Есть ли способ узнать, какие файловые дескрипторы открыты на определенном разделе / устройстве или выборочно очистить и закрыть все файловые дескрипторы только для определенного устройства?
Примечание. Команда lsof
недоступна во встроенном Linux, который я использую (busybox).
"fuser" недоступен в моем встроенном Linux.
Я попробовал ленивый umount -l. Тем не менее, это не похоже на последовательную работу. Скажем, например, я держу дескриптор файла открытым (с "tail -f" на некотором файле на устройстве). Затем я отсоединяю диск и затем делаю «umount -l», и он монтируется. А затем я снова присоединяю диск и пытаюсь снова смонтировать его в той же точке монтирования, пока хвост все еще работает. Это не всегда работает. Иногда это удается, а иногда нет. Это заставляет меня чувствовать себя неловко, используя ленивую опцию, что если она оставляет файловую систему в несогласованном состоянии. А также не уверен, что этот ленивый вариант должен был использоваться для таких сценариев.
Я не могу убить процесс, у которого открыты дескрипторы файлов.
Кажется, если я смонтировал устройство на скажем /mnt /abc и если я отключил диск и затем снова подключил, Linux, кажется, повторно подключил файловую систему устройства к той же точке монтирования "/mnt /abc", без каких-либо действий. размонтировать или смонтировать. И затем те же самые старые дескрипторы открытого файла, кажется, начинают работать после присоединения (по крайней мере, для операции чтения файла). Это моё наблюдение. Я не уверен, что это ожидаемое поведение .. Однако, это также, кажется, не работает последовательно.
У меня был дескриптор открытого файла для чтения ("tail -f"), который я оставил открытым, затем я отсоединил и заново подключил, а затем изменил файл, который был привязан, и увидел, что вывод "tail -f" обновляется с изменениями. Однако, если я пытаюсь изменить файл после того, как устройство исчезло (оно выдает ошибку, как и ожидалось), и затем я снова присоединяюсь, файловая система устройства не будет правильно подключена к той же точке монтирования. В случае записи файла (пока устройства там не было), оно, похоже, не работает.
Есть ли какое-либо стандартное / согласованное поведение, которому следует Linux, когда диск внезапно извлекается без закрытия всех ручек и правильного размонтирования всех разделов?