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
|
#!/bin/sh
type getarg > /dev/null 2>&1 || . /lib/dracut-lib.sh
type det_fs > /dev/null 2>&1 || . /lib/fs-lib.sh
mount_root() {
local _rflags_ro
# sanity - determine/fix fstype
rootfs=$(det_fs "${root#block:}" "$fstype")
journaldev=$(getarg "root.journaldev=")
if [ -n "$journaldev" ]; then
case "$rootfs" in
xfs)
rflags="${rflags:+${rflags},}logdev=$journaldev"
;;
reiserfs)
fsckoptions="-j $journaldev $fsckoptions"
rflags="${rflags:+${rflags},}jdev=$journaldev"
;;
*) ;;
esac
fi
_rflags_ro="$rflags,ro"
_rflags_ro="${_rflags_ro##,}"
while ! mount -t "${rootfs}" -o "$_rflags_ro" "${root#block:}" "$NEWROOT"; do
warn "Failed to mount -t ${rootfs} -o $_rflags_ro ${root#block:} $NEWROOT"
fsck_ask_err
done
READONLY=
fsckoptions=
if [ -f "$NEWROOT"/etc/sysconfig/readonly-root ]; then
# shellcheck disable=SC1090
. "$NEWROOT"/etc/sysconfig/readonly-root
fi
if getargbool 0 "readonlyroot=" -y readonlyroot; then
READONLY=yes
fi
if getarg noreadonlyroot; then
READONLY=no
fi
if [ -f "$NEWROOT"/fastboot ] || getargbool 0 fastboot; then
fastboot=yes
fi
if ! getargbool 0 rd.skipfsck; then
if [ -f "$NEWROOT"/fsckoptions ]; then
read -r fsckoptions < "$NEWROOT"/fsckoptions
fi
if [ -f "$NEWROOT"/forcefsck ] || getargbool 0 forcefsck; then
fsckoptions="-f $fsckoptions"
elif [ -f "$NEWROOT"/.autofsck ]; then
# shellcheck disable=SC1090
[ -f "$NEWROOT"/etc/sysconfig/autofsck ] \
&& . "$NEWROOT"/etc/sysconfig/autofsck
if [ "$AUTOFSCK_DEF_CHECK" = "yes" ]; then
AUTOFSCK_OPT="$AUTOFSCK_OPT -f"
fi
if [ -n "$AUTOFSCK_SINGLEUSER" ]; then
warn "*** Warning -- the system did not shut down cleanly. "
warn "*** Dropping you to a shell; the system will continue"
warn "*** when you leave the shell."
emergency_shell
fi
fsckoptions="$AUTOFSCK_OPT $fsckoptions"
fi
fi
rootopts=
if getargbool 1 rd.fstab -d -n rd_NO_FSTAB \
&& ! getarg rootflags > /dev/null \
&& [ -f "$NEWROOT/etc/fstab" ] \
&& ! [ -L "$NEWROOT/etc/fstab" ]; then
# if $NEWROOT/etc/fstab contains special mount options for
# the root filesystem,
# remount it with the proper options
rootopts="defaults"
while read -r dev mp fs opts _ fsck || [ -n "$dev" ]; do
# skip comments
[ "${dev%%#*}" != "$dev" ] && continue
if [ "$mp" = "/" ]; then
# sanity - determine/fix fstype
rootfs=$(det_fs "${root#block:}" "$fs")
rootopts=$opts
rootfsck=$fsck
break
fi
done < "$NEWROOT/etc/fstab"
fi
# we want rootflags (rflags) to take precedence so prepend rootopts to
# them
rflags="${rootopts},${rflags}"
rflags="${rflags#,}"
rflags="${rflags%,}"
# backslashes are treated as escape character in fstab
# esc_root=$(echo ${root#block:} | sed 's,\\,\\\\,g')
# printf '%s %s %s %s 1 1 \n' "$esc_root" "$NEWROOT" "$rootfs" "$rflags" >/etc/fstab
if fsck_able "$rootfs" \
&& [ "$rootfsck" != "0" -a -z "$fastboot" -a "$READONLY" != "yes" ] \
&& ! strstr "${rflags}" _netdev \
&& ! getargbool 0 rd.skipfsck; then
umount "$NEWROOT"
fsck_single "${root#block:}" "$rootfs" "$rflags" "$fsckoptions"
fi
echo "${root#block:} $NEWROOT $rootfs ${rflags:-defaults} 0 ${rootfsck:-0}" >> /etc/fstab
if ! ismounted "$NEWROOT"; then
info "Mounting ${root#block:} with -o ${rflags}"
mount "$NEWROOT" 2>&1 | vinfo
elif ! are_lists_eq , "$rflags" "$_rflags_ro" defaults; then
info "Remounting ${root#block:} with -o ${rflags}"
mount -o remount "$NEWROOT" 2>&1 | vinfo
fi
if ! getargbool 0 rd.skipfsck; then
[ -f "$NEWROOT"/forcefsck ] && rm -f -- "$NEWROOT"/forcefsck 2> /dev/null
[ -f "$NEWROOT"/.autofsck ] && rm -f -- "$NEWROOT"/.autofsck 2> /dev/null
fi
}
if [ -n "$root" -a -z "${root%%block:*}" ]; then
mount_root
fi
|