Merge from vendor branch GROFF:
[dragonfly.git] / etc / rc.d / fsck
1 #!/bin/sh
2 #
3 # $NetBSD: fsck,v 1.2 2001/06/18 06:42:35 lukem Exp $
4 # $FreeBSD: src/etc/rc.d/fsck,v 1.4 2002/10/12 10:31:31 schweikh Exp $
5 # $DragonFly: src/etc/rc.d/fsck,v 1.3 2004/01/26 17:21:15 rob Exp $
6 #
7
8 # PROVIDE: fsck
9 # REQUIRE: localswap
10 # KEYWORD: DragonFly
11
12 . /etc/rc.subr
13
14 name="fsck"
15 start_cmd="fsck_start"
16 stop_cmd=":"
17
18 stop_boot()
19 {
20         #       Terminate the process (which may include the parent /etc/rc)
21         #       if booting directly to multiuser mode.
22         #
23         if [ "$autoboot" = yes ]; then
24                 kill -TERM $$
25         fi
26         exit 1
27 }
28
29 fsck_start()
30 {
31         if [ "$autoboot" = no ]; then
32                 echo "Fast boot: skipping disk checks."
33         elif [ "$autoboot" = yes ]; then
34                                         # During fsck ignore SIGQUIT
35                 trap : 3
36
37                 echo "Starting file system checks:"
38                         fsck -p
39
40                 case $? in
41                 0)
42                         ;;
43                 2)
44                         stop_boot
45                         ;;
46                 4)
47                         echo "Rebooting..."
48                         reboot
49                         echo "Reboot failed; help!"
50                         stop_boot
51                         ;;
52                 8)
53                         if checkyesno fsck_y_enable; then
54                                 echo "File system preen failed, trying fsck -y."
55                                 fsck -y
56                                 case $? in
57                                 0)
58                                         ;;
59                                 *)
60                                         echo "Automatic file system check failed; help!"
61                                         stop_boot
62                                         ;;
63                                 esac
64                         else
65                                 echo "Automatic file system check failed; help!"
66                                 stop_boot
67                         fi
68                         ;;
69                 12)
70                         echo "Boot interrupted."
71                         stop_boot
72                         ;;
73                 130)
74                         stop_boot
75                         ;;
76                 *)
77                         echo "Unknown error; help!"
78                         stop_boot
79                         ;;
80                 esac
81         fi
82 }
83
84 load_rc_config $name
85 run_rc_command "$1"