热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Btrfs文件系统修复技巧

nsitionalENhttp:www.w3.orgTRxhtml1DTDxhtml1-transitional.dtd

Btrfs 文件系统工具随着内核版本的进步在逐步成熟,不过难免在使用过程有会有一些意外发生,遇到无法挂载的情况怎么办?

若是在其他文件系统异常的情况下,第一反应当然是 fsck 系列工具咯~不过若是在终端运行它的话,会得到这样的结果:

  • 什么都没有发生……
  • 告诉你若是想修复文件系统,请使用 btrfs check 子命令

慢!在撞墙或果断调用 btrfs check 之前,请注意 btrfs 文件系统不像其他文件系统,大多数情况下是不需要 fsck 的,这个不干活的 fsck 其实是为了兼容在 fstab 中错误的非0 fs_passno 设置而生的。

再慢!btrfs check 是个猛药,草率使用可能会适得其反。那么接下来应该怎么办?

使用最新内核挂载

Btrfs 在磁盘上的文件系统格式已经稳定下来了,但是各种内核态和用户态的工具还在发展。不少错误或问题可以通过使用包含修复的新内核解决。

假设您已经通过无论何种方式引导了包含最新内核的 Live 环境,那么此时可以首先尝试以 recovery,ro 选项挂载 btrfs 文件。

之后观察下 dmesgjournalctl -k 的输出,有没有 btrfs 相关的 kernel oops。

没有什么异常的话,可以先检查下最后访问的文件什么的,看是否存在。由于 Btrfs 的 COW 机制,大部分情况应该是都在的。

有且仅有 kernel oops 的情况下,使用 btrfs-zero-log 去尝试修复下。

重新挂载,检查异常

若是上一步通过只读挂载正常且又没有 kernel oops,那么就可以尝试正常的读写挂载了。

运气好的话,没什么问题,可能意味着之前遇到的挂载异常问题已经在新的内核中修复了。 但尽管如此,依然推荐执行 btrfs scrub start 命令,开始检查全部文件及其校验和。

btrfs scrub 是一个在后台运行的命令,耗时比较长,在下一个普通的 Seagate 500G SATA3 7200rpm 的硬盘完成这个工作需要约 26 分钟。期间可以随时使用 btrfs scrub status 查看进度。

请注意对于非 RAID 环境来讲,btrfs scrub仅能检查出文件错误但无法修复问题(木有未损坏的文件拷贝啊……),对于 RAID 1 等级别,这个过程也可以自动使用来自冗余盘的信息进行修复,除非加上 -r参数。

挽救重要数据

只有下列两种情况需要执行 btrfs rescue 命令,因为它扫描磁盘文件簇的方式真的非常费时,不过相对应的,它不要求分区挂载

  1. 最开始连只读挂载都失败的情形
  2. 只读挂载成功,但是读写挂载使用 btrfs scrub 时提示大量错误,而且又是单盘环境

重建文件系统

当你挽救了重要数据之后,最后又回到 btrfs check 这里了,它会尝试修复文件系统。注意为了避免误操作,仅在加上 --repair 选项时才真正执行修复。

个人觉得,若是重要数据不多的话,离线恢复不难的话,还不如重新格式化得了……

总结及提醒

Btrfs 文件系统本身健壮性还是不错的,不过由于工具集还在发展,偶尔出些小状况,通过上述的修复手段也都能应对。

此外,提醒下若是突然遇到挂载异常又排出了硬件问题,可以到 IRC 频道或者 Wiki 的页面看看是不是最近工具集导致的,有时可以节省不少绕弯的精力。

文中所述命令的详情可以通过 man -k btrfs 查阅

参考资料:

  • Btrfs Problem FAQ
  • Btrfs FAQ
  • Btrfs Tips

怎么把Fedora 21 Workstation Cinnamon 的桌面环境安装到 Btrfs 文件系统的计算机上  2014-12/110844.htm

Linux文件系统Btrfs的Makefile分析 2012-10/73301.htm

Linux 文件系统Btrfs 的Kconfig分析 2012-10/73300.htm

Btrfs文件系统在CentOS中的应用 2012-08/68098.htm

Btrfs 的详细介绍:请点这里
Btrfs 的下载地址:请点这里


