Linux系统之e2fsck详解

e2fsck 是一个用于检查和修复 ext2、ext3 和 ext4 文件系统的命令行工具。它是 Linux 系统中非常重要的工具之一,主要用于确保文件系统的完整性和稳定性。

基本语法

e2fsck [选项] 设备

这里 “设备” 是指想要检查或修复的分区或存储设备(例如 /dev/sda1)。

选项

选项 说明
-a 等效于 -p,用于自动修复文件系统(向后兼容)。
-b superblock 指定备用超级块位置(主超级块损坏时使用)。常见备份位置:1KB 块大小在 8193,2KB 在 16384,4KB 在 32768
-B blocksize 强制指定块大小(单位:字节),用于定位超级块。
-c 检查坏块并标记到坏块列表。若使用两次,则执行非破坏性读写测试。
-C fd 将检查进度信息输出到指定文件描述符(常用于监控)。
-d 显示调试信息(仅用于调试 e2fsck)。
-D 优化目录结构(支持索引时重新索引,否则排序压缩)。
-E extended_options 设置扩展选项(如 ea_ver=2discard 等)。
-f 强制检查,即使文件系统标记为“干净”。
-F 清除设备缓存再检查(用于性能测试)。
-j external-journal 指定外部日志文件路径(适用于 ext3/ext4)。
-k 保留现有坏块列表,并添加新发现的坏块。
-l filename 将文件中的块号添加到坏块列表。
-L filename 清空现有坏块列表,再添加文件中的块号。
-n 只读模式运行,所有问题均回答 no(非交互式)。
-p 自动修复可安全修复的问题(系统启动脚本常用)。
-r 无实际作用(保留向后兼容)。
-t 显示时间统计(两次使用时显示各阶段时间)。
-v 详细输出模式。
-V 显示版本信息并退出。
-y 所有问题均回答 yes(非交互式)。

扩展选项 (-E 参数)

参数 说明
ea_ver=1/2 设置扩展属性版本(默认 2)。
journal_only 仅重放日志,不进行其他检查或修复。
fragcheck 报告文件碎片化情况(第 1 阶段)。
discard 检查后丢弃未使用块(适用于 SSD 或稀疏存储)。
nodiscard 不丢弃未使用块(默认)。

退出状态码

代码 含义
0 无错误。
1 文件系统错误已修正。
2 文件系统错误已修正(保留字段,与 1 相同)。
4 文件系统错误未修正(需人工干预)。
8 运行时发生错误(如内存分配失败)。
16 语法错误(如参数冲突)。
128 共享库错误(罕见)。

示例

1. 检查并自动修复文件系统

sudo e2fsck -p /dev/sda1
  • 自动修复 /dev/sda1 分区的错误,无需人工干预。

2. 强制检查文件系统

sudo e2fsck -f /dev/sda1
  • 即使文件系统标记为“干净”,仍强制检查。

3. 检查坏块并标记

sudo e2fsck -c /dev/sda1
  • 使用 badblocks 检查坏块并更新文件系统。

4. 指定备用超级块

sudo e2fsck -b 8193 /dev/sda1
  • 若主超级块损坏,使用备份超级块(1KB 块大小)。

5. 优化目录结构

sudo e2fsck -D /dev/sda1
  • 优化所有目录结构(支持索引时重新索引)。

6. 非交互式检查(只读模式)

sudo e2fsck -n /dev/sda1
  • 以只读模式检查,所有问题回答 no

7. 使用扩展选项丢弃未使用块

sudo e2fsck -E discard /dev/sda1
  • 检查后丢弃未使用块(适用于 SSD)。

注意事项

  1. 卸载文件系统

    • 必须卸载文件系统后再运行 e2fsck(除非使用 -n 选项)。
    • 示例:sudo umount /dev/sda1
  2. 备份数据

    • 修复前建议备份重要数据,以防数据丢失。
  3. 避免在运行中文件系统上运行

    • 仅在系统引导时或使用 Live CD/USB 时运行。
  4. 日志文件系统处理

    • 对于 ext3/ext4,若非正常关机,e2fsck 会自动重放日志并标记为“干净”。
  5. 超级块备份

    • 使用 mke2fs -n 查看超级块位置,以便恢复主超级块损坏时使用 -b 选项。
  6. 参数冲突

    • -p-n-y 互斥,不可同时使用。

常见问题

Q1: 如何修复文件系统错误?

A1: 使用 e2fsck -p /dev/sda1 自动修复,或 e2fsck -y /dev/sda1 交互式修复。

Q2: 如何检查坏块?

A2: 使用 e2fsck -c /dev/sda1,或 badblocks -v /dev/sda1 手动检查。

Q3: 如何查看文件系统状态?

A3: 使用 e2fsck -n /dev/sda1 以只读模式检查,查看输出结果。

Q4: 如何优化目录结构?

A4: 使用 e2fsck -D /dev/sda1 强制优化所有目录。

你可能感兴趣的:(运维,linux,服务器,e2fsck)