fsck - 修复损坏的文件系统

May 19, 2019 默认分类

为什么使用 fsck

计算机突然掉电,或者系统崩溃,就很有可能导致文件系统出现不一致,即只有部分内容实际写入了硬盘,而本应同时写入的数据并未写入。好在,现在常用的文件系统都使用了一致性保证技术,通常是日志(journal),也有软更新(soft-updates,用于 UFS ),或者两者并用(日志式软更新 Journaled Soft-updates,用于 FreeBSD 的 UFS)。重启后,内核或 fsck 检测到文件系统未正确卸载,就重放一遍日志或者进行后台清理。但是,如果文件系统损坏得更为严重,需要人工操作,系统会进入急救模式。这时,就需要人工运行 fsck.
但是,fsck是个比较危险的命令——可能造成文件系统不可逆的损坏。因此,在修复损坏较重的文件系统时,建议先做备份。而e2fsck提供了“撤销”功能,即记录下对文件系统所做的更改。需要恢复时,用e2undo恢复。很显然,这不能用来把文件系统恢复到已知正常的状态——它只能用于撤销e2fscke2undo命令造成的更改。因此,文件系统正常时,需要定期备份,以防不时之需。

fsck 常用参数:
-p 自动修复文件系统。如有需要人工确认的操作,fsck会退出,这时,可能要用fsck -y
-y 接受所有操作,即强力“修复”文件系统。这个选项可能会把文件系统搞得更乱。
-f 强制进行检查,即使文件系统没有设置“脏”位。
-z undo_file 仅限ext文件系统。指定撤销文件存放的位置。如果不能做全盘备份,但又有可写分区,此选项很有用。

注意:

  • fsck 需要进行大量的随机读写。
  • fsck 有可能因为文件系统的严重损坏而崩溃。
  • 一些文件系统没有常规意义上的fsck。它们一般使用内核来重放日志。但是,它们也有修复程序,只是名字不同,如 xfs 的叫做 xfs_repair
  • 在执行修复前,务必仔细阅读修复程序的文档,并做好备份。
  • 绝对不要在已经挂载的文件系统上运行。
  • fsck 可能会从头再次运行。在损坏严重的文件系统上会出现此现象。
  • 可以使用 script 记录 fsck 的所有更改。

fsck 怎么工作?

fsck会重放日志(如果有),检查元数据间的矛盾之处,然后尝试通过修改元数据来解决矛盾。没有链接(即在目录树中不存在的文件),但有有效连接数的文件,会被放在lost+found文件夹中。权限、所有者等信息依然存在,但是很可能要运行file来判断文件类型。https://docs.freebsd.org/44doc/smm/03.fsck/paper.html处有一份 4.4BSD 的 UFS 上的 fsck 的原理和运行方式的详解,由 Marshall Kirk McKusick 所写。


相关文章

沙发被抢

  1. mark了 感谢分享

添加新评论

 我们使用cookie在本地保存您评论时填写的信息,参见隐私条款