我的 BTRF 根目录在系统更新期间已填满,并已自动重新安装为只读。我有很多可以删除的文件,但它是只读的。我试过:
sudo mount -o remount,rw /
→ 挂载点未挂载或选项错误创建一个
/dev/loop0
带有 10G 临时文件并尝试将其添加到 BTRFS 设备:sudo btrfs device add /dev/loop0 /
→error adding device /dev/loop0: Read-only file system
重新平衡:
sudo btrfs balance start -dusage=0 /
(也尝试过-musage=0
) →error during balancing '/': Read-only file system
所以基本上我尝试的所有方法都失败了,因为文件系统是只读的。出于某种原因,我无法将其重新挂载为 rw。我害怕重新启动系统,因为它可能无法启动。对于拥有 btrfs 完整根文件系统的人来说,难道就没有希望了吗?
答案1
遇到了同样的问题,通过以下方式解决了这个问题:
umount /home
mount /dev/sdd1 on /home -o rw,clear_cache,skip_balance
这将跳过任何重新平衡操作(我的锁定点)并清除一些缓存以释放一些空间。
但在此之后,任何操作都会导致仍然切换到只读,因此我在 mount 命令之后检查并停止任何重新平衡:
btrfs fi balance show /home
btrfs fi balance cancel /home
此后,btrfs 更加稳定,我可以调整它的大小
btrfs fi resize max /home
可能常见问题解答平衡命令现在也应该起作用或手动删除一些大文件。
常见问题解答中报告了这一点(您可能想尝试从低到高的不同值,因为这是块中使用空间的百分比,将由余额选择并最终合并,释放空间)
btrfs fi balance start -dusage=10 /home
最后,还有添加新设备并请求重新平衡的路径(因此是 raid0,但您可以稍后对其进行微调,并在需要且有足够的空间时切换到 raid1)。btrfs 可以使用多个设备即时构建“raid”(最坏的情况是临时的 USB 存储,但请记住最后删除数据并删除设备)
btrfs device add /dev/sdf1 /home
btrfs balance start -dusage=20 -musage=20 /home
微调 dusage(数据)和 musage(元数据)中的值,以加快速度和/或移动更多信息。在相同情况下,您可能需要添加一个-ddevid=???
以将重新平衡限制到完整设备,从而强制 btrfs 将块从完整设备移出到具有更多空间的设备。从中获取 devidbrtfs fi show
最后查看结果(请记住,btrfs 中的 df 是不够的,因为 btrfs 有几层,而 df 只能看到一层)
btrfs fi show
btrfs fi usage /home
btrfs device usage /home
btrfs fi df /home