Подключитесь к событию linux mount / umount


9

Есть ли способ предоставить сценарии после монтирования и перед монтированием в Linux?
Я пытаюсь сделать некоторые сценарии на носителе при монтировании и перед монтированием (например, для синхронизации).

Любая помощь приветствуется.


Как монтируется файловая система? Вещи не монтируются автоматически, возможно, у вас есть программа / инструмент, который выполняет монтирование для вас. Вы должны определить, что это такое, заменить его или исправить.
Зоредаче

В моем случае я обычно использую подсистему KDE (предположительно это Dolphin, я не знаю, какой компонент отвечает за фактическую команду монтирования)
Йорг Хаубрихс

1
я писал об обработке автомонтирования с помощью uDev или HALevt в ответах на другой вопрос. это будет замена подсистемы KDE или GVFS, но процедура может дать вам некоторые идеи о том, где искать. Похоже, вы хотите подключиться к монтированию Dbus (рабочий стол / пространство пользователя, а не уровень ядра).
шарлатан-кихот

Ответы:


2

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

Программа-обертка заменяет собой /sbin/mountпрограмму-обертку, которая вызывает реальное /sbin/mount(переименованное во что-то вроде /sbin/mount-realили /sbin/umount-real). Чтобы никто не мог вызвать настоящую программу, используйте групповые разрешения, чтобы ограничить ее и установить бит SGID для программ-оболочек.

Если вы хотите исправить mount(2)библиотечный вызов, то это трудоемко и, вероятно, сложно, а возможно, и не рекомендуется, так как это может вызвать проблемы для внутренней обработки системы, особенно во время запуска и завершения работы.

Даже с программой-оберткой вам, вероятно, придется тщательно протестировать ее, чтобы избежать вмешательства системы и внести соответствующие изменения.


Очень плохой совет и ужас обслуживания, если несколько программ сделают это. Не начинай так.
Лотар

0

Вы, вероятно, можете использовать ловушку ядра inotify , хотя событие pre-unmount может быть действительно сложно поймать, так как я не уверен, есть ли событие inotify, отправленное перед размонтированием каталога.


2
inotify сообщит вам, что каталог был создан (например, в /mediaили /mnt), но не если файловая система была смонтирована в этом каталоге.
Крейг МакКуин

0

Самое простое решение, которое, вероятно, будет работать вечно, это опрос /etc/mtabили /proc/mounts. После внесения изменений в этот файл это означает, что что-то было смонтировано или размонтировано. Затем вы должны проверить там устройство, которое вы хотите.

Udev - не лучшее решение, так как оно просто сообщает вам, подключено ли устройство. Он не говорит, было ли устройство фактически установлено или нет. Иногда это может сработать, но это хакерское решение, которое в какой-то момент сломается, и вы будете рвать на себе волосы.


"hacky" обычно достаточно хорош для большинства ситуаций. Реальный мир управляется «хакерскими» решениями. Если вы этого не знаете, то у вас нет реального опыта использования компьютерных систем. Пожалуйста, сохраните свое мнение при себе и придерживайтесь фактов. Спасибо.
natxo asenjo

1
@natxoasenjo, поэтому есть хорошие разработчики и плохие разработчики.
Питикос

пожалуйста, возвращайтесь, когда у вас есть опыт реального мира. Вы предлагаете написать скрипт / программу для опроса файлов, и вы думаете, что это лучшая идея, чем использовать хорошо протестированный API в качестве udev. Кто плохой разработчик? ;-)
natxo asenjo

и, кстати, написание правил udev не делает вас разработчиком, в большинстве случаев системным администратором вашего компьютера.
natxo asenjo

1
@natxoasenjo хорошо, если вы не видите, что программы «реального мира» постоянно ломаются из-за хакерских решений, то вы либо слепы, либо не имеете «опыта реального мира». Udev работает нормально, но не имеет ничего общего с монтированием и размонтированием. И, пожалуйста, перестаньте превращать это в ветку форума о том, кто программист. Никому не помогает
Питикос,

0

Вы можете написать правило udev, чтобы сделать это. Я использовал что-то вроде этого для автоматического резервного копирования материала на USB-диск. Прикольные вещи.


1
У udev, похоже, нет события для mount / unmount. Он срабатывает только при подключении / отключении устройства. И ваша ссылка не работает ..
Pithikos

На это ответили 4 года назад. Я не несу ответственности за этот сайт. Но вы можете взглянуть на archive.org ... да, он все еще там, и вы найдете, что он останется в качестве упражнения для читателя. Что касается вашего комментария об udev, udev позволяет вам писать правила и выполнять действия, когда они совпадают. Это все, что вам нужно.
Natxo Asenjo

2
Дело в том, чтобы помочь другим людям, спотыкающимся в этом вопросе, а не в пунктах или других способностях эго. Теперь, даже если пользователь проходит через все эти проблемы, решение там устарело. Таким образом, вы тратите время людей на бесполезную выгоду (кроме тех 1-2 голосов, которые у вас есть)
Питикос,

2
@natxoasenjo, остальные пользователи правы, и именно поэтому мы рекомендуем ответам цитировать или перефразировать достаточно информации из связанных ресурсов, чтобы ответ оставался в одиночестве, если ссылки умирают. Хороший ответ здесь на самом деле показал бы пример того, как создать правило udev для запуска скрипта до / после монтирования / размонтирования.
nhinkle

1
@natxoasenjo Я посетил пост, потому что ваш комментарий был помечен несвязанным пользователем как грубый или невежливый. Stack Exchange имеет определенные ожидания для ответов, один из которых заключается в том, что они должны содержать больше, чем ссылку на внешний источник. Ваш ответ не соответствует этому требованию. У вас есть мнение о том, что «отлично», что не соответствует ожиданиям Stack Exchange для хорошего ответа. Пожалуйста, найдите время, чтобы прочитать Как ответить .
nhinkle
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.