Linux FSCK自动修复文件系统(按F键)

背景:

Linux系统(Ubuntu)在运行时,断电等非正常关机操作,会导致ext4文件系统数据损坏。严重时会导致系统崩溃。如下log就是系统数据损坏。

[cpp]  view plain  copy
  1. [    7.878756] EXT4-fs error (device mmcblk0p2): ext4_mb_generate_buddy:742: group 0, 14845 clusters in bitmap, 14822 in gd  
  2. [    8.484660] init: samba-ad-dc main process (995) terminated with status 1  
  3. [   14.248075] EXT4-fs error (device mmcblk0p2): ext4_mb_generate_buddy:742: group 1, 1 clusters in bitmap, 2 in gd  


检查方法:

1、开机log,如上log就是开机时,kernel监测到文件系统错误;

2、比如要检查的分区是/dev/mmcblk0p2,如下红色字体部分就是系统错误的信息。

[cpp]  view plain  copy
  1. ~# tune2fs -l /dev/mmcblk0p2  
  2. tune2fs 1.42.9 (4-Feb-2014)  
  3. Filesystem volume name:   <none>  
  4. Last mounted on:          /  
  5. Filesystem UUID:          ab013911-6048-465f-8a1a-cf1420c7bb01  
  6. Filesystem magic number:  0xEF53  
  7. Filesystem revision #:    1 (dynamic)  
  8. Filesystem features:      ext_attr resize_inode dir_index filetype extent flex_bg sparse_super large_file huge_file uninit_bg dir_nlink extra_isize  
  9. Filesystem flags:         unsigned_directory_hash  
  10. Default mount options:    user_xattr acl  
  11. Filesystem state:         not clean with errors  
  12. Errors behavior:          Continue  
  13. Filesystem OS type:       Linux  
  14. Inode count:              393216  
  15. Block count:              1572864  
  16. Reserved block count:     78643  
  17. Free blocks:              289870  
  18. Free inodes:              169990  
  19. First block:              0  
  20. Block size:               4096  
  21. Fragment size:            4096  
  22. Reserved GDT blocks:      383  
  23. Blocks per group:         32768  
  24. Fragments per group:      32768  
  25. Inodes per group:         8192  
  26. Inode blocks per group:   512  
  27. Flex block group size:    16  
  28. Filesystem created:       Sat Sep 12 11:55:02 2015  
  29. Last mount time:          Mon Oct  5 00:56:20 2015  
  30. Last write time:          Mon Oct  5 00:56:32 2015  
  31. Mount count:              49  
  32. Maximum mount count:      -1  
  33. Last checked:             Sat Sep 12 11:55:02 2015  
  34. Check interval:           0 (<none>)  
  35. Lifetime writes:          5936 MB  
  36. Reserved blocks uid:      0 (user root)  
  37. Reserved blocks gid:      0 (group root)  
  38. First inode:              11  
  39. Inode size:               256  
  40. Required extra isize:     28  
  41. Desired extra isize:      28  
  42. Default directory hash:   half_md4  
  43. Directory Hash Seed:      37b6421d-4697-4ff5-a68e-4a1e1ea81c0e  
  44. Journal backup:           inode blocks  
  45. <span style="color:#ff0000;">FS Error count:           5  
  46. First error time:         Mon Oct  5 00:52:47 2015  
  47. First error function:     ext4_mb_generate_buddy  
  48. First error line #:       742  
  49. First error inode #:      0  
  50. First error block #:      0  
  51. Last error time:          Mon Oct  5 00:56:32 2015  
  52. Last error function:      ext4_mb_generate_buddy  
  53. Last error line #:        742  
  54. Last error inode #:       0  
  55. Last error block #:       0</span>  


修复方法:

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看到没有错误信息,如下:

[cpp]  view plain  copy
  1. ~# tune2fs -l /dev/mmcblk0p2  
  2. tune2fs 1.42.9 (4-Feb-2014)  
  3. Filesystem volume name:   <none>  
  4. Last mounted on:          /  
  5. Filesystem UUID:          ab013911-6048-465f-8a1a-cf1420c7bb01  
  6. Filesystem magic number:  0xEF53  
  7. Filesystem revision #:    1 (dynamic)  
  8. Filesystem features:      ext_attr resize_inode dir_index filetype extent flex_bg sparse_super large_file huge_file uninit_bg dir_nlink extra_isize  
  9. Filesystem flags:         unsigned_directory_hash  
  10. Default mount options:    user_xattr acl  
  11. Filesystem state:         not clean  
  12. Errors behavior:          Continue  
  13. Filesystem OS type:       Linux  
  14. Inode count:              393216  
  15. Block count:              1572864  
  16. Reserved block count:     78643  
  17. Free blocks:              289888  
  18. Free inodes:              169996  
  19. First block:              0  
  20. Block size:               4096  
  21. Fragment size:            4096  
  22. Reserved GDT blocks:      383  
  23. Blocks per group:         32768  
  24. Fragments per group:      32768  
  25. Inodes per group:         8192  
  26. Inode blocks per group:   512  
  27. Flex block group size:    16  
  28. Filesystem created:       Sat Sep 12 11:55:02 2015  
  29. Last mount time:          Mon Oct  5 00:58:56 2015  
  30. Last write time:          Mon Oct  5 00:58:41 2015  
  31. Mount count:              1  
  32. Maximum mount count:      -1  
  33. Last checked:             Mon Oct  5 00:58:41 2015  
  34. Check interval:           0 (<none>)  
  35. Lifetime writes:          5938 MB  
  36. Reserved blocks uid:      0 (user root)  
  37. Reserved blocks gid:      0 (group root)  
  38. First inode:              11  
  39. Inode size:               256  
  40. Required extra isize:     28  
  41. Desired extra isize:      28  
  42. Default directory hash:   half_md4  
  43. Directory Hash Seed:      37b6421d-4697-4ff5-a68e-4a1e1ea81c0e  
  44. Journal backup:           inode blocks  
  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
使用fsck命令可以检查和修复文件系统中的错误。当文件系统损坏时,可以使用fsck命令来尝试修复。命令的基本格式如下:\[1\] ``` fsck \[选项\] 分区设备文件名 ``` 在修复文件系统之前,务必先进行备份,特别是当文件系统中包含有价值的数据时\[2\]。可以使用以下命令查看系统支持的文件系统类型: ``` fsck ``` 如果想要修复某个分区,可以执行以下命令: ``` fsck -r /dev/sdb1 ``` 其中,`/dev/sdb1`是要修复的分区设备文件名。使用`-r`选项可以进入互动的修复模式\[2\]。 在修复过程中,如果发现存在没有文件系统依赖的文件或目录,fsck命令会提示用户是否找回这些文件。如果用户同意找回,fsck命令会将这些文件放到`lost+found`目录中,并以文件自己对应的inode号来命名\[2\]。 因此,当修复完成后,如果发现分区中有文件丢失,可以到`lost+found`目录中查找。可以使用`file`命令查看文件系统类型,以确定哪些文件是需要的\[2\]。 需要注意的是,不同的文件系统可能需要调用不同的扫描工具。例如,对于ext3文件系统,应该使用`fsck.ext3`命令来进行修复\[3\]。 #### 引用[.reference_title] - *1* *2* [Linux学习-41-检测和修复文件系统fsck命令用法](https://blog.csdn.net/weixin_42045639/article/details/127895766)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [使用fsck修复系统文件错误](https://blog.csdn.net/lileiyuyanqin/article/details/87086127)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

AlexFang0904

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值