挂钩 Linux 的 mount/umount 事件

挂钩 Linux 的 mount/umount 事件

有没有办法在 Linux 中提供安装后和卸载前的脚本?
我试图在安装时和卸载之前在存储介质上执行一些脚本(例如,用于同步)。

任何帮助均感激不尽。

答案1

如果您想为调用/sbin/mount/sbin/umount命令的人们执行此操作,您所要做的就是为两者制作一个包装程序,并将您想要的内容编入这些包装程序中。

包装程序被替换/sbin/mount为调用真实程序的包装程序/sbin/mount(重命名为/sbin/mount-real/sbin/umount-real)。要防止任何人调用真实程序,请使用组权限来限制它并在包装程序上设置 SGID 位。

如果您想修复mount(2)库调用,那么这需要付出努力,而且可能很困难,而且可能不明智,因为这可能会导致内部系统处理出现问题,尤其是在启动和关闭期间。

即使使用包装程序,您也可能需要彻底测试它以避免系统干扰并做出适当的调整。

答案2

您可以使用通知内核钩子,尽管预卸载事件可能真的很难捕获,因为我不确定在目录卸载之前是否有发送的 inotify 事件。

答案3

最简单且可能永远有效的解决方案是轮询/etc/mtab/proc/mounts。一旦对该文件进行了更改,就意味着某个设备已挂载或已卸载。然后您必须在那里检查所需的设备。

Udev 并不是最好的解决方案,因为它只会告诉你设备是否已连接。它不会告诉你设备是否已实际安装。有时这可能会奏效,但这是一个不靠谱的解决方案,在某些时候会失效,让你抓狂不已。

答案4

你可以写一个 udev 规则来做到这一点。我使用过类似用于自动将内容备份到 USB 驱动器。很有趣的东西。

相关内容