Btrfs「No space left on device」解决实录
技术随笔 274 1 min
本文发布于 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

若空间过满导致无法执行,

  1. 删除一些大文件,比如陈旧快照

  2. 先处理一部分数据块

    sudo btrfs balance start -dusage=0 /
    sudo btrfs balance start -dusage=10 /
    sudo btrfs balance start -musage=10 /
  3. 使用 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
作者
Liksium
发布于
许可