zfs compression and nfs

Markus Gebert markus.gebert at hostpoint.ch
Mon Feb 2 06:33:44 PST 2009

Andrei Kolu wrote:

>>> 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!?

Yes, you can, because that directory is part of the 'data/' filesystem  
and used (by zfs on the server) as a mount point for the 'data/ 
configuration' filesystem.

> If I understand correctly then NFS can't use "filesystem on  
> filesystem" for example my case with "data/configuration"?

Well, at least nfsv3 and lower don't have this ability for sure. I  
once heard that nfsv4 might do it, but I at least for me, that didn't  
work on FreeBSD (tested with 7.0 which has only quite basic nfsv4  
support AFAIK). But you can mount all your zfs filesystems on the  
client, i.e.:

# mkdir /mnt/data
# mount_nfs -3 server:/data /mnt/data
# mount_nfs -3 server:/data/configuration /mnt/data/configuration

> Can I compress "data" then?

You could, since data is just another zfs filesystem. But if you mount  
like stated above, you should already have achieved your goal.

> All other subfilesystems will be compressed also?

'compression' is a zfs property. If you set a property on the top- 
level zfs of a pool, then usually it will be inherited by all  
filesystems within the pool. But you can override properties for  

> How can I see what compression ratio I got on compressed filesystem?

# zfs get compressratio data/configuration


# man zfs


More information about the freebsd-fs mailing list