Btrfs 断电损坏

强制关机是危险的,至少对于 Btrfs 文件系统来说。

即使如今 Linux 桌面的稳定性已经极大改善,使用滚动发行版或特殊显卡驱动的用户仍然可能会遇到系统卡死的情况。这时候很多人就会直接长按电源键关机。这会导致系统强制断电,而文件系统读写尚未完成(可能是文件系统层面,也可能是存储硬件层面)。

为什么偏偏 Btrfs 会特别敏感呢?

其实 Btrfs 本身并没有特别弱势的地方,但是使用 Btrfs 的发行版,比如 openSUSE,会定期进行 btrfs-balance 和 btrfs-cleaner。这些 Btrfs 维护任务会带来巨大的 CPU 和 IO 负担,让桌面更容易卡死崩溃。假如你正在玩一款特别占用资源的游戏,而这时 btrfs-balance 开始了,系统很可能会被卡死。如果此时强制断电,btrfs-balance 的数据转移就会被中断,从而使文件系统处于异常状态。

再次开机时,则可能会遇到无法挂载分区,无法进入系统,甚至无法启动的情况。通常系统的 /home 分区或子卷读写最频繁,也最容易因为断电而损坏。无法挂载 /home 分区或子卷的表现为:能进入登录界面却无法进入桌面。

这时要怎么做呢?

第一,重启后即使无法进入系统,也请先让机器继续运行。这可以让 SSD 硬件断电保护机制工作,将之前未完成的数据操作恢复,这可能需要几分钟。请尽量等待时间长一些,以确保数据写入已经完全完成。

第二,再次重启。如果第一步有效,那么您应该能够正常进入系统了。您可以多试几次。如果最终仍然不能进入系统,那么您还需要检查和修复 Btrfs 文件系统。

第三,制作救援盘,从救援盘启动。

第四,插入移动硬盘,使用 btrfs restore 将数据恢复出来。这一步是完全安全的,不会更改已有文件系统。接下来的步骤都或多或少有些风险,因此建议您先保留数据。

第五,按照维基上的 Btrfs 修复教程操作。需要注意的是,这些修复方法的风险依次增大。某些情况下,btrfs check --repair /dev/sda1 甚至可能会完全摧毁一个 Btrfs 文件系统。


📅

📁

🏷️

评论

《 “Btrfs 断电损坏” 》 有 2 条评论

  1. garasu 的头像
    garasu

    您好,打扰一下。
    群晖6.2上 无法用 btrfs balance 怎么办?提示:unknown token ‘balance’
    现在df看还有几个G空间,但是btrfs fi show 一看 满了,touch个文件都提示没有空间了。。。

  2. sunliguo 的头像

    我有一个铁威马的nas,原本是3个2t的磁盘做的raid5,btrfs格式。后来箱加一个块ss的做缓存,没有成功。设备重启了好几次。现在如果以只读挂载没问题,读写时间长了会死机。我把3块磁盘放在树莓派下,发现是[btrfs-cleaner]一直在读写磁盘。
    不知道是btrfs出现了什么情况,怎么处理呢?
    Total DISK READ: 2.97 M/s | Total DISK WRITE: 0.00 B/s
    Current DISK READ: 2.96 M/s | Current DISK WRITE: 0.00 B/s
    TID PRIO USER DISK READ DISK WRITE SWAPIN IO> COMMAND
    1480 be/4 root 2.97 M/s 0.00 B/s 0.00 % 91.42 % [btrfs-cleaner]
    1 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % init splash
    2 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [kthreadd]

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据