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
|
#!/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
fsckoptions=
if [ -f "$NEWROOT"/etc/sysconfig/readonly-root ]; then
# shellcheck disable=SC1090
. "$NEWROOT"/etc/sysconfig/readonly-root
fi
if [ -f "$NEWROOT"/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 ! getargbool 0 ro && fsck_able "$rootfs" \
&& [ "$rootfsck" != "0" ] && [ -z "$fastboot" ] \
&& ! 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" ] && [ -z "${root%%block:*}" ]; then
mount_root
fi
|