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