Enganche en el evento de montaje / montaje de Linux

9

¿Hay alguna manera de proporcionar scripts posteriores al montaje y al desmontaje en Linux?
Estoy tratando de hacer algunos scripts en los medios de almacenamiento cuando están montados y antes de desmontarlos (por ejemplo, para sincronizarlos).

Cualquier ayuda apreciada.

Jörg Haubrichs
fuente
¿Cómo se monta el sistema de archivos? Las cosas no se montan automáticamente, presumiblemente tiene algún programa / herramienta que está realizando el montaje por usted. Debe determinar qué es eso y reemplazarlo o arreglarlo.
Zoredache
En mi caso, normalmente uso el subsistema KDE (presumiblemente eso es Dolphin, no sé qué componente es responsable del comando de montaje real)
Jörg Haubrichs
1
Escribí sobre el manejo de montajes automáticos con uDev o con HALevt en respuestas a otra pregunta. esos serían reemplazos para el subsistema KDE o GVFS, pero el procedimiento podría darle algunas ideas sobre dónde buscar. parece que quiere aprovechar los montajes Dbus (escritorio / espacio de usuario en lugar de nivel de kernel).
Quack quijote

Respuestas:

2

Si está intentando hacer esto para las personas que invocan el comando /sbin/mounty /sbin/umount, todo lo que tendría que hacer es crear un programa envoltorio para ambos y programar lo que desee en estos programas envolventes.

Un programa contenedor que se reemplaza /sbin/mountpor el programa contenedor que llama al real /sbin/mount(renombrado a algo como /sbin/mount-realo /sbin/umount-real). Para evitar que alguien llame al programa real, use permisos de grupo para restringirlo y establezca el bit SGID en los programas de envoltura.

Si está buscando arreglar la mount(2)llamada a la biblioteca, bueno, eso es un esfuerzo y probablemente difícil y probablemente no aconsejable, ya que esto podría causar problemas para el procesamiento de los sistemas internos, especialmente durante el inicio y el apagado.

Incluso con un programa envoltorio, probablemente tenga que probarlo a fondo para evitar interferencias en el sistema y hacer los ajustes adecuados.

mdpc
fuente
Muy mal consejo y un horror de mantenimiento si múltiples programas harían esto. No empieces de esta manera.
Lothar
0

Probablemente pueda usar el enlace de kernel inotify , aunque un evento previo al desmontaje puede ser realmente difícil de detectar, ya que no estoy seguro de si hay un evento inotify enviado antes de que se desmonte el directorio.

d34dh0r53
fuente
2
inotify le dirá que se ha creado un directorio (por ejemplo, debajo /mediao /mnt), pero no si se ha montado un sistema de archivos en ese directorio.
Craig McQueen
0

La solución más simple que probablemente funcionará para siempre es sondear el /etc/mtabo /proc/mounts. Una vez que se realiza un cambio en ese archivo, significa que algo se ha montado o desmontado. Luego, debe verificar allí el dispositivo que desea.

Udev no es la mejor solución, ya que solo te dice si hay un dispositivo conectado. No dice si el dispositivo realmente se ha montado o no. Esto puede funcionar a veces, pero es una solución extravagante que en algún momento se romperá y te arrancarás el pelo.

Pithikos
fuente
"hacky" suele ser lo suficientemente bueno para la mayoría de las situaciones. El mundo real está dirigido por soluciones "hacky". Si no lo sabe, no tiene experiencia en el mundo real utilizando sistemas informáticos. Por favor guarde sus opiniones para usted mismo y manténgase en los hechos. Gracias.
natxo asenjo
1
@natxoasenjo por eso hay buenos desarrolladores y malos desarrolladores.
Pithikos
por favor regrese cuando tenga experiencia en el mundo real. Lo que propone es escribir un script / programa para sondear archivos y cree que es una mejor idea que usar una API bien probada como udev. ¿Quién es el mal desarrollador? ;-)
natxo asenjo
y, por cierto, escribir reglas de udev no te convierte en desarrollador, como mucho un administrador de sistemas de tu computadora.
natxo asenjo
1
@natxoasenjo, bueno, si no ves que los programas del "mundo real" se rompen todo el tiempo debido a soluciones piratas, entonces eres ciego o no tienes "experiencia en el mundo real". Udev funciona bien pero no tiene nada que ver con montar y desmontar. Y deje de convertir esto en un hilo del foro sobre quién es un programador. No ayuda a nadie.
Pithikos
0

podrías escribir una regla de udev para hacer eso. He usado algo como esto para hacer una copia de seguridad automática de las cosas en una unidad usb. Cosas divertidas.

natxo asenjo
fuente
1
Sin embargo, udev parece no tener un evento para montar / desmontar. Se dispara justo cuando conecta / desconecta un dispositivo. Y tu enlace no funciona ..
Pithikos
eso fue respondido hace 4 años. No soy responsable de ese sitio. Pero podría echar un vistazo a archive.org ... sí, todavía está allí, y lo encontrará como un ejercicio para el lector. En cuanto a su comentario sobre udev, udev le permite escribir reglas y ejecutar acciones cuando coinciden. Es todo lo que necesitas.
natxo asenjo
2
el punto es ayudar a otras personas a tropezar con el tema, no se trata de puntos u otros aumentos del ego. Ahora, incluso si un usuario pasa por todos esos problemas, la solución allí está desactualizada. Entonces está desperdiciando el tiempo de la gente sin ningún beneficio (excepto los 1-2 votos positivos que tiene).
Pithikos
2
@natxoasenjo los otros usuarios están en lo correcto, y esta es exactamente la razón por la cual alentamos las respuestas a citar o parafrasear suficiente información de los recursos vinculados para que la respuesta se mantenga sola si los enlaces desaparecen. Una buena respuesta aquí habría mostrado un ejemplo de cómo crear una regla udev para ejecutar un script antes / después de montar / desmontar.
nhinkle
1
@natxoasenjo Visité la publicación porque su comentario fue marcado por un usuario no relacionado como grosero o descortés. Stack Exchange tiene ciertas expectativas para las respuestas, una de las cuales es que deben contener más que un enlace a una fuente externa. Su respuesta no cumple con ese requisito. Usted tiene una opinión de lo que está "perfectamente bien" que no coincide con las expectativas de Stack Exchange para una buena respuesta. Tómese un tiempo para leer Cómo responder .
nhinkle