最近,在使用树莓派时,由于异常掉电,导致树莓派的文件系统遭到破坏,系统启动时提示下面的信息:
网络异常,图片无法展示
|
由上图的提示信息可知,由于mmcblk0p2分区的文件系统(EXT4)的日志文件加载失败导致系统不能启动。Linux系统对于文件系统修复是有专门的工具,那就是fsck,它是用来检查和修复Linux文件系统的工具。下面fsck的基本用法:
fsck,来自 util-linux 2.31.1 fsck.ext4: 不适用的选项 -- h 用法:fsck.ext4 [-panyrcdfktvDFV] [-b 超级块] [-B 块大小] [-l|-L 坏块文件] [-C fd] [-j 外部日志] [-E 扩展选项] [-z 撤销文件] 设备 重要提示: -p 自动修复(不询问) -n 不对文件系统做任何更改 -y 对所有询问都回答“是” -c 检查可能的坏块,并将它们加入坏块列表 -f 强制进行检查,即使文件系统被标记为“没有问题” -v 显示更多信息 -b superblock 使用备选超级块 -B blocksize 使用指定块大小来查找超级块 -j external_journal 指定外部日志的位置 -l bad_blocks_file 添加到指定的坏块列表(文件) -L bad_blocks_file 指定坏块列表(文件) -z undo_file 创建一个撤销文件
但是,树莓派initramfs中的busybox没有fsck这个工具,那该如何修复呢?
办法就是,取出树莓派的系统SD卡,找一台装有Linux系统的电脑,在电脑上识别出sd卡,然后,按照如下步骤操作:
查看sd分区信息,找到受损的分区
$ sudo fdisk -l 设备 启动 起点 末尾 扇区 大小 Id 类型 /dev/sdc1 2048 409599 407552 199M c W95 FAT32 (LBA) /dev/sdc2 409600 121651166 121241567 57.8G 83 Linux
其中,sdc2就是mmcblk0p2分区。
使用fsck进行修复
sudo fsck /dev/sdc2 fsck,来自 util-linux 2.31.1 e2fsck 1.44.1 (24-Mar-2018) writable:正在修复日志 在 writable 中发现日志校验值错误 writable 未被彻底卸载,强制进行检查。 第 1 步:检查inode、块和大小 发现了可能属于损坏的孤立链接表的inode。 处理<y>? 是 Inode 390310 位于孤立的inode列表中。 已处理. Inode 390320 位于孤立的inode列表中。 已处理. Inode 390381 位于孤立的inode列表中。 已处理. Inode 390385 位于孤立的inode列表中。 已处理. Inode 390391 位于孤立的inode列表中。 已处理. Inode 390758 位于孤立的inode列表中。 已处理. Inode 390980 位于孤立的inode列表中。 已处理. Inode 390982 位于孤立的inode列表中。 已处理. Inode 391223 位于孤立的inode列表中。 已处理. Inode 391225 位于孤立的inode列表中。 已处理. Inode 391228 位于孤立的inode列表中。 已处理. Inode 391230 位于孤立的inode列表中。 已处理. Inode 391239 位于孤立的inode列表中。 已处理. Inode 391240 位于孤立的inode列表中。 已处理. Inode 391245 位于孤立的inode列表中。 已处理. 第 2 步:检查目录结构 /var/log/journal/3ee6df9e1aa048efbefea1d2f060ddab(174717)中的项 “system.journal”含有删除或未使用的@ 138360。 清除<y>? 是 第 3 步:检查目录连接性 /lost+found未找到。 创建<y>? 是 第 4 步:检查引用计数 第 5 步:检查组概要信息 块位图的差异: -859648 处理<y>? 是 Inode位图的差异: -138360 处理<y>? 是 writable:***** 文件系统已修改 ***** writable:149791/3763264 文件(0.2% 为非连续的), 1609362/15155195 块
修复过程中会请求如何处理问题,一般选择“是”,可以指定-a选项,自动修复。修复完成之后,重新将sd卡插入树莓派,系统可以正常启动。