Georg Schölly Georg Schölly - 4 months ago 12
Linux Question

How to find the mountpoint a file resides on?

For example, I've got a file with the following path:

/media/my_mountpoint/path/to/file.txt


I've got the whole path and want to get:

/media/my_mountpoint


How can I do this? Preferably in Python and without using external libraries / tools. (Both are not a requirement.)

Answer

You may either call the mount command and parse its output to find the longest common prefix with your path, or use the stat system call to get the device a file resides on and go up the tree until you get to a different device.

In Python, stat may be used as follows (untested and may have to be extended to handle symlinks and exotic stuff like union mounts):

def find_mount_point(path):
    path = os.path.abspath(path)
    orig_dev = os.stat(path).st_dev

    while path != '/':
        dir = os.path.dirname(path)
        if os.stat(dir).st_dev != orig_dev:
            # we crossed the device border
            break
        path = dir
    return path

Edit: I didn't know about os.path.ismount until just now. This simplifies things greatly.

def find_mount_point(path):
    path = os.path.abspath(path)
    while not os.path.ismount(path):
        path = os.path.dirname(path)
    return path