Android introduced filesystem quotas in Android 8 to get Faster Storage Statistics i.e. to make auditing and enforcing space usage limits to apps easy:
"This quota feature also improves system stability by preventing any single app from using more than 90% of disk space or 50% of inodes."
Particular usage is to clear apps' cached data files as the storage runs short and apps exceed their limits. OS calculates these limits based on different criteria and saves to file
Disk Quotas is Linux kernel's feature which can be controlled from userspace using tools like quota-tools. They also work on Android:
~# quota -s -u 2000
Disk quotas for user #2000 (uid 2000):
Filesystem space quota limit grace files quota limit grace
/dev/loop1 4K 20480K 20480K 1 0 0
~# dd if=/dev/zero of=mountpoint/filler status=none bs=1M count=21
dd: error writing 'test/filler': Quota exceeded
However on Android "The quota feature is part of the default implementation of
installd" - the daemon which handles (un)installation of apps at back end. If
quota option is found in
fstab file for
userdata partition, quota mount options are enabled when
init mounts the partition on boot. So in order to disable filesystem quota on Android, you need to remove
quota option from
fstab. See What is default “fstab” file in Android?
Simple approach is to delete unnecessary files the app is holding in storage. Or you can use a different app (with different UID) for copying as quotas are allotted on per UID basis.