blob: a290672c2ed6938f73bdd71b75c35af9abad1460 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
|
#! /bin/sh
### BEGIN INIT INFO
# Provides: checkfs
# Required-Start: checkroot
# Required-Stop:
# Should-Start: mtab
# Default-Start: S
# Default-Stop:
# X-Interactive: true
# Short-Description: Check all filesystems.
### END INIT INFO
# Include /usr/bin in path to find on_ac_power if /usr/ is on the root
# partition.
PATH=/sbin:/bin:/usr/bin
FSCK_LOGFILE=/var/log/fsck/checkfs
[ "$FSCKFIX" ] || FSCKFIX=no
. /lib/init/vars.sh
. /lib/lsb/init-functions
. /lib/init/splash-functions-base
. /lib/init/usplash-fsck-functions.sh
. /lib/init/swap-functions.sh
do_start () {
# See if we're on AC Power. If not, we're not gonna run our
# check. If on_ac_power (in /usr/) is unavailable, behave as
# before and check all file systems needing it.
# Disabled AC power check until fsck can be told to only check the
# file system if it is corrupt when running on battery. (bug #526398)
# if which on_ac_power >/dev/null 2>&1
# then
# on_ac_power >/dev/null 2>&1
# if [ $? -eq 1 ]
# then
# [ "$VERBOSE" = no ] || log_success_msg "Running on battery power, so skipping file system check."
# BAT=yes
# fi
# fi
BAT=""
fscheck="yes"
if [ -f /fastboot ] || grep -s -w -i "fastboot" /proc/cmdline
then
[ "$fscheck" = yes ] && log_warning_msg "Fast boot enabled, so skipping file system check."
fscheck=no
fi
#
# Check the rest of the file systems.
#
if [ "$fscheck" = yes ] && [ ! "$BAT" ] && [ "$FSCKTYPES" != "none" ]
then
# Execute swapon command again, in case there are lvm
# or md swap partitions. fsck can suck RAM.
swaponagain 'lvm and md'
if [ -f /forcefsck ] || grep -s -w -i "forcefsck" /proc/cmdline
then
force="-f"
else
force=""
fi
if [ "$FSCKFIX" = yes ]
then
fix="-y"
else
fix="-a"
fi
spinner="-C"
case "$TERM" in
dumb|network|unknown|"")
spinner=""
;;
esac
[ "$(uname -m)" = s390 ] && spinner="" # This should go away
FSCKTYPES_OPT=""
[ "$FSCKTYPES" ] && FSCKTYPES_OPT="-t $FSCKTYPES"
handle_failed_fsck() {
log_failure_msg "File system check failed.
A log is being saved in ${FSCK_LOGFILE} if that location is writable.
Please repair the file system manually."
log_warning_msg "A maintenance shell will now be started.
CONTROL-D will terminate this shell and resume system boot."
# Start a single user shell on the console
if ! sulogin $CONSOLE
then
log_failure_msg "Attempt to start maintenance shell failed.
Continuing with system boot in 5 seconds."
sleep 5
fi
}
if [ "$VERBOSE" = no ]
then
log_action_begin_msg "Checking file systems"
if usplash_running; then
PROGRESS_FILE=`mktemp` || exit 1
set -m
logsave -s $FSCK_LOGFILE fsck -C3 -R -A $fix $force $FSCKTYPES_OPT >/dev/console 2>&1 3>$PROGRESS_FILE &
set +m
usplash_progress "$PROGRESS_FILE"
rm -f $PROGRESS_FILE
else
splash_start_indefinite
logsave -s $FSCK_LOGFILE fsck $spinner -R -A $fix $force $FSCKTYPES_OPT
FSCKCODE=$?
splash_stop_indefinite
fi
if [ "$FSCKCODE" -gt 1 ]
then
log_action_end_msg 1 "code $FSCKCODE"
handle_failed_fsck
else
log_action_end_msg 0
fi
else
if [ "$FSCKTYPES" ]
then
log_action_msg "Will now check all file systems of types $FSCKTYPES"
else
log_action_msg "Will now check all file systems"
fi
splash_start_indefinite
logsave -s $FSCK_LOGFILE fsck $spinner -V -R -A $fix $force $FSCKTYPES_OPT
FSCKCODE=$?
splash_stop_indefinite
if [ "$FSCKCODE" -gt 1 ]
then
handle_failed_fsck
else
log_success_msg "Done checking file systems.
A log is being saved in ${FSCK_LOGFILE} if that location is writable."
fi
fi
fi
rm -f /fastboot /forcefsck 2>/dev/null
}
case "$1" in
start|"")
do_start
;;
restart|reload|force-reload)
echo "Error: argument '$1' not supported" >&2
exit 3
;;
stop)
# No-op
;;
*)
echo "Usage: checkfs.sh [start|stop]" >&2
exit 3
;;
esac
:
|