树莓派Zero W启动报错Kernel panic-not syncing: VFS: unable to mount root fs on unknown- block(179,2)
树莓派Zero W一次不小心触碰松了电源USB口,导致意外断电,重启后无法正常启动。接上屏幕后发现,报错
Kernel panic-not syncing: VFS: unable to mount root fs on unknown- block(179,2)
这个错误信息似曾相识,就是我在第一次上手树莓派时,启动后报的错。后来我是格式化SD卡解决的,具体可以参考这篇文章。但问题是,那是我第一次上手树莓派,里面什么程序都还没安装,格式化也就算了。现在SD卡里已经安装了很多程序,如果让我重新格式化SD卡,我肯定不干。那么有没有其它的解决办法呢?
网上的绝大部分帖子都是针对NOOBS系统,即傻瓜系统来进行展开的,而我当时并没有烧录NOOBS系统,只是纯粹地烧了一个Raspbian Lite。好在让我找到了一篇帖子,描述的情况和我的差不多。他的解决办法分为三步,
- 找一台Linux系统的电脑,将SD卡插进读卡器,插到Linux的主机上
- 查看自己SD卡的装载目录
- 执行fsck命令来进行磁盘修复
因为我的主机是Mac系统,不兼容EXT3、EXT4格式的盘符,我又不想安装一个Linux虚拟机。好在我之前还有一台安装了OpenSUSE的笔记本电脑,在家吃灰了很久,可以拿来一用。
打开电脑,进入Linux系统,在终端中输入命令
1 | fdisk -l |
查看SD卡的分区。一般情况下,引导盘都是位于/dev/sdb1
,而树莓派系统位于/dev/sdb2
,这是我个人的情况,不代表所有。执行命令
1 | df -hT |
看看系统是否自动装载了/dev/sdb2
,如果装载了把它卸载了,卸载命令
1 | umount /dev/sdb2 |
接下来就是修复磁盘了,上面的df -hT
命令可以查看磁盘格式,我的树莓派磁盘/dev/sdb2
格式是EXT4,执行fsck.ext4
命令修复
1 | fsck.ext4 -y /dev/sdb2 //修复ext4格式的磁盘 |
将修复好的SD卡重新插上树莓派,连上电源,接上显示器发现系统虽然启动了,但是很多之前引起启动错误的inode都被删除了,最后进入系统后,pi用户的目录/home/pi
被删除了,也就是我之前存放了很多个脚本都没了。
虽然解决了报错问题,不至于完全格式化SD卡,但是就启动后的结果而言,我感觉和格式化也没差了,我写了好多个脚本都没了。看样子以后要经常备份重要的脚本,以防那天树莓派再次断电,又复现这个问题。