Android du and df very different: File System Corrupted?
df stands for &quot;Disk Free&quot;. That means, it just needs to check with the &quot;global file system information&quot; about free space (accessible for all users). The size of the file system itself is also &quot;globally available&quot;. The difference logically is the &quot;used space&quot;. Done.
du works differently: not on file system level but on file level. It needs to look up each directory and file separately, gather it's size, and sum that up. So it can only take into account what it has access to.
Now you've run both commands as &quot;normal user&quot; – who has no permission to traverse e.g. /data/data (where all the apps' data is stored). So it can only sum up a portion of what space is occupied on /data. Would you run both commands as root user (as the screenshot in the comment by alecxs shows), numbers would be much closer together – as usually root can access all files. Though as again Alex correctly points out: there is still SELinux which might deny full access – which according to him is a known issue for mtk-su on the Amazon FireTV stick, and might be the culprit here, and isolated mount namespaces could be yet another reason for invisible files.
TL;DR: there's neither a file system corruption, nor a broken du binary necessarily causing the difference. All might work as designed. If you want to make sure, you can run fsck (if you prefer, in read-only mode) to rule out the former – and set up a test case on a different place for the latter.