推荐阅读
  • 本文将介绍如何编写一些有趣的VBScript脚本,这些脚本可以在朋友之间进行无害的恶作剧。通过简单的代码示例,帮助您了解VBScript的基本语法和功能。 ... [详细]
  • 本文介绍了如何使用JQuery实现省市二级联动和表单验证。首先,通过change事件监听用户选择的省份,并动态加载对应的城市列表。其次,详细讲解了使用Validation插件进行表单验证的方法,包括内置规则、自定义规则及实时验证功能。 ... [详细]
  • 本文介绍了一款用于自动化部署 Linux 服务的 Bash 脚本。该脚本不仅涵盖了基本的文件复制和目录创建,还处理了系统服务的配置和启动,确保在多种 Linux 发行版上都能顺利运行。 ... [详细]
  • 本文详细介绍了VMware的多种认证选项,帮助你根据职业需求和个人技能选择最合适的认证路径,涵盖从基础到高级的不同层次认证。 ... [详细]
  • PyCharm下载与安装指南
    本文详细介绍如何从官方渠道下载并安装PyCharm集成开发环境(IDE),涵盖Windows、macOS和Linux系统,同时提供详细的安装步骤及配置建议。 ... [详细]
  • 本文详细介绍了如何解决Uploadify插件在Internet Explorer(IE)9和10版本中遇到的点击失效及JQuery运行时错误问题。通过修改相关JavaScript代码,确保上传功能在不同浏览器环境中的一致性和稳定性。 ... [详细]
  • 本文详细介绍了如何在Linux系统上安装和配置Smokeping,以实现对网络链路质量的实时监控。通过详细的步骤和必要的依赖包安装,确保用户能够顺利完成部署并优化其网络性能监控。 ... [详细]
  • PHP 5.2.5 安装与配置指南
    本文详细介绍了 PHP 5.2.5 的安装和配置步骤,帮助开发者解决常见的环境配置问题,特别是上传图片时遇到的错误。通过本教程,您可以顺利搭建并优化 PHP 运行环境。 ... [详细]
  • 本文介绍了Java并发库中的阻塞队列(BlockingQueue)及其典型应用场景。通过具体实例,展示了如何利用LinkedBlockingQueue实现线程间高效、安全的数据传递,并结合线程池和原子类优化性能。 ... [详细]
  • 使用 Azure Service Principal 和 Microsoft Graph API 获取 AAD 用户列表
    本文介绍了一段通用代码示例,该代码不仅能够操作 Azure Active Directory (AAD),还可以通过 Azure Service Principal 的授权访问和管理 Azure 订阅资源。Azure 的架构可以分为两个层级:AAD 和 Subscription。 ... [详细]
  • 本文介绍了如何利用JavaScript或jQuery来判断网页中的文本框是否处于焦点状态,以及如何检测鼠标是否悬停在指定的HTML元素上。 ... [详细]
  • 解决PHP与MySQL连接时出现500错误的方法
    本文详细探讨了当使用PHP连接MySQL数据库时遇到500内部服务器错误的多种解决方案,提供了详尽的操作步骤和专业建议。无论是初学者还是有经验的开发者,都能从中受益。 ... [详细]
  • 在Ubuntu 16.04 LTS上配置Qt Creator开发环境
    本文详细介绍了如何在Ubuntu 16.04 LTS系统中安装和配置Qt Creator,涵盖了从下载到安装的全过程,并提供了常见问题的解决方案。 ... [详细]
  • 自己用过的一些比较有用的css3新属性【HTML】
    web前端|html教程自己用过的一些比较用的css3新属性web前端-html教程css3刚推出不久,虽然大多数的css3属性在很多流行的浏览器中不支持,但我个人觉得还是要尽量开 ... [详细]
  • 在Ubuntu 8.04中安装美观的Cairo-Dock桌面增强工具
    本文介绍如何在Ubuntu 8.04系统中安装和配置Cairo-Dock,这款桌面增强工具以其精美的界面和高效的功能备受用户青睐。文章将指导您通过简单的步骤完成安装,并提供一些实用的配置建议。 ... [详细]
author-avatar
爱你无丶止境空间
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有