静看光阴荏苒
不管不顾不问不说也不念

btrfs元数据满了(metadata full)解决办法

症状:硬盘有很多剩余空间,但无法写入,报错: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,绰绰有余。

赞(0)
未经允许不得转载:荒岛 » btrfs元数据满了(metadata full)解决办法
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

分享创造快乐

广告合作资源投稿