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