xref: /OK3568_Linux_fs/external/rkscript/mount-helper (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun#!/bin/sh
2*4882a593Smuzhiyun### BEGIN INIT INFO
3*4882a593Smuzhiyun# Provides:       mount-all
4*4882a593Smuzhiyun# Default-Start:  S
5*4882a593Smuzhiyun# Default-Stop:
6*4882a593Smuzhiyun# Description:    Mount all internal partitions in /etc/fstab
7*4882a593Smuzhiyun### END INIT INFO
8*4882a593Smuzhiyun
9*4882a593Smuzhiyun# Don't exit on error status
10*4882a593Smuzhiyunset +e
11*4882a593Smuzhiyun
12*4882a593Smuzhiyun# Uncomment below to see more logs
13*4882a593Smuzhiyun# set -x
14*4882a593Smuzhiyun
15*4882a593Smuzhiyun. $(dirname $0)/disk-helper
16*4882a593Smuzhiyun
17*4882a593SmuzhiyunLOGFILE=/tmp/mount-all.log
18*4882a593Smuzhiyun
19*4882a593Smuzhiyundo_part()
20*4882a593Smuzhiyun{
21*4882a593Smuzhiyun	# Not enough args
22*4882a593Smuzhiyun	[ $# -lt 6 ] && return
23*4882a593Smuzhiyun
24*4882a593Smuzhiyun	# Ignore comments
25*4882a593Smuzhiyun	echo $1 | grep -q "^#" && return
26*4882a593Smuzhiyun
27*4882a593Smuzhiyun	DEV=$(device_from_attr ${1##*=})
28*4882a593Smuzhiyun	MOUNT_POINT=$2
29*4882a593Smuzhiyun	FSTYPE=$3
30*4882a593Smuzhiyun	OPTS=$4
31*4882a593Smuzhiyun	PASS=$6 # Skip fsck when pass is 0
32*4882a593Smuzhiyun
33*4882a593Smuzhiyun	echo "Handling $DEV $MOUNT_POINT $FSTYPE $OPTS $PASS"
34*4882a593Smuzhiyun
35*4882a593Smuzhiyun	# Setup check/mount tools and do some prepare
36*4882a593Smuzhiyun	prepare_part || return
37*4882a593Smuzhiyun
38*4882a593Smuzhiyun	# Parse ro/rw opt
39*4882a593Smuzhiyun	MOUNT_RO_RW=rw
40*4882a593Smuzhiyun	if echo $OPTS | grep -o "[^,]*ro\>" | grep "^ro$"; then
41*4882a593Smuzhiyun		MOUNT_RO_RW=ro
42*4882a593Smuzhiyun	fi
43*4882a593Smuzhiyun
44*4882a593Smuzhiyun	if mountpoint -q $MOUNT_POINT && ! is_rootfs; then
45*4882a593Smuzhiyun		# Make sure other partitions are unmounted.
46*4882a593Smuzhiyun		umount $MOUNT_POINT &>/dev/null || return
47*4882a593Smuzhiyun	fi
48*4882a593Smuzhiyun
49*4882a593Smuzhiyun	# Check and repair
50*4882a593Smuzhiyun	check_part
51*4882a593Smuzhiyun
52*4882a593Smuzhiyun	# Mount partition
53*4882a593Smuzhiyun	is_rootfs || mount_part || return
54*4882a593Smuzhiyun
55*4882a593Smuzhiyun	# Resize partition if needed
56*4882a593Smuzhiyun	resize_part
57*4882a593Smuzhiyun
58*4882a593Smuzhiyun	# Restore ro/rw
59*4882a593Smuzhiyun	remount_part $MOUNT_RO_RW
60*4882a593Smuzhiyun}
61*4882a593Smuzhiyun
62*4882a593Smuzhiyunmount_all()
63*4882a593Smuzhiyun{
64*4882a593Smuzhiyun	echo "Will now mount all partitions in /etc/fstab"
65*4882a593Smuzhiyun
66*4882a593Smuzhiyun	AUTO_MKFS="/.auto_mkfs"
67*4882a593Smuzhiyun	if [ -f $AUTO_MKFS ];then
68*4882a593Smuzhiyun		echo "Note: Will auto format partitons, remove $AUTO_MKFS to disable"
69*4882a593Smuzhiyun	else
70*4882a593Smuzhiyun		unset AUTO_MKFS
71*4882a593Smuzhiyun	fi
72*4882a593Smuzhiyun
73*4882a593Smuzhiyun	SKIP_FSCK="/.skip_fsck"
74*4882a593Smuzhiyun	if [ -f $SKIP_FSCK ];then
75*4882a593Smuzhiyun		echo "Note: Will skip fsck, remove $SKIP_FSCK to enable"
76*4882a593Smuzhiyun	else
77*4882a593Smuzhiyun		echo "Note: Create $SKIP_FSCK to skip fsck"
78*4882a593Smuzhiyun		echo " - The check might take a while if didn't shutdown properly!"
79*4882a593Smuzhiyun		unset SKIP_FSCK
80*4882a593Smuzhiyun	fi
81*4882a593Smuzhiyun
82*4882a593Smuzhiyun	while read LINE;do
83*4882a593Smuzhiyun		do_part $LINE
84*4882a593Smuzhiyun	done < /etc/fstab
85*4882a593Smuzhiyun}
86*4882a593Smuzhiyun
87*4882a593Smuzhiyuncase "$1" in
88*4882a593Smuzhiyun	start|"")
89*4882a593Smuzhiyun		# Mount basic file systems firstly
90*4882a593Smuzhiyun		mount -a -t "proc,devpts,tmpfs,sysfs,debugfs,pstore"
91*4882a593Smuzhiyun
92*4882a593Smuzhiyun		mount_all 2>&1 | tee $LOGFILE
93*4882a593Smuzhiyun		echo "Log saved to $LOGFILE"
94*4882a593Smuzhiyun		;;
95*4882a593Smuzhiyun	*)
96*4882a593Smuzhiyun		echo "Usage: mount-helper start" >&2
97*4882a593Smuzhiyun		exit 3
98*4882a593Smuzhiyun		;;
99*4882a593Smuzhiyunesac
100*4882a593Smuzhiyun
101*4882a593Smuzhiyun:
102