Btrfs「No space left on device」解决实录
本文发布于 37 天前,其中的信息可能已经物是人非
手上有一台使用 Btrfs 文件系统的 Arch Linux,有时会出现 No space left on device 问题导致无法正常启动。
通常是因为 Btrfs 的机制所导致:
Btrfs 将空间划分为 Data 和 Metadata 两个池子,若元数据池被耗尽,即便数据池还有几百 GB 空间,系统也无法创建新文件,甚至无法为
ls/cd生成临时缓存,就会抛出No space left on device (os error 28)。
解决方法为通过 btrfs balance 重新调整池子大小:
sudo btrfs filesystem usage / # 查看文件系统使用情况
sudo btrfs balance start / --full-balance
若空间过满导致无法执行,
-
删除一些大文件,比如陈旧快照
-
先处理一部分数据块
sudo btrfs balance start -dusage=0 / sudo btrfs balance start -dusage=10 / sudo btrfs balance start -musage=10 / -
使用 Btrfs 提供的「临时救急内存」命令
# 临时向 Linux 内核借用 64MB 空间来运行救援指令 sudo btrfs filesystem defragment / # 或者挂载一个临时的清空块
参考
Btrfs「No space left on device」解决实录
https://blog.liksium.com/archives/btrfs-no-space-left-on-device-fix.html