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看到沒有錯誤信息,如下: