症状:硬盘有很多剩余空间,但无法写入,报错:no space left on device。
可以用这个命令检查,如果metadata接近满了那就是了:
sudo btrfs fi usage /
此时大概率没办法直接做balance,直接balance的话也报:no space left on device。
解决办法,在内存里面创建一个1GB大小的临时文件,机子内存够大的话也可以创建更大的文件:
truncate -s 1G /tmp/btrfs_rescue.img
设置为回环设备:
sudo losetup /dev/loop50 /tmp/btrfs_rescue.img
把这个回环设备临时加入文件系统
sudo btrfs device add /dev/loop50 /
这个时候就可以执行balance了,但是我发现也空闲不出来多大的元数据空间,所以我干脆把DUP改成single,而且我这hdd用single性能还会好一些:
sudo btrfs balance start -mconvert=single --force /
收尾工作,移除刚加入的回环设备:
sudo btrfs device remove /dev/loop50 /
断开回环设备:
sudo losetup -d /dev/loop50
删除临时文件:
rm /tmp/btrfs_rescue.img
再balance一次,把dusage设置的激进一些,因为data空闲的空间比较多:
sudo btrfs balance start -dusage=70 /
正常了:
[可选]DUP改single会降低系统安全性,不放心的话可以改回去:
sudo btrfs balance start -mconvert=dup /
改回去的话应该会多占用2.56GB,但现在Unallocated有17.9GB,绰绰有余。
荒岛
















