diff --git a/initramfs-init b/initramfs-init
index 6b9fe4df057e988c8d76cc5f01ba631fbc25fab2..d35f5ae865cc83f576f2ae7e77cd39025531286c 100755
--- a/initramfs-init
+++ b/initramfs-init
@@ -53,6 +53,15 @@ find_ovl() {
 	echo "$ovl"
 }
 
+retry_mount() {
+	# usb might need some time to settle so we retry a few times
+	for i in $(seq 0 19); do
+		mount $@ 2>&1 && return 0
+		sleep 1
+	done
+	return 1
+}
+
 # gotta start from somewhere :)
 echo "Alpine Init $VERSION"
 
@@ -116,7 +125,9 @@ eend 0
 
 # check if root=... was set
 if [ -n "$KOPT_root" ]; then
-	mount $KOPT_root $NEWROOT
+	ebegin "Mounting root"
+	retry_mount $KOPT_root $NEWROOT 2>/dev/null
+	eend $?
 	cat /proc/mounts | while read DEV DIR TYPE OPTS ; do
 		if [ "$DIR" != "/" -a "$DIR" != "$NEWROOT" -a -d "$DIR" ]; then
 			mkdir -p $NEWROOT/$DIR
@@ -136,11 +147,7 @@ if [ -n "$ALPINE_DEV_FS" ]; then
 	mount_opts="-t $ALPINE_DEV_FS"
 fi
 
-# usb might need some time to settle so we retry a few times
-for i in $(seq 0 19); do
-	mount $mount_opts /dev/$ALPINE_DEV $ALPINE_MNT >/dev/null 2>&1 && break
-	sleep 1
-done
+retry_mount $mount_opts /dev/$ALPINE_DEV $ALPINE_MNT >/dev/null 2>&1
 eend $?
 
 ebegin "Mounting loopback device for kernel modules"