On Wed, Nov 07, 2012 at 10:40:39AM +0100, Tomas M wrote:
> > So, it seems aufs allocates some 'invisible' data on the tmpfs and never
> > frees it.
> 
> That may be the xino file, which is stored on the first writable
> branch as a deleted file. 

And it probably should not be created and live forever for each deleted file, 
right?

Can I do anything about that 'xino file'?

>But then it would probably report its size on tmpfs alone as well, strange.

The blocks are reported by 'df' on the tmpfs under aufs. Not by 'df', but this 
is 
to be expected if the file is deleted.

As the file is not used in the user space, I was not able to see it with any
utility (like lsof).

When trying to make deleted files on the tmpfs (open a file, write to it,
delete, but not close; also: delete, mmap, close) no such space leak was found –
the space was recovered as soon as the file stopped being used by anything..
 
> Try to put the xino file on some other filesystem.

On a physical, ext4 file system the problem does not occur:

[root@test /tmp]# mkdir /mnt/rw
[root@test /tmp]# df /mnt/rw
Filesystem     1K-blocks  Used Available Use% Mounted on
/dev/sdb3         248895  6259    229784   3% /mnt
[root@test /tmp]# mount -t aufs  -n -o "br:/mnt/rw:/rootfs_ro/usr" none 
"/tmp/mnt"
[root@test /tmp]# df /mnt ; du -skx /mnt                                        
   
Filesystem     1K-blocks  Used Available Use% Mounted on
/dev/sdb3         248895  6268    229775   3% /mnt
99      /mnt
[root@test /tmp]# dd if=/dev/zero of=/tmp/mnt/test bs=1024 count=100 
100+0 records in
100+0 records out
102400 bytes (102 kB) copied, 0.00773374 s, 13.2 MB/s
[root@test /tmp]# df /mnt ; du -skx /mnt                             
Filesystem     1K-blocks  Used Available Use% Mounted on
/dev/sdb3         248895  6369    229674   3% /mnt
199     /mnt

One extra block used is being shown by 'df'…

[root@test /tmp]# rm /tmp/mnt/test
[root@test /tmp]# df /mnt ; du -skx /mnt 
Filesystem     1K-blocks  Used Available Use% Mounted on
/dev/sdb3         248895  6268    229775   3% /mnt
99      /mnt

…but it is freed when the file is removed.

[root@test /tmp]# dd if=/dev/zero of=/tmp/mnt/test bs=1024 count=100 
100+0 records in
100+0 records out
102400 bytes (102 kB) copied, 0.00292483 s, 35.0 MB/s
[root@test /tmp]# df /mnt ; du -skx /mnt                             
Filesystem     1K-blocks  Used Available Use% Mounted on
/dev/sdb3         248895  6369    229674   3% /mnt
199     /mnt
[root@test /tmp]# rm /tmp/mnt/test                                   
[root@test /tmp]# df /mnt ; du -skx /mnt 
Filesystem     1K-blocks  Used Available Use% Mounted on
/dev/sdb3         248895  6268    229775   3% /mnt
99      /mnt

No leak, even when the operations are repeated.

Unfortunately, I need aufs on a tmpfs – no physical writable file system may be
available on that system.

> Also try to remount the aufs like
> $ mount -o remount /tmp/mnt
> and try df again.

No change:

[root@test /tmp]# df /tmp/rw ; du -skx /tmp/rw 
Filesystem     1K-blocks  Used Available Use% Mounted on
none              252908    12    252896   1% /tmp/rw
0       /tmp/rw
[root@test /tmp]# df /tmp/rw ; du -skx /tmp/rw  
[root@test /tmp]# dd if=/dev/zero of=/tmp/mnt/test bs=1024 count=100 
100+0 records in
100+0 records out
102400 bytes (102 kB) copied, 0.00160995 s, 63.6 MB/s
[root@test /tmp]# rm /tmp/mnt/test            
[root@test /tmp]# dd if=/dev/zero of=/tmp/mnt/test bs=1024 count=100
100+0 records in
100+0 records out
102400 bytes (102 kB) copied, 0.00271015 s, 37.8 MB/s
[root@test /tmp]# rm /tmp/mnt/test
[root@test /tmp]# df /tmp/rw ; du -skx /tmp/rw
Filesystem     1K-blocks  Used Available Use% Mounted on
none              252908    20    252888   1% /tmp/rw
0       /tmp/rw
[root@test /tmp]# mount -o remount /tmp/mnt
[root@test /tmp]# df /tmp/rw ; du -skx /tmp/rw 
Filesystem     1K-blocks  Used Available Use% Mounted on
none              252908    20    252888   1% /tmp/rw
0       /tmp/rw

But unmounting and re-mounting the aufs does free the missing 8 blocks:

[root@test /tmp]# umount /tmp/mnt
[root@test /tmp]# mount -t aufs  -n -o "br:/tmp/rw:/rootfs_ro/usr" none 
"/tmp/mnt" 
[root@test /tmp]# df /tmp/rw ; du -skx /tmp/rw 
Filesystem     1K-blocks  Used Available Use% Mounted on
none              252908    12    252896   1% /tmp/rw
0       /tmp/rw

But this is not even a usable work-around, as I won't be able to unmount a file
system which is in use.

Greets,
        Jacek

------------------------------------------------------------------------------
LogMeIn Central: Instant, anywhere, Remote PC access and management.
Stay in control, update software, and manage PCs from one command center
Diagnose problems and improve visibility into emerging IT issues
Automate, monitor and manage. Do more in less time with Central
http://p.sf.net/sfu/logmein12331_d2d

Reply via email to