btrfs错误:平衡期间出错-设备上没有剩余空间


15

我的Kubuntu 12.04系统根分区上的空间不足,无法启动。该命令df -h显示了很多可用空间(仅使用了37%):

/dev/sda2        45G   17G   29G  37%

下一页指示我应该运行balance命令:

https://btrfs.wiki.kernel.org/index.php/Problem_FAQ#I_get_.22No_space_left_on_device.22_errors.2C_but_df_says_I.27ve_got_lots_of_space

$ sudo btrfs fi balance start -dusage=5 /mount/point

我并不完全相信这是最好的方法,但这是我发现的唯一方法。但是,当我运行该命令时,出现以下错误:

ERROR: error during balancing '/blah/blah/blah' - No space left on device

我收到相同的错误:

$ sudo btrfs fi balance start -dusage=1 /mount/point

什么是正确的解决方案?

Answers:


15

balance在这种情况下,有很多方法可以运行。

sudo btrfs fi show
sudo btrfs fi df /mount/point
sudo btrfs fi balance start -dusage=10 /mount/point

如果balance命令以“完成,必须从XX个块中重定位0”结束,那么您需要增加“ dusage”百分比参数,直到至少一个块被重定位。

如果balance命令失败并显示:

ERROR: error during balancing '/blah/blah/blah' - No space left on device

您实际上可能需要从设备中删除文件以腾出空间。然后再次运行balance命令。

但是,感谢Marc的博客:btrfs-修复Btrfs文件系统完全问题,这是另一个选择:

解决此问题的一个技巧是在btrfs文件系统中添加设备(甚至USB密钥也可以)。这应允许启动余额,然后可以在余额完成后使用btrfs device delete删除设备。在清单上还说过,内核3.14可以解决旧内核无法解决的一些平衡问题,因此,如果您的内核旧了,可以尝试一下。


7
我发现有时我还需要mount -oremount,clear_cache /mountpoint修复可用空间计算。(他们变得腐败了……)
rrauenza

1
@rrauenza,谢谢!您应该添加它作为答案:)
mwfearnley

0

我尝试了接受的答案中的所有内容,并访问了Marc的博客,包括增加-dusage参数和添加另一个块设备,但无济于事。即使删除了一些文件并释放了已满的磁盘上的一些空间,balance也无法完成。由于某种原因,它似乎总是将数据移到几乎满的磁盘上。最后,对我有用的是将平衡限制在整个设备上:

btrfs balance start -ddevid=<dev_id> <path>

在哪里dev_id可以找到:

btrfs fi show 

这些都不起作用
遇到了

这使我的系统崩溃,即使重新启动系统,该卷也变得不可用。我在EXT4上安装了一个卷,现在希望可以摆脱非常敏感的BTRFS系统,我认为这是由于许多设计问题而导致的故障。
Al Bundy

0

sudo apt-btrfs-snapshot delete-older-than 3d 删除3天以上的快照。当您移动数据时,快照数据会变得不适当,并且实际数据需要写入驱动器上的多个位置。这将删除与旧位置中的旧数据有关的快照,并释放这些扇区以供再次使用。我还建议duperemove对btrfs文件系统上的数据和范围进行重复数据删除。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.