BTRFS:“设备上没有剩余空间”,但 btrfs 命令另有说明

fly*_*uin 4 ubuntu filesystems btrfs

我正在使用 BTRFS 从 2 个磁盘创建 RAID0 卷。两者都在一个 AWS EC2 实例上,每个实例都有 30 GB 的可用空间。我用来创建文件系统的命令是:btrfs -d raid0 -L MYLABEL /dev/xvdf /dev/xvdg.

现在Ubuntu告诉我磁盘空间已满,就像BTRFS一样:

root@host:/var/docker-apps/prometheus# btrfs balance start -dconvert=raid0 .
ERROR: error during balancing '.': No space left on device
There may be more info in syslog - try dmesg | tail
root@host:/var/docker-apps/prometheus#
Run Code Online (Sandbox Code Playgroud)

有趣的是,当我看到btrfs filesystem usage我得到这个:

root@host:/var/docker-apps/prometheus# btrfs filesystem usage .
Overall:
    Device size:          60.00GiB
    Device allocated:     60.00GiB
    Device unallocated:   2.00MiB
    Device missing:       0.00B
    Used:                 25.26GiB
    Free (estimated):     34.22GiB    (min: 34.22GiB)
    Data ratio:           1.00
    Metadata ratio:       2.00
    Global reserve:       256.00MiB    (used: 0.00B)

Data,RAID0: Size:57.98GiB, Used:23.76GiB
   /dev/xvdf      28.99GiB
   /dev/xvdg      28.99GiB

Metadata,RAID1: Size:1.00GiB, Used:766.11MiB
   /dev/xvdf       1.00GiB
   /dev/xvdg       1.00GiB

System,RAID1: Size:8.00MiB, Used:16.00KiB
   /dev/xvdf       8.00MiB
   /dev/xvdg       8.00MiB

Unallocated:
   /dev/xvdf       1.00MiB
   /dev/xvdg       1.00MiB
root@host:/var/docker-apps/prometheus# 
Run Code Online (Sandbox Code Playgroud)

现在,对我来说,这就像“我有 60 GB 的 RAID0 空间可用,我目前使用其中的大约 25 个(已使用:顶部块中的条目,以及空闲:同一块中的条目)”。我认为这很清楚。

但还是:No space left on device

所以 - 我错了吗?我该如何阅读?为什么我不能再在 BTRFS 分区中创建文件了?我必须如何阅读此输出?这里发生了什么?

Mar*_*mer 6

阅读:http : //marc.merlins.org/perso/btrfs/post_2014-05-04_Fixing-Btrfs-Filesystem-Full-Problems.html

您似乎正在遭受文章的“元数据已满情况”,因为 Btrfs 为自己保留了 0.5 GB,这意味着它已满,因此阻止了任何新的写入。文章建议您应该对其进行全面重新平衡。

还要记住,正常的 df 撒谎,它永远不会告诉你真正的 btrfs 使用统计数据。

  • 元数据不太好,只需看看上面的 btrfs 文件使用转储即可:“元数据,RAID1:大小:1.00GiB,已使用:766.11MiB” 这意味着:234 MB 的元数据是免费的。正如我上面所说,Btrfs 为自己保留 500 MB,这意味着:它已满。这是你的问题。 (2认同)