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)、

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

  如果最後ro是rw,將不能完成自動修復。

(2)、 

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

(3)、

# 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. default/rcS || true  
19. "--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. 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. 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看到沒有錯誤信息,如下: