Thanks for this post and to all the helpers. I was certainly very confused when I was getting the “No space left on device” errors when I was seeing 77G of free space on the drive.
Symptoms were being unable to update, write files, couldn’t open certain apps (like browsers, disk usage analyzer), frequently getting kicked to the user login screen (following a short black screen), couldn’t use the GNOME system menu Power button (it would just do the black screen → login screen thing). Thankfully poweroff still worked.
Due to being kicked to login screen frequently, I booted into a Fedora 44 live USB and mounted the BTRFS volume for the rest.
$ sudo btrfs filesystem usage /run/media/liveuser/fedora
Overall:
Device size: 236.89GiB
Device allocated: 236.89GiB
Device unallocated: 1.00MiB
Device missing: 0.00B
Device slack: 0.00B
Used: 159.13GiB
Free (estimated): 76.92GiB (min: 76.92GiB)
Free (statfs, df): 76.92GiB
Data ratio: 1.00
Metadata ratio: 2.00
Global reserve: 432.16MiB (used: 0.00B)
Multiple profiles: no
Data,single: Size:220.87GiB, Used:143.95GiB (65.18%)
/dev/nvme0n1p3 220.87GiB
Metadata,DUP: Size:8.00GiB, Used:7.59GiB (94.86%)
/dev/nvme0n1p3 16.00GiB
System,DUP: Size:8.00MiB, Used:48.00KiB (0.59%)
/dev/nvme0n1p3 16.00MiB
Looking at the above, Device allocated + unallocated (and maybe the Metadata) should be what stand out, yes?
First balance attempt failed with “No space left on device”, unsurprisingly.
$ sudo btrfs balance start -dusage=50 /run/media/liveuser/fedora
Followed by sudo dmesg | tail, which mentioned ‘77 enospc errors during balance’
Unlike the original poster, I could afford to delete some files. I deleted one of my Steam games that was >1GiB, ran the balance command with -dusage=50 again and that fixed the issue for me- ‘Device unallocated’ now showed as 80GiB, and I was able to run some updates normally. Yay!
I’ll look into enabling dynamic reclaim now. Is it still recommended? From what I can tell, it was being tested last year, but I’m not seeing it mentioned in more recent discussions, and it doesn’t appear to have been enabled by default yet.