Jelajahi Sumber

fix automount of devices registered in /etc/fstab, when usb-storage is kernel builtin

Waldemar Brodkorb 10 tahun lalu
induk
melakukan
e43bcb7710

+ 1 - 1
package/base-files/Makefile

@@ -6,7 +6,7 @@ include $(TOPDIR)/mk/rootfs.mk
 
 PKG_NAME:=		base-files
 PKG_VERSION:=		1.0
-PKG_RELEASE:=		92
+PKG_RELEASE:=		93
 PKG_SECTION:=		base
 PKG_DESCR:=		basic files and scripts
 

+ 4 - 4
package/base-files/src/etc/init.d/cifs

@@ -7,14 +7,14 @@ autostart)
 	exec sh $0 start
 	;;
 start)
-	grep cifs /proc/filesystems >/dev/null 2>&1
+	grep -v "^#" /etc/fstab| grep cifs >/dev/null 2>&1
 	if [ $? -eq 0 ];then
-		grep -v "^#" /etc/fstab| grep cifs >/dev/null 2>&1
+		grep cifs /proc/filesystems >/dev/null 2>&1
 		if [ $? -eq 0 ];then
 			mount -a -t cifs
+		else
+			logger -t cifs "No cifs support in kernel"
 		fi
-	else
-		logger -t cifs "No cifs support in kernel"
 	fi
 	;;
 stop)

+ 36 - 6
package/base-files/src/etc/init.d/fs

@@ -3,10 +3,20 @@
 [[ $1 = autostart ]] || exit 0
 
 # activate swap
-[ -x /sbin/swapon ] && { swapon -a; }
+[ -x /sbin/swapon ] && {
+	grep swap /etc/fstab >/dev/null 2>&1
+	if [ $? -eq 0 ];then
+		logger -s -t '' "Activating swap"
+		swapon -a
+	fi
+}
 
 # activate any logical volumes
-[ -x /usr/sbin/lvm ] && { lvm vgscan; lvm vgchange -ay; }
+[ -x /usr/sbin/lvm ] && {
+	logger -s -t '' "Activating LVM volumes"
+	lvm vgscan
+	lvm vgchange -ay
+}
 
 rootdisk=$(readlink /dev/root)
 # strip partitions (f.e. mmcblk0p2, sda2, ..)
@@ -15,11 +25,11 @@ rootdisk=${rootdisk%[1-9]}
 rootparts=$(grep "^/dev/${rootdisk}" /etc/fstab|awk '{ print $1 }')
 
 for part in $rootparts; do
-	fstype=$(grep "^$part" /etc/fstab|awk '{ print $3 }')
-	mnt=$(grep "^$part" /etc/fstab|awk '{ print $2 }')
+	fstype=$(grep "^$part " /etc/fstab|awk '{ print $3 }')
+	mnt=$(grep "^$part " /etc/fstab|awk '{ print $2 }')
 	[ -x /usr/sbin/fsck.$fstype ] && {
-		logger -s "Checking $fstype filesystem on $part"
-		fsck -p -t $fstype $part
+		logger -s -t '' "Checking $fstype filesystem on $part"
+		fsck $part
 	}
 	grep $fstype /proc/filesystems >/dev/null 2>&1
 	if [ $? -eq 0 ];then
@@ -29,4 +39,24 @@ for part in $rootparts; do
 		exit 1
 	fi
 done
+
+# mount local filesystems not rootdisk
+fstypes="ext2 ext3 ext4 xfs vfat ntfs"
+for fs in $fstypes; do
+	disks=$(grep -v "^#" /etc/fstab| grep -v $rootdisk |grep $fs|awk '{ print $1 }' >/dev/null 2>&1)
+	for disk in $disks; do
+		logger -t '' "Found $disk with filesystem $fs"
+		grep $fs /proc/filesystems >/dev/null 2>&1
+		if [ $? -eq 0 ];then
+			[ -x /usr/sbin/fsck.$fs ] && {
+				logger -s -t '' "Checking $fs filesystem on $disk"
+				fsck $disk
+			}
+			logger -s -t '' "Mounting local filesystems"
+			mount $disk
+		else
+			logger -s -t '' "No $fs filesystem in kernel"
+		fi
+	done
+done
 exit 0

+ 4 - 4
package/base-files/src/etc/init.d/nfs

@@ -9,16 +9,16 @@ autostart)
 	exec sh $0 start
 	;;
 start)
-	grep nfs /proc/filesystems >/dev/null 2>&1
+	grep -v "^#" /etc/fstab| grep nfs >/dev/null 2>&1
 	if [ $? -eq 0 ];then
-		grep -v "^#" /etc/fstab| grep nfs >/dev/null 2>&1
+		grep nfs /proc/filesystems >/dev/null 2>&1
 		if [ $? -eq 0 ];then
 			mkdir -p /var/lib/nfs/rpc_pipefs
 			mount -t rpc_pipefs rpc_pipefs /var/lib/nfs/rpc_pipefs
 			mount -a -t nfs
+		else
+			logger -t nfs "No nfs support in kernel"
 		fi
-	else
-		logger -t nfs "No nfs support in kernel"
 	fi
 	;;
 stop)

+ 17 - 7
package/base-files/src/etc/mdev/fs

@@ -15,7 +15,7 @@ else
 	disk="${MDEV} (${uuid})"
 fi
 if [ -z $fs ];then
-	logger "Disk $disk not registered in /etc/fstab"
+	logger -t mdev "Disk $disk not registered in /etc/fstab"
 	exit 0
 fi
 
@@ -24,11 +24,20 @@ if [ $fs = "ntfs-3g" ];then
 	procfs=fuse
 fi
 
+# check if already mounted via /etc/init.d/fs
+adk_check() {
+	mount | grep "${MDEV} "
+	if [ $? -eq 0 ];then
+		logger -t mdev "Filesystem on ${MDEV} already mounted"
+		exit 0
+	fi
+}
+
 # filesystem check
 adk_fsck() {
 	[ -x /usr/sbin/fsck.$fs ] && {
-		logger -s "Checking $fs filesystem on $disk"
-			fsck -p -t $fs ${MDEV}
+		logger -t mdev "Checking $fs filesystem on ${MDEV}"
+		fsck ${MDEV}
 	}
 }
 
@@ -37,19 +46,20 @@ adk_mount() {
 	mkdir -p $mnt >/dev/null 2>&1
 	grep $procfs /proc/filesystems >/dev/null 2>&1
 	if [ $? -eq 0 ];then
-		logger -s "Mounting $disk to $mnt"
+		logger -t mdev "Mounting local filesystems"
 		mount $mnt
 		if [ $? -ne 0 ];then
-			logger -s "Mounting $disk failed"
+			logger -s -t '' "Mounting $disk failed"
 		fi
 	else
-		logger -s "Required filesystem $procfs not available"
+		logger -t mdev "Required filesystem $procfs not available"
 	fi
 }
 
 case "${ACTION}" in
 add)
-	logger "Device ${MDEV} added to the system"
+	logger -t mdev "Device ${MDEV} added to the system"
+	add_check
 	adk_fsck
 	adk_mount
 	;;