/etc/mtab vs. /proc/mounts

John Hendrikx hjohn at xs4all.nl
Mon Jan 31 23:50:15 PST 2011


David M. Lloyd wrote:
> On 01/31/2011 02:03 PM, Alan Bateman wrote:
>>
>> I think I need help to (re)understand the difference between /etc/mtab
>> and /proc/mounts on Linux.
>>
>> On Linux, our getFileStores() is implemented to essentially enumerate
>> /etc/mtab. That should give a similar list to what df(1) prints although
>> the filtering may be slightly different. On the other hand the
>> getFileStore method to get the FileStore for where a file is located
>> uses /proc/mounts to find the mount point (folks on this list may recall
>> the reasons why we switched to using /proc [1]). Using both leads to at
>> least one reported anomaly where it has been observed that getFileStore
>> returns a FileStore representing the root file system with both a name
>> and type of rootfs but df -T (and getFileStores) report something
>> different (/dev/sda1 and ext4 on one system I tried). I'm trying to
>> figure if this code should be changed and what the right answer is for
>> this case. Any suggestions?
>
> I think you'll find that /proc/mounts returns *both* the rootfs and 
> the real filesystem mounted atop it (in other words, the mount point 
> can be non-unique).
>
> The rootfs filesystem type is used as an early bootstrap phase in many 
> distributions (it replaces the older initramfs IIRC).
>
> That said - /etc/mtab will give you the software's idea of what the 
> right mounts are.  /proc/mounts will give you *everything* that is 
> currently mounted, even if multiple filesystems are mounted in the 
> same spot.
Not sure what you mean by that, but if I mount two ISO images on the 
same spot (say /iso-image), both of the mounts show up in /etc/mtab, 
/proc/mounts and in df, even though only one is accessible.  See here:

# cat /etc/mtab
(...)
/temp/debian.iso /iso-image iso9660 rw,loop=/dev/loop1 0 0
/temp/ubuntu.iso /iso-image iso9660 rw,loop=/dev/loop2 0 0

# cat /proc/mounts
(...)
/dev/loop1 /iso-image iso9660 ro,relatime 0 0
/dev/loop2 /iso-image iso9660 ro,relatime 0 0

# df
Filesystem           1K-blocks      Used Available Use% Mounted on
(...)
/temp/debian.iso       1527898   1527898         0 100% /iso-image
/temp/ubuntu.iso       1527898   1527898         0 100% /iso-image

Note that only the last one mounted is accessible.

--John


More information about the nio-dev mailing list