linux can't read superblock on - Fri, Apr 22, 2022
意外停电后,重启系统,不能自动挂载
意外停电后,重启系统,不能自动挂载
提示: Linux发行版更新较快,命令可能因版本不同而有差异。
问题背景
意外断电后,文件系统可能出现损坏,导致无法正常挂载。这时需要使用fsck工具修复。
fsck基本用法
检查并修复文件系统
# 基本语法
sudo fsck /dev/xxxxx
# 示例
sudo fsck /dev/sdb1
交互模式
sudo fsck /dev/sdb1
fsck from util-linux 2.34
e2fsck 1.45.5 (07-Jan-2020)
/dev/sdb1 contains a file system with errors, check forced.
Pass 1: Checking inodes, blocks, and sizes
Inode 525737 seems to contain garbage. Clear?
常用选项:
yes或y:清除/修复no或n:跳过a:自动修复所有问题
常用参数
# 自动修复(对所有问题回答yes)
sudo fsck -y /dev/sdb1
# 检查指定文件系统类型
sudo fsck -t ext4 /dev/sdb1
# 强制检查
sudo fsck -f /dev/sdb1
# 显示进度
sudo fsck -C /dev/sdb1
修复步骤
1. 卸载文件系统
# 卸载
sudo umount /dev/sdb1
# 如果无法卸载,查找占用进程
lsof /dev/sdb1
# 或
fuser -v /dev/sdb1
2. 运行fsck
# 自动修复
sudo fsck -y /dev/sdb1
3. 重新挂载
# 挂载
sudo mount /dev/sdb1 /mnt/data
常见错误及解决
superblock损坏
# 查找备用superblock
sudo mke2fs -n /dev/sdb1
# 使用备用superblock修复
sudo fsck -b 32768 /dev/sdb1
Inode错误
# 清除损坏的inode
sudo fsck -y /dev/sdb1
# 输出: Inode 525737 seems to contain garbage. Clear? yes
根分区损坏
# 需要进入救援模式或Live CD
# 在启动时按住Shift键进入GRUB菜单
# 选择recovery mode
# 或使用Live CD启动
检查所有文件系统
# 检查fstab中所有文件系统
sudo fsck -A
# 只检查需要检查的文件系统
sudo fsck -R -A
开机自动检查
在/etc/fstab中设置:
# <device> <mount> <type> <options> <dump> <pass>
/dev/sdb1 /data ext4 defaults 0 2
# dump pass
# pass=0: 不检查
# pass=1: 根分区
# pass=2: 其他分区
最佳实践
- 定期检查:定期运行fsck检查文件系统健康
- 安全关机:避免强制断电
- UPS电源:重要服务器配备UPS
- 备份重要数据:修复前先备份数据
- 使用日志文件系统:优先使用ext4、xfs等有日志的文件系统