Fat 16 seems to be too big for the 328 also, (2k isnt much to work with when looking at Fat) ufat is the most suggested solution I have seen on the forum
I have been very content with the "Roland" library for 16-bit FAT on ATmega328. This library can also be configured for 32-bit FAT (greater then 2GB). I can do open / close / read / write / append / seek / create / delete. This library will maintain a proper FAT and grow files on demand. It will also time stamp my files through a callback if I desire. There is also support for file search/enumeration and sub directories to any level.
I've also tested the libraries from Seedstudio, Libellium and uFat2., but found issues (too restricted, buggy, poorly designed) with all.