[wellylug] CF card lifetime

Ewen McNeill wellylug at ewen.mcneill.gen.nz
Tue Mar 22 12:35:24 NZDT 2011

On 2011-03-22 11:52 , Sam Vilain wrote:
> On 21/03/11 22:56, Richard Hector wrote:
>> I've recently started using a Soekris box with a CF card as my home
>> firewall.  [...]
>> Does anyone know if there are tools to
>> let me know how close to the end I am? It doesn't support S.M.A.R.T.
> Hey Richard, apprently YAFFS / YAFFS2 supports wear-level counts at the
> filesystem layer - try formatting it as that.  And make double sure you
> take regular backups as with any unusual filesystem :-).

As I understand it YAFFS is designed to work on raw flash (NAND/NOR), 
and provides the flash translation layer, etc (like JFFS does).  That's 
presumably how it can provide wear level counts.  By contrast a CF card 
has its own firmware in it which provides the flash translation layer, 
and that's what knows about the wear level counts of individual 
sections.  So at first glance I'd say that YAFFS wouldn't work on a CF card.

There was an excellent article in LWN a few weeks back about CF/SD/etc 
cards and the wear levelling they provide:


A _few_ of them do provide either SMART (mostly SSD, rather than CF/SD) 
or some proprietary tool for getting at the wear levelling counts (IIRC 
there's a link in the comments to some article that talks about 
vendor-supported real world testing, and gives wear counts).

That same article also talks about how most of the CF/SD cards have 
firmware that is optimised (to some lesser or greater degree) for 
FAT(32) file systems, and can perform from poorly to terribly when used 
with other file systems (eg, quite a bit of wear multiplication when 
writing less-than-full-erase-blocks in areas outside the position it 
expects the FAT to be).  There is considerably variance between vendors.
(The comments also point out that the wear levelling algorithms in SSDs 
tend to be fairly good these days -- they have a big enough CPU to run 
the firmware to use sane algorithms -- but the ones on resource limited 
CF/SD cards are often very primitive.)

For a firewall, the typical mode of operation with a CF/SD card is to 
boot and run from a RAM disk which holds everything, possibly with a 
read-only partition for things which are used only occasionally. 
Logging and anything else involving writes is either to a RAM disk, or 
via the network (eg, syslog).  Most of the dedicated-firewall embedded 
Linux/etc systems work like that.  Assuming that's the case the number 
of writes to the CF should be "almost none" at which point wear 
levelling ceases to be an issue (which is, of course, one of the major 
reasons they do it that way).

If you're treating your CF as a regular hard drive, mounting with 
typical linux file systems (and even worse haven't mounted with 
"noatime" -- so every read is also a write!), then I'd guess the 
lifetime would be relatively poor.  But even so the write load on a 
_firewall_ shouldn't be that high, unless you're logging packets 
traversing the system.  So I'd guess the CF should be good for many 
months, possibly years.  (If you are logging non trivial amounts of 
traffic directly to CF, you probably want to stop now!)


PS: Aside from SMART and some vendor proprietary (possibly Microsoft 
Windows only) tools I'm not aware of any other way to peak into what the 
embedded firmware is doing for wear levelling.  So you essentially get 
no warning that it's no longer possible to erase some of the blocks on 
the CF.  (And depending on the firmware in the CF it may either silently 
work around that for you, as modern hard spinning rust hard drives work 
around bad blocks, or -- more likely on cheap CF -- randomly give you 
corrupt blocks.  Fun.)

More information about the wellylug mailing list