zfs compression and nfs
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/
> 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
# 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