zfs compression and nfs

Andrei Kolu antik at bsd.ee
Mon Feb 2 05:40:57 PST 2009

Markus Gebert wrote:
> Hi Andrei
> Am 02.02.2009 um 13:11 schrieb Andrei Kolu:
>> I encouontered strange problem with zfs compressed volume that is 
>> shared out over nfs.
>> volume is created with command:
>> # zpool create example /dev/da1
>> # zfs set compression=gzip data/configuration
> Since 'zfs set' is usually used on a file system (i.e. not a 
> directory), I assume 'data/configuration' is a zfs filesystem separate 
> from 'data/'.
Yes, it is created with command (I forgot to add it in my first post):

# zfs create data/configuration
# mount
data on /data (zfs, NFS exported, local)
data/configuration on /data/configuration (zfs, local)
data/iscsi on /data/iscsi (zfs, local)

>> Now my "data" is shared with NFS and all servers have access to 
>> "configuration" volume. All NFS clients can write to volume and show 
>> written files over network. What is missing is files from server 
>> side- it does not show any file on compressed volume that is written 
>> by clients over NFS. If I copy same files/directories to nfs root eg. 
>> "data" then I can access files from server. Where are my files?
> I don't think this is related to compression.
> If 'data/' and 'data/configuration' really happen to be different 
> filesystems and you're mounting only 'data/' on the client, the 
> behaviour you're seeing is expected. What's happening is that you're 
> client is able to to see the configuration _directory_ inside the 
> mounted 'data/' filesystem. But since the nfsclient won't be able to 
> cross filesystem boundaries on the server (nfs restriction), changing 
> to that directory and writing a file on the client will actually 
> result in the file being written to the 'data/' filesystem on the 
> server (inside it's 'configuration' _directory_). You are not seeing 
> these files on the server, because there 'data/configuration' is 
> actually you're compressed zfs filesysten that never got a write. You 
> should be able to make the lost files visible on the server by 
> umounting 'data/configuration':
> # zfs umount data/configuration
> Of course this does not solve your problem. I guess you need to export 
> 'data/configuration' too and mount it on the client.
But I can see "configuration" directory from NFS client!? If I 
understand correctly then NFS can't use "filesystem on filesystem" for 
example my case with "data/configuration"? Can I compress "data" then? 
All other subfilesystems will be compressed also? How can I see what 
compression ratio I got on compressed filesystem?

So many questions...

More information about the freebsd-fs mailing list