How do I find on which physical device a folder is located?

  • Specifically: I did sudo mkdir /work, and would like to verify it indeed sits on my harddrive and not mapped to some other drive.

    How do I check where this folder is physically located?

  • The df(1) command will tell you the device that a file or directory is on:

    df /work

    The first field has the device that the file or directory is on.


    $ df /root
    Filesystem           1K-blocks      Used Available Use% Mounted on
    /dev/sda1              1043289    194300    795977  20% /

    If the device is a logical volume, you will need to determine which block device(s) the logical volume is on. For this, you can use the lvs(8) command:

    # df /usr
    Filesystem           1K-blocks      Used Available Use% Mounted on
                           8256952   4578000   3259524  59% /usr
    # lvs -o +devices /dev/mapper/orthanc-usr
      LV   VG      Attr   LSize Origin Snap%  Move Log Copy%  Convert Devices     
      usr  orthanc -wi-ao 8.00g                                       /dev/sda3(0)

    The last column tells you that the logical volume usr in the volume group orthanc (/dev/mapper/orthanc-usr) is on the device /dev/sda3. Since a volume group can span multiple physical volumes, you may find that you have multiple devices listed.

    Another type of logical block device is a md (Multiple Devices, and used to be called meta-disk I think) device, such as /dev/md2. To look at the components of a md device, you can use mdadm --detail or look in /proc/mdstat

    # df /srv
    Filesystem           1K-blocks      Used Available Use% Mounted on
    /dev/md2             956626436 199340344 757286092  21% /srv
    # mdadm --detail /dev/md2
    ...details elided...
        Number   Major   Minor   RaidDevice State
           0       8        3        0      active sync   /dev/sda3
           1       8       19        1      active sync   /dev/sdb3

    You can see that /dev/md2 is on the /dev/sda3 and /dev/sdb3 devices.

    There are other methods that block devices can be nested (fuse, loopback filesystems) that will have their own methods for determining the underlying block device, and you can even nest multiple layers so you have to work your way down. You'll have to take each case as it comes.

    +1. Interesting. I didn't know `df` was so accomodating.

    OK, I did that and got /dev/mapper/fun-root as my Filesystem. Now what? (My computer's name is 'fun')

    Then perhaps you are using LVM? `lvdisplay` or `lvs` will be your friend.

    I was so impressed with this answer that I used it as the basis for a command, "rawdev", that returns the underlying device(s) of a path or partition, even in cases where LVM and/or MD are nested. It's available on Github: .

  • For a script, you can use:

    $ df -P <pathname> | awk 'END{print $1}'

    This is POSIX compatible.

    Works most of the time, however if is in a btrfs snapshot this reports '-'.

  • In modern distributions of Ubuntu there's an additional layer (device mapper) between your file/directory and the device. /dev/mapper contains symbolic links pointing to the actual special devices. For example, trying on the current directory:

    $ df . | grep '^/' | cut -d' ' -f1
    $ ls -l /dev/mapper/kubuntu--vg-root
    lrwxrwxrwx 1 root root 7 Nov 22 18:02 /dev/mapper/kubuntu--vg-root -> ../dm-1

    So to get the full path of device programmatically, you can use:

    $ realpath $(df . | grep '^/' | cut -d' ' -f1)

    Which is my case prints:


    realpath is part of GNU coreutils.

    Nice, but when is the full path useful? `df` will still display the `mapper` path.

    @DanDascalescu fair point. It may be useful when/if you want to know the actual hardware device which is what I was looking for when hitting this question.

License under CC-BY-SA with attribution

Content dated before 6/26/2020 9:53 AM