zfs
zfs copied to clipboard
Userobj, groupobj and project quotas
This includes the commit:
Add types to featureflags in zfs
as well as commits for userobj quotas, and project quotas, all in one PR.
They are rather intertwined.
This is a port from HEAD on ZOL master today - not the original commits (plus updates). Some git history is lost.
Userobj, and Groupobj quotas appear to work:
tank feature@userobj_accounting active local
tank feature@project_quota active local
# zfs set userobjquota@lundman=100 tank
# zfs get userobjquota@lundman tank
NAME PROPERTY VALUE SOURCE
tank userobjquota@lundman 100 local
# for i in {1..200}; do touch /Volumes/tank/file$i; done
touch: /Volumes/tank/file101: Disc quota exceeded
# zfs get userobjused@lundman tank
NAME PROPERTY VALUE SOURCE
tank userobjused@lundman 50K local
(Why is it 50k?! I expect to see 100 - possibly bug in zfs_main.c - research)
# zfs set groupobjquota@staff=100 tank
# zfs get groupobjquota@staff tank
NAME PROPERTY VALUE SOURCE
tank groupobjquota@staff 100 local
-
Further testing of userobj, and groupobj quotas required.
-
Further testing with project quotas required.
- The use of
zfs set|get project*quota | project*usedshould at least work. zfs projectcommand should run, but we expectInappropriate ioctl for deviceas there are no Projects in XNU.
Ah hmm it seems the ret = ioctl(fd, ZFS_IOC_FSGETXATTR, &fsx); is an internal ioctl, so doesn't involve some feature of Linux kernel, and should be implemented.
Ah hmm it seems the
ret = ioctl(fd, ZFS_IOC_FSGETXATTR, &fsx);is an internal ioctl, so doesn't involve some feature of Linux kernel, and should be implemented.
"should be implenented" - is this ready for testing then or should it be implenented first before it gets to testing?
I haven't tested much new functionality of this PR, I just use this branch with my ZFS pool created with current ZoL 0.8.4 without any features disabled by command from OpenZFS wiki on Debian root on ZFS :
zpool create \
-o ashift=12 \
-O acltype=posixacl -O canmount=off -O compression=lz4 \
-O dnodesize=auto -O normalization=formD -O relatime=on \
-O xattr=sa -O mountpoint=/ -R /mnt \
rpool ${DISK}-part4
I saw two freezes today when I try to zfs destroy -r <dataset>. This dataset is created from macOS and don't have any features of this PR enabled. Here is its properties:
zfs get -r all rpool/work/gapps
NAME PROPERTY VALUE SOURCE
rpool/work/gapps type filesystem -
rpool/work/gapps creation нд чер 21 19:43 2020 -
rpool/work/gapps used 29,4G -
rpool/work/gapps available 485G -
rpool/work/gapps referenced 29,4G -
rpool/work/gapps compressratio 1.23x -
rpool/work/gapps mounted yes -
rpool/work/gapps quota none default
rpool/work/gapps reservation none default
rpool/work/gapps recordsize 128K default
rpool/work/gapps mountpoint /Volumes/work/gapps inherited from rpool/work
rpool/work/gapps sharenfs off default
rpool/work/gapps checksum on default
rpool/work/gapps compression lz4 inherited from rpool
rpool/work/gapps atime on default
rpool/work/gapps devices on default
rpool/work/gapps exec on default
rpool/work/gapps setuid on default
rpool/work/gapps readonly off default
rpool/work/gapps zoned off default
rpool/work/gapps snapdir hidden default
rpool/work/gapps aclmode passthrough default
rpool/work/gapps aclinherit restricted default
rpool/work/gapps canmount on default
rpool/work/gapps xattr sa inherited from rpool
rpool/work/gapps copies 1 default
rpool/work/gapps version 5 -
rpool/work/gapps utf8only on -
rpool/work/gapps normalization formD -
rpool/work/gapps casesensitivity sensitive -
rpool/work/gapps vscan off default
rpool/work/gapps nbmand off default
rpool/work/gapps sharesmb off default
rpool/work/gapps refquota none default
rpool/work/gapps refreservation none default
rpool/work/gapps primarycache all default
rpool/work/gapps secondarycache all default
rpool/work/gapps usedbysnapshots 0 -
rpool/work/gapps usedbydataset 29,4G -
rpool/work/gapps usedbychildren 0 -
rpool/work/gapps usedbyrefreservation 0 -
rpool/work/gapps logbias latency default
rpool/work/gapps dedup off default
rpool/work/gapps mlslabel none default
rpool/work/gapps sync standard default
rpool/work/gapps dnodesize auto inherited from rpool
rpool/work/gapps refcompressratio 1.23x -
rpool/work/gapps written 29,4G -
rpool/work/gapps logicalused 36,2G -
rpool/work/gapps logicalreferenced 36,2G -
rpool/work/gapps filesystem_limit none default
rpool/work/gapps snapshot_limit none default
rpool/work/gapps filesystem_count none default
rpool/work/gapps snapshot_count none default
rpool/work/gapps snapdev hidden default
rpool/work/gapps com.apple.browse on default
rpool/work/gapps com.apple.ignoreowner off default
rpool/work/gapps com.apple.mimic_hfs off default
rpool/work/gapps com.apple.devdisk poolonly default
rpool/work/gapps shareafp off default
rpool/work/gapps redundant_metadata all default
rpool/work/gapps overlay off default
rpool/work/gapps encryption off default
rpool/work/gapps keylocation none default
rpool/work/gapps keyformat none default
rpool/work/gapps pbkdf2iters 0 default
rpool/work/gapps special_small_blocks 0 default
It contains only clone of opengapps repo in a subfolder and has mds disabled by file .metadata_never_index and removing corresponding mds directory. That's all I can say about it. I haven't found any mention of zfs in my standard macOS logs GUI.
Oh sorry, not resets, but complete freezes, so GUI is there, but no clock ticks (I have seconds enabled in my clock).