On Fri, Dec 6, 2013 at 9:30 AM, Dominic Raferd <
dominic@timedicer.co.uk>wrote:
> On 05/12/13 18:46, Charles Manning wrote:
>
>> On Friday 06 December 2013 01:27:09 Dominic Raferd wrote:
>>
>>> I am responsible for a PBX system which uses embedded uClinux on 256MB
>>> internal memory disk, this uses YAFFS2 filesystem and it is rapidly
>>> running
>>> out of memory. df used space is 240MB (96% of total) and du used space is
>>> 76MB. Once df gets to 100% used I guess the whole system will fail and be
>>> irrecoverable. I don't understand much about YAFFS but here is some info:
>>>
>>> root@G-124:~# cat /proc/yaffs
>>> YAFFS built:Apr 22 2010 11:02:12
>>> $Id: yaffs_fs.c,v 1.89 2009-11-29 21:50:10 charles Exp $
>>> $Id: yaffs_guts.c,v 1.98 2009-12-07 01:17:33 charles Exp $
>>>
>>>
>>> Device 0 "file system"
>>> startBlock......... 0
>>> endBlock........... 1951
>>> totalBytesPerChunk. 2048
>>> nDataBytesPerChunk. 2048
>>> chunkGroupBits..... 0
>>> chunkGroupSize..... 1
>>> nErasedBlocks...... 63
>>> nReservedBlocks.... 5
>>> blocksInCheckpoint. 0
>>> nTnodesCreated..... 97500
>>> nFreeTnodes........ 41
>>> nObjectsCreated.... 96700
>>> nFreeObjects....... 92
>>> nFreeChunks........ 8822
>>> nPageWrites........ 8033
>>> nPageReads......... 89169
>>> nBlockErasures..... 180
>>> nGCCopies.......... 4471
>>> garbageCollections. 72
>>> passiveGCs......... 0
>>> nRetriedWrites..... 0
>>> nShortOpCaches..... 10
>>> nRetireBlocks...... 0
>>> eccFixed........... 0
>>> eccUnfixed......... 0
>>> tagsEccFixed....... 0
>>> tagsEccUnfixed..... 0
>>> cacheHits.......... 20
>>> nDeletedFiles...... 0
>>> nUnlinkedFiles..... 56
>>> nBackgroudDeletions 0
>>> useNANDECC......... 1
>>> noTagsECC.......... 0
>>> isYaffs2........... 1
>>> inbandTags......... 0
>>> emptyLostAndFound.. 0
>>> disableLazyLoad.... 0
>>>
>>> (The mounting memory loss may be related to frequent power cuts. Is
>>> there
>>> anything that can be done to recover the lost memory (currently 164MB)
>>> before the system fails entirely?
>>>
>>> I would be very grateful for some urgent help/input, and can pay
>>> something
>>> for a positive resolution. (The PBX box also has an attached USB drive
>>> (8GB) but although this is working fine I don't believe the system can
>>> boot
>>> from here, and it has no local interface, only via ethernet.)
>>>
>> Hello Dominic
>>
>> If you have a wide disparity between du and df this typically means that
>> you
>> have lots of small files.
>>
>> du just adds up file contents and such to estimate space used with no
>> knowledge of file system layout. It makes various guesses. df asks the
>> file
>> system what space is in use so that is a more accurate value.
>>
>> If you store a 1-byte file in Yaffs you will end up with:
>> 1x object header chunk + 1x data chunk = 2 chunks = 4k on your system.
>>
>> However that overhead is fixed, so if you have a 1MB file, it just takes
>> up
>> 1MB + 1x object header chunk = 1MB + 2048 bytes.
>>
>> So... what are you storing that you can get rid of?
>>
>>
>>
> Thanks for the response Charles. But there are very few small files in
> this system. If I mount this boot device at /tmp/mnt/mtdblock1:
> # find /tmp/mnt/mtdblock1 -size -10c|wc -l
> 87
> # find /tmp/mnt/mtdblock1 -size -100c|wc -l
> 281
>
>
>
I only used the 1-byte file as an extreme example for illustration.
Your system has 2k pages. If you have 1k files then each will be using 4k
of space.
If you have 2.5k files, then each will be using 6 k of space.
The overhead goes down as the file size goes up.
What does find give you for file sizes of 1000, 2000, 4000?
-- Charles