solve_raspbian_sd_card_corruption_issues_with_read-only_mounted_root_partition

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
solve_raspbian_sd_card_corruption_issues_with_read-only_mounted_root_partition [30.01.2017 14:55] Pascal Sutersolve_raspbian_sd_card_corruption_issues_with_read-only_mounted_root_partition [25.10.2018 08:12] (current) – [The Script] Pascal Suter
Line 21: Line 21:
 #!/bin/sh #!/bin/sh
 #  Read-only Root-FS for Raspian using overlayfs #  Read-only Root-FS for Raspian using overlayfs
-#  Version 1.0+#  Version 1.1 
 +
 +#  Version History: 
 +#  1.0: initial release 
 +#  1.1: adopted new fstab style with PARTUUID. the script will now look for a /dev/xyz definiton first  
 +#       (old raspbian), if that is not found, it will look for a partition with LABEL=rootfs, if that 
 +#       is not found it look for a PARTUUID string in fstab for / and convert that to a device name 
 +#       using the blkid command. 
 # #
 #  Created 2017 by Pascal Suter @ DALCO AG, Switzerland to work on Raspian as custom init script #  Created 2017 by Pascal Suter @ DALCO AG, Switzerland to work on Raspian as custom init script
Line 41: Line 48:
 # #
 # #
-#  Tested with Raspbian mini, 2017-01-11+#  Tested with Raspbian mini, 2018-10-09
 # #
 #  This script will mount the root filesystem read-only and overlay it with a temporary tempfs  #  This script will mount the root filesystem read-only and overlay it with a temporary tempfs 
Line 52: Line 59:
 # #
 #  Install:  #  Install: 
-#  copy this script to /sbin/overlayRoot.sh and add "init=/sbin/overlayRoot.sh" to the cmdline.txt  +#  copy this script to /sbin/overlayRoot.sh, make it executable and add "init=/sbin/overlayRoot.sh" to the  
-#  file in the raspbian image's boot partition. +#  cmdline.txt file in the raspbian image's boot partition. 
 #  I strongly recommend to disable swapping before using this. it will work with swap but that just does  #  I strongly recommend to disable swapping before using this. it will work with swap but that just does 
 #  not make sens as the swap file will be stored in the tempfs which again resides in the ram. #  not make sens as the swap file will be stored in the tempfs which again resides in the ram.
Line 97: Line 104:
 rootMountOpt=`awk '$2 == "/" {print $4}' /etc/fstab` rootMountOpt=`awk '$2 == "/" {print $4}' /etc/fstab`
 rootFsType=`awk '$2 == "/" {print $3}' /etc/fstab` rootFsType=`awk '$2 == "/" {print $3}' /etc/fstab`
 +echo "check if we can locate the root device based on fstab"
 +blkid $rootDev
 +if [ $? -gt 0 ]; then
 +    echo "no success, try if a filesystem with label 'rootfs' is avaialble"
 +    rootDevFstab=$rootDev
 +    rootDev=`blkid -L "rootfs"`
 +    if [ $? -gt 0 ]; then
 +        echo "no luck either, try to further parse fstab's root device definition"
 +        echo "try if fstab contains a PARTUUID definition"
 +        echo "$rootDevFstab" | grep 'PARTUUID=\(.*\)-\([0-9]\{2\}\)'
 +        if [ $? -gt 0 ]; then 
 +     fail "could not find a root filesystem device in fstab. Make sure that fstab contains a device definition or a PARTUUID entry for / or that the root filesystem has a label 'rootfs' assigned to it"
 +        fi
 +        device=""
 +        partition=""
 +        eval `echo "$rootDevFstab" | sed -e 's/PARTUUID=\(.*\)-\([0-9]\{2\}\)/device=\1;partition=\2/'`
 +        rootDev=`blkid -t "PTUUID=$device" | awk -F : '{print $1}'`p$(($partition))
 +        blkid $rootDev
 +        if [ $? -gt 0 ]; then
 +     fail "The PARTUUID entry in fstab could not be converted into a valid device name. Make sure that fstab contains a device definition or a PARTUUID entry for / or that the root filesystem has a label 'rootfs' assigned to it"
 +        fi
 +    fi
 +fi
 mount -t ${rootFsType} -o ${rootMountOpt},ro ${rootDev} /mnt/lower mount -t ${rootFsType} -o ${rootMountOpt},ro ${rootDev} /mnt/lower
 if [ $? -ne 0 ]; then if [ $? -ne 0 ]; then
  • solve_raspbian_sd_card_corruption_issues_with_read-only_mounted_root_partition.txt
  • Last modified: 25.10.2018 08:12
  • by Pascal Suter