Hello,
I found tmpfs usage grow unexpectedly on my systems until crash when it
reaches 100%. The system use aufs to unite tmpfs and squashfs. After
long investigation I am able to reproduce it now. 4 blocks are allocated each
time a file is created via aufs (in addition to the file size), but the blocks
are never freed. This does not happen when a file is created directly on the
tmpfs.
Example session:
Creating the aufs (/rootfs_ro contains my squashfs image):
[root@test ~]# cd /tmp
[root@test /tmp]# mkdir rw
[root@test /tmp]# mkdir mnt
[root@test /tmp]# mount -t tmpfs none /tmp/rw
[root@test /tmp]# mount -t aufs -n -o "br:/tmp/rw:/rootfs_ro/usr" none
"/tmp/mnt"
Size and usage stats of the aufs:
[root@test /tmp]# df /tmp/mnt ; du -skx /tmp/mnt
Filesystem 1K-blocks Used Available Use% Mounted on
none 252908 24 252884 1% /tmp/mnt
272101 /tmp/mnt
Size and the usage stats of the tmpfs:
[root@test /tmp]# df /tmp/rw ; du -skx /tmp/rw
Filesystem 1K-blocks Used Available Use% Mounted on
none 252908 56 252852 1% /tmp/rw
0 /tmp/rw
Please note how 'df' and 'du' output does not match. I can understand
some bookkeeping data being accounted by df and not by du and I don't
care if the difference is small and does not increase…
Now, let's create a file on the aufs:
[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.00262438 s, 39.0 MB/s
[root@test /tmp]# df /tmp/rw ; du -skx /tmp/rw
Filesystem 1K-blocks Used Available Use% Mounted on
none 252908 160 252748 1% /tmp/rw
100 /tmp/rw
'du' output has been increased by 100 blocks, as expected. 'df' output
by 104 blocks. No problem if the extra 4 blocks can be recovered.
Let's try…
[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 60 252848 1% /tmp/rw
0 /tmp/rw
'du' output is back to 0, but the extra 4 blocks reported by 'df' still
in use…
Let's try again…
[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.00162909 s, 62.9 MB/s
[root@test /tmp]# df /tmp/rw ; du -skx /tmp/rw
Filesystem 1K-blocks Used Available Use% Mounted on
none 252908 164 252744 1% /tmp/rw
100 /tmp/rw
[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 64 252844 1% /tmp/rw
0 /tmp/rw
Another 4 blocks lost… And it will happen each time a file is created
and removed.
Is it tmpfs or aufs? Let's try the same directly on the tmpfs:
[root@test /tmp]# dd if=/dev/zero of=/tmp/rw/test bs=1024 count=100
100+0 records in
100+0 records out
102400 bytes (102 kB) copied, 0.00175222 s, 58.4 MB/s
[root@test /tmp]# df /tmp/rw ; du -skx /tmp/rw
Filesystem 1K-blocks Used Available Use% Mounted on
none 252908 164 252744 1% /tmp/rw
100 /tmp/rw
Both 'du' and 'df' output has been increased by 100 blocks only…
[root@test /tmp]# rm /tmp/rw/test
[root@test /tmp]# df /tmp/rw ; du -skx /tmp/rw
Filesystem 1K-blocks Used Available Use% Mounted on
none 252908 64 252844 1% /tmp/rw
0 /tmp/rw
…and the 100 blocks where recovered after the file has been removed.
So, it seems aufs allocates some 'invisible' data on the tmpfs and never
frees it.
I am using Linux kernel 3.6.6 and aufs3.6. I had the same problem with
kernels 3.4.6 and 3.4.17 with aufs3.4.
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