Re: why am I getting "No space left on device" here?

Martin Steigerwald
2014-01-15T19:40:35Z

Am Mittwoch, 15. Januar 2014, 19:05:41 schrieb Duncan:
> But just as my already allocated mixed-mode chunks were just about full
> and I needed another one allocated to complete the job, so your data
> chunks are full or very close, according to btrfs fi df, and you need a
> new one allocated (and if the file is greater than a gig in size, likely
> more than one) to finish the job.
>
> And in both our cases, there's plenty of unallocated space in the pool,
> but for whatever reason, btrfs isn't allocating that new chunk when it
> should! Why, I can't say, but as I mentioned, I was able to work around
> the problem here by trying the remaining files in a different order, and
> at some point, btrfs figured out it needed that new chunk allocated, and
> everything went fine after that.
>
> So... why btrfs is failing to allocate a new chunk when it needs to I
> can't say, but I *CAN* say you're not the only one to have run into the
> problem recently; I did too.
>
> And just as I did, here, with a bit of monkeying around, you can
> /probably/ get btrfs to allocate that new data chunk and get on with
> things. But the trouble is, since I don't know what the exact problem is
> or what exactly I did to persuade btrfs to do that new chunk allocation,
> I can't tell you exactly what to do to get it to happen, all I can do is
> suggest you try copying smaller files or files of different sizes around
> a bit, hoping to trigger that allocation.
>
> Once that chunk allocation happens, you should be good for at least a
> gig, since that's the data-chunk size, but if your file is over a gig in
> size, you may run into the problem again. In that case... Well, you
> could try copying several gigs of smaller files, then once it allocates
> what you need, delete them, leaving the data chunks allocated but with
> enough unused space to copy the original multi-gig file over.

I think you can cause BTRFS to allocate a chunk or more by creating a file with
the fallocate command. Unless BTRFS doesn´t do it due to a bug and errors out
with no space left.

fallocate gives also an easy way to find out how much it might still allocate
and at what point it fails – and that without writing tons of data first.
fallocate just triggers allocation and does not write any actual data.

--
Martin 'Helios' Steigerwald - http://www.Lichtvoll.de
GPG: 03B0 0D6C 0040 0710 4AFA B82F 991B EAAC A599 84C7