How do I find on which physical device a folder is located?
df(1)command will tell you the device that a file or directory is on:
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
# df /usr Filesystem 1K-blocks Used Available Use% Mounted on /dev/mapper/orthanc-usr 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
usrin the volume group
/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 --detailor look in
# 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/md2is on the
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.
OK, I did that and got /dev/mapper/fun-root as my Filesystem. Now what? (My computer's name is 'fun')
In modern distributions of Ubuntu there's an additional layer (device mapper) between your file/directory and the device.
/dev/mappercontains symbolic links pointing to the actual special devices. For example, trying on the current directory:
$ df . | grep '^/' | cut -d' ' -f1 /dev/mapper/kubuntu--vg-root $ 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:
realpathis part of GNU coreutils.
Nice, but when is the full path useful? `df` will still display the `mapper` path.