]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - etc/rc.d/fsck
Add UPDATING entries and bump version.
[FreeBSD/FreeBSD.git] / etc / rc.d / fsck
1 #!/bin/sh
2 #
3 # $FreeBSD$
4 #
5
6 # PROVIDE: fsck
7 # REQUIRE: swap
8 # KEYWORD: nojail
9
10 . /etc/rc.subr
11
12 name="fsck"
13 desc="Run file system checks"
14 start_cmd="fsck_start"
15 stop_cmd=":"
16
17 fsck_start()
18 {
19         if [ "$autoboot" = no ]; then
20                 echo "Fast boot: skipping disk checks."
21         elif [ ! -r /etc/fstab ]; then
22                 echo "Warning! No /etc/fstab: skipping disk checks."
23         elif [ "$autoboot" = yes ]; then
24                 # During fsck ignore SIGQUIT
25                 trap : 3
26
27                 check_startmsgs && echo "Starting file system checks:"
28                 if checkyesno background_fsck; then
29                         fsck -F -p
30                 else
31                         fsck -p
32                 fi
33
34                 err=$?
35                 if [ ${err} -eq 3 ]; then
36                         echo "Warning! Some of the devices might not be" \
37                             "available; retrying"
38                         root_hold_wait
39                         check_startmsgs && echo "Restarting file system checks:"
40                         if checkyesno background_fsck; then
41                                 fsck -F -p
42                         else
43                                 fsck -p
44                         fi
45                         err=$?
46                 fi
47
48                 case ${err} in
49                 0)
50                         ;;
51                 2)
52                         stop_boot
53                         ;;
54                 4)
55                         echo "Rebooting..."
56                         reboot
57                         echo "Reboot failed; help!"
58                         stop_boot
59                         ;;
60                 8|16)
61                         if checkyesno fsck_y_enable; then
62                                 echo "File system preen failed, trying fsck -y ${fsck_y_flags}"
63                                 fsck -y ${fsck_y_flags}
64                                 case $? in
65                                 0)
66                                         ;;
67                                 *)
68                                 echo "Automatic file system check failed; help!"
69                                         stop_boot
70                                         ;;
71                                 esac
72                         else
73                                 echo "Automatic file system check failed; help!"
74                                 stop_boot
75                         fi
76                         ;;
77                 12)
78                         echo "Boot interrupted."
79                         stop_boot
80                         ;;
81                 130)
82                         stop_boot
83                         ;;
84                 *)
85                         echo "Unknown error ${err}; help!"
86                         stop_boot
87                         ;;
88                 esac
89         fi
90 }
91
92 load_rc_config $name
93 run_rc_command "$1"