树莓派Zero W报错failed to mount sysfs at /sys
最近想给Zero W外接一个移动硬盘,移动硬盘是从我以前的笔记本电脑上拆下来的,在马云家买了一个2.5英寸移动硬盘盒,将移动硬盘插上移动硬盘盒上的sata接口,然后将移动硬盘盒接上台式机测试可以读取。于是我就想将移动硬盘盒通过OTG线接上Zero W,哪知接通了之后,无法ssh连接上Zero W了。于是不得已,强行对Zero W进行断电重启,果不其然熟悉的报错信息又出现了
Kernel panic-not syncing: VFS: unable to mount root fs on unknown- block(179,2)
由于我之前遇到过,可以参考我的这篇文章,这一次不慌不忙,打开我的另一台Linux笔记本,将microSD卡拆下后,用读卡器插上Linux笔记本,执行fsck.ext4
命令对受损磁盘进行修复。然后将microSD卡接上Zero W,接通屏幕后重新启动,等待和上一次一样的结果,哪知这次并没有和上次一样顺利,系统仍然卡住了,报错
failed to mount sysfs at /sys
我又将microSD卡通过读卡器接到Linux笔记本上,Linux系统自动挂载了microSD卡上的系统磁盘,查看磁盘信息后确认系统已经修复完成,但是我进入SD卡磁盘根目录的时候发现,确实没有sys目录,莫非要新建一个?于是我抱着试试看的心态,在SD卡根目录下新建了一个sys目录。没想到竟然被我启动成功了。
但是进入系统后我发现有点怪怪的,首先我执行了一下df -h
命令来查看磁盘占用情况。没想到系统磁盘从原先的1.3G到上一次磁盘修复后变成了1.5G,当时我就觉得有点奇怪,哪里多出来了200MB的磁盘占用,不过由于占用不多,我也没当回事。没想到这一次,系统磁盘占用竟然又多出了600MB,变成了2.1G,要知道我的SD卡只有4G大小,可用空间非常少。对于这莫名的磁盘占用,让我觉得很不爽。我得要查出磁盘占用过多的原因来才行,不然下次万一又要修复磁盘,我就没有可用的系统空间了。
Linux下查看某个文件夹占用磁盘空间大小的命令是
1 | du -sh |
查看某个文件夹及其子文件夹占用磁盘空间大小的命令是
1 | du -h |
树莓派内置了一个更方便查看当前目录及其子目录磁盘占用情况的命令ncdu
,
1 | cd / |
经过排查后发现,/var/swap
文件占用了整整800多MB,该文件是磁盘空间不足时,用物理空间交换虚拟空间的一种手段,好让用户可以继续使用磁盘空间。该文件大小默认为100MB,不知道出于什么原因,现在竟然变成了800MB。如果想要将它的占用变小,可以修改/etc/dphys-swapfile
文件。但是我找了一下没有这个文件,只有同名的文件夹,文件夹里有一个文件,内容是nodejs的信息,可能是我之前安装过nodejs,磁盘修复后自动生成的,它将我的/etc/dphys-swapfile
文件变成了一个文件夹。于是我试着删除这个文件夹,建一个同名的文件
1 | sudo rm -r /etc/dphys-swapfile |
/etc/dphys-swapfile
文件的内容为
1 | CONF_SWAPSIZE=100 |
重启dphys-swapfile
服务,让刚才的修改生效
1 | /etc/init.d/dphys-swapfile stop |
这一次执行df -h
命令来查看磁盘占用,系统磁盘大小变回了原来的1.3G,很开心。原来是/var/swap
文件搞的鬼,终于让我摸清了磁盘占用莫名变多的原因了。
还有个问题,以前系统用户登录后,命令行左边都会提示pi@raspberry
,但是现在显示的却是bash-4.4#
,而且切换用户的时候会提示
/etc/bash.bashrc is not a directory
于是我查看了一下/etc/bash.bashrc
,果然是一个文件夹,文件夹里还有和上面情况一样的文件,内容是nodejs。估计也是磁盘修复后,/etc/bash.bashrc
文件被修改成了文件夹,和上面的操作差不多,先把/etc/bash.bashrc
文件夹删除,然后从/etc/skel/.bashrc
拷贝生成一份bashrc
文件到/etc/bash.bashrc
文件
1 | sudo rm -r /etc/bash.bashrc |
重启系统后,再次登录,命令行左边提示pi@raspberry
,很开心,回到了以前。这个提示应该是/etc/bash.bashrc
文件里的命令控制的。默认情况下系统会先去用户目录下找~/.bashrc
文件,如果找不到最后会找到/etc/bash.bashrc
文件。
最后需要提示的是,每次修复磁盘,/home/pi
文件夹都会不见了,我之前保存的脚本也就没有了,很不爽。所以可以的话,再建一个用户,把脚本备份到新建用户目录下,然后将/etc
文件夹下的一些权限为pi用户或pi组的文件或文件夹权限改为root,那么新建用户也可以用到这些文件了。不过我还没有测试过,这里只是我的一些想法。