Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How could I detect when a directory is mounted with inotify?

I'm using Linux Inotify to detect FS events on my program.

How could I be notified when a device is mounted on a monitored directory?

like image 900
Ricardo Avatar asked Jul 11 '09 07:07

Ricardo


3 Answers

I don't think you can do it with inotify. Here is the method though:

  1. Read uevents from kernel via a Netlink socket and filter out those where "ACTION" is not "mount".
  2. Read and parse "/proc/mounts" when you get an event with a "mount" action.
  3. Find a record for a mount point with device that was just mounted and filter it out if it's not the directory you are watching.
like image 60
Alex B Avatar answered Oct 18 '22 11:10

Alex B


EDIT: Update to be less than 5 years obsolete

If you're on anything but the most ancient of systems, libudev is what you want for the first step.

If you're on something from this decade, udisks will do all of this for you, too. You'd need to watch the org.Freedesktop.DBus.ObjectManager interface on /org/freedesktop/UDisks2 to see when new filesystems turn up.

like image 4
RAOF Avatar answered Oct 18 '22 10:10

RAOF


On modern Linux systems /etc/mtab often points to /proc/self/mounts:

$ ls -l /etc/mtab lrwxrwxrwx 1 root root 12 Sep 5 2013 /etc/mtab -> /proc/mounts $ ls -l /proc/mounts lrwxrwxrwx 1 root root 11 Jul 10 14:56 /proc/mounts -> self/mounts

proc(5) manpage says that you don't really need to use inotify for this file, it is pollable:

Since kernel version 2.6.15, this file is pollable: after opening the file for reading, a change in this file (i.e., a filesystem mount or unmount) causes select(2) to mark the file descriptor as readable, and poll(2) and epoll_wait(2) mark the file as having an error condition.

Was wondered why inotify not works on /etc/mtab and found this manpage.

like image 2
JIghtuse Avatar answered Oct 18 '22 12:10

JIghtuse