钩入linux mount / umount事件


9

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

任何帮助表示赞赏。


如何挂载文件系统?不会自动挂载事物,大概是您有一些程序/工具正在为您执行挂载。您需要确定是什么并替换或修复它。
Zoredache

在我来说,我通常使用KDE子系统(大概是海豚,不知道哪个组件负责实际mount命令)
约尔格Haubrichs

1
我写了关于用uDevHALevt处理自动挂载的答案。这些将替代KDE或GVFS子系统,但是该过程可能会给您一些有关在哪里查看的想法。听起来您想使用Dbus挂载(桌面/用户空间而不是内核级别)。
奎克吉at德

Answers:


2

如果您要尝试为调用/sbin/mountand /sbin/umount命令的人员执行此操作,那么您要做的就是为这两个程序创建一个包装程序,然后将所需的内容编程到这些包装程序中。

一个包装器程序将其替换为/sbin/mount调用real的包装器程序/sbin/mount(重命名为/sbin/mount-real/sbin/umount-real)。为防止任何人调用真实程序,请使用组权限对其进行限制,并在包装​​程序上设置SGID位。

如果您要修复mount(2)库调用,那么这很费力,并且可能很困难,并且不建议这样做,因为这可能会导致内部系统处理出现问题,尤其是在启动和关闭过程中。

即使使用包装程序,您可能也必须彻底测试它,以避免系统干扰并进行适当的调整。


如果有多个程序会这样做,则非常糟糕的建议和维护恐怖。不要以这种方式开始。
Lothar

0

您可能可以使用inotify内核挂钩,尽管捕获一个预卸载事件可能真的很棘手,因为我不确定在卸载目录之前是否发送了inotify事件。


2
inotify会告诉您已经创建了一个目录(例如在/media或下/mnt),但是如果目录中已挂载了文件系统,则不会。
Craig McQueen 2015年

0

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

Udev并不是最好的解决方案,因为它只会告诉您设备是否已连接。它没有说设备是否已经实际安装。有时这可能会奏效,但这是一个棘手的解决方案,在某些时候它会中断,您将无法正常工作。


在大多数情况下,“ hacky”通常就足够了。现实世界是由“ hacky”解决方案运行的。如果您不知道,那您就没有使用计算机系统的实际经验。请保存您的意见,并坚持事实。谢谢。
natxo asenjo

1
@natxoasenjo,这就是为什么会有好的开发人员和坏的开发人员的原因。
Pithikos 2015年

如果您有一些现实世界的经验,请回来。您建议编写一些脚本/程序来轮询文件,并且您认为这比使用经过良好测试的api作为udev更好的主意。谁是不良的开发者?;-)
natxo asenjo

顺便说一句,编写udev规则并不能使您成为开发人员,最多也不能成为计算机的系统管理员。
natxo asenjo 2015年

1
@natxoasenjo好吧,如果您看不到由于漏洞百出的解决方案而导致“现实世界”程序始终无法正常运行,那么您要么是盲人,要么是没有“现实世界经验”。Udev可以正常工作,但与安装和卸载无关。并且,请不要再将其变成关于谁是程序员的论坛话题了。不会帮助任何人。
Pithikos

0

您可以编写udev规则来做到这一点。我已经使用像这样的东西自动备份到USB驱动器。好玩的东西。


1
udev似乎没有安装/卸载事件。仅在您连接/断开设备时触发。和您的链接不起作用..
Pithikos 2014年

那是4年前回答的。我不对该网站负责。但是您可以看一下archive.org ...,是的,它仍然存在,发现它会留给读者练习。关于您对udev的评论,udev允许您编写规则并在规则匹配时执行操作。这就是您所需要的。
natxo asenjo 2014年

2
关键是要帮助其他人在问题上绊倒,而不是要点或其他自我提升。现在,即使用户遇到了所有麻烦,那里的解决方案也已过时。因此,您浪费别人的时间是没有好处的(除了您拥有的1-2票)。
Pithikos 2014年

2
@natxoasenjo其他用户是正确的,这正是我们鼓励答案引用或解释链接资源中足够信息的原因,如果链接消失,答案将独立存在。一个不错的答案实际上是显示了一个示例,说明如何创建udev规则以在挂载/卸载之前/之后运行脚本。
nhinkle

1
@natxoasenjo我访问了该帖子,因为您的评论被不相关的用户标记为粗鲁或不礼貌。Stack Exchange对答案有一定的期望,其中之一就是它们所包含的不仅仅是链接到外部资源的链接。您的答案不符合该要求。您对什么是“完全好的”有意见,这与Stack Exchange对一个好的答案的期望不符。请花一些时间阅读“ 如何回答”
nhinkle
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.