树莓派系统自检错误

来源:互联网 发布:java jbpm工作流实例 编辑:程序博客网 时间:2024/05/18 02:05
rt,虽然ext4文件系统比较“结实”,但也经不起每次都非正常关机的折腾


如果你发现你的派半天都没启动起来,绿灯不闪或一直连续的闪,接上显示或串口后发现系统提示文件系统错误,那么你就成功的搞坏了文件系统。


万一你真搞坏了,如果你的电脑上有linux系统,可以执行:
fsck.ext4 /dev/sdb2 #设备名按实际情况修改
来修复文件系统
如果你只有windows,基本上就只能重写系统了


不过你可以让树莓派的系统在每次启动时都去检查一遍文件系统,应该能起到一些效果
执行:
sudo touch /forcefsck
sudo chattr +i /forcefsck

这样树莓派每次启动会慢5~10秒,但总比你重写一遍系统快



修复方法:

1、手动修复:借助其他完整系统启动,对所在磁盘分区卸载,比如要修复/dev/mmcblk0p2,

执行命令 fsck.ext4 /dev/mmcblk0p2 可检查修复系统;


2、自动修复:

条件:

(1)、  自动修复要保证,bootloader参数bootargs 生命挂载以制度方式挂载根文件系统

            console=tty1 console=ttySAC2,115200n8 root=UUID=e139ce78-9841-40fe-8823-96a304a09859 rootwait ro

  如果最后ro是rw,将不能完成自动修复。

(2)、   编辑/etc/fstab 挂载最后一个选项设置为1,标明启动时自动检测文件系统,如下:

UUID=e139ce78-9841-40fe-8823-96a304a09859       /       ext4    errors=remount-ro,noatime,nodiratime            01

(3)、  编辑 /etc/default/rcS 最后一个选项(其他linux系统有区别)

# automatically repair filesystems with inconsistencies during boot
FSCKFIX=yes

然后,可以参考/etc/init/mountall.conf

[cpp] view plain copy
  1. description     "Mount filesystems on boot"  
  2.   
  3. start on startup  
  4. stop on starting rcS  
  5.   
  6. expect daemon  
  7. task  
  8.   
  9. emits virtual-filesystems  
  10. emits local-filesystems  
  11. emits remote-filesystems  
  12. emits all-swaps  
  13. emits filesystem  
  14. emits mounting  
  15. emits mounted  
  16.   
  17. script  
  18.     . /etc/default/rcS || true  
  19.     [ -f /forcefsck ] && force_fsck="--force-fsck"  
  20.     [ "$FSCKFIX" = "yes" ] && fsck_fix="--fsck-fix"  
  21.   
  22.     # Doesn't work so well if mountall is responsible for mounting /proc, heh.  
  23.     if [ -e /proc/cmdline ]; then  
  24.         read line < /proc/cmdline  
  25.         for arg in $line; do  
  26.             case $arg in  
  27.                 -q|--quiet|-v|--verbose|--debug)  
  28.                     debug_arg=$arg  
  29.                     ;;  
  30.             esac  
  31.         done < /proc/cmdline  
  32.     fi  
  33.     # set $LANG so that messages appearing in plymouth are translated  
  34.     if [ -r /etc/default/locale ]; then  
  35.         . /etc/default/locale || true  
  36.         export LANG LANGUAGE LC_MESSAGES LC_ALL  
  37.     fi  
[cpp] view plain copy
  1.     exec mountall --daemon $force_fsck $fsck_fix $debug_arg  
  2. end script  
[cpp] view plain copy
  1. post-stop script  
  2.     rm -f /forcefsck 2>dev/null || true  
  3. end script  
(4)、系统检测到分区有问题时,会再根目录下创建一个空文件/forcefsck,重启后,执行mountall,自动进行修复,然后删除forcefsck,也可以手动创建/forcefsck,系统同样会在下次启动时强制检查修复文件系统;


Log:

系统启动检查修复过程的log,不在/var/log/fsck/目录下,而是在/var/log/upstart/目录下,文件为 mountall.log,如下:

[cpp] view plain copy
  1. # cat mountall.log  
  2. mount: mount point /media/boot does not exist  
  3. mountall: mount /media/boot [382] terminated with status 32  
  4. mountall: Filesystem could not be mounted: /media/boot  
  5. Skipping /media/boot at user request  
  6. Skipping /media/boot at user request  
  7. Skipping /media/boot at user request  
  8. fsck from util-linux 2.20.1  
  9. e2fsck 1.42.9 (4-Feb-2014)  
  10. /dev/mmcblk0p2: clean, 223220/393216 files, 1282976/1572864 blocks  

其他:

也可以通过设置 系统挂载的次数来自动检查修复文件系统

比如:

tune2fs -c 30 /dev/mmcblk0p2 系统每启动30次,就会检查修复一次。


修复完成后,通过 tune2fs -l /dev/mmcblk0p2看到没有错误信息,如下:


0 